Шалом алейкум! Это мой первый серьезный вклад в опенсорс (не считая коммитов в игрушку Space Station 13).
PySentry - это CLI тулза написанная на Rust, которая берет твой питонячий проект, анализирует зависимости и говорит "вот эти библиотеки уязвимы, обнови". Основная фишка: он в 15-30 раз быстрее существующих решений типа pip-audit, умеет работать с lock файлами (uv.lock, poetry.lock, pylock.toml, Pipfile.lock), поддерживает несколько баз уязвимостей и имеет систему кеширования.
Как появилась идея? Что вдохновило?
Я активно использую uv и решил подумать, чем я могу помочь проекту. Полистал иссуи на гитхабе и нашел фичреквест на добавление команды для аудита. Подумал че б и нет, и сделал им пулл реквест.
Написал рабочий код, тесты пройдены, но мейнтейнеры в итоге сказали, что не могут взять на себя долгосрочную поддержку этой фичи. Потому что большое. Понять их можно.
Но код уже был написан, работал хорошо и поэтому я решил выделить эту фичу в отдельный проект.
Что вошло в прототип и сколько времени на него было потрачено?
От идеи до релиза текущей версии - примерно два месяца.
В тот код, что я пульнул в uv, вошло:
- Парсинг основных форматов: uv.lock и pyproject.toml
- Интеграция с PyPA Advisory Database
- Базовый кеш для хранения уязвимостей
Какой технологический стек вы использовали? Почему?
Rust - основной выбор, вдохновленный успехом uv и ruff. У меня есть опыт с растом с 2016 года, периодически писал всяческие пет-проекты на нём.
Почему не Python? Производительность.
Архитектурные решения:
- Асинхронное получение данных из баз уязвимостей
- Кеширование уязвимостей и заивисимостей отдельно
- Потоковая обработка больших наборов данных
Интеграции:
- Несколько баз данных уязвимостей: PyPA Advisory, OSV.dev, PyPI JSON API
- Внешние инструменты для разрешения зависимостей: uv и pip-tools для requirements.txt
- Форматы вывода: JSON, SARIF, Markdown для разных рабочих процессов
Как вы запускались и искали первых пользователей?
Честно? Почти никак специально не искал. Пользователи приходили сами:
- Часть нашла проект через мой PR в uv и связанный иссуй (мейнтейнеры дали добро оставить ссылочки)
- Написал пару твитов, которые получились довольно нелепыми (я плохо их пишу и не разбираюсь в твиттере), они не особо взлетели (но, вастрик, спасибо за репост!)
- Недавно о проекте рассказали в подкасте PythonBytes
Самый значимый фидбек получил от Jonathan'a Dekhtiar'a из NVIDIA (тимлид TensorFlow-RT и WheelNext) - "Let's just say than in one week since the project got its first release, there is not one mention of pip-audit in any of my projects anywhere. Boom nada gone."
С какими самыми неожиданными трудностями пришлось столкнуться?
Отклонение PRа в uv было не очень приятным. Потратил кучу времени, но в итоге "спасибо, но не будем это поддерживать". Это конечно моя ошибка (моей гиперфиксации и импульсивности), что я не посоветовался с ребятами, окей ли вообще будет взять это в работу. Зато вон, теперь своей опенсорс проектик. Кайфёж.
Из технических:
- Сборка wheels под винду: до сих пор нет колёс под винду из-за сложностей с компиляцией. Юзерам приходится использовать уже скомпиленные бинары из релиза или устанавливать через cargo.
- Интеграция резолверов: интеграция с uv и pip-tools оказалась сложнее, чем ожидал. Нужно было обеспечить изолированное выполнение, правильную работу кеша.
- Performance tuning: казалось бы, Rust = быстро, но пришлось много заниматься оптимизацией: асинхронность, кеширование, использование памяти (которое пока что в процессе оптимизации)
Сколько потратили и заработали? Есть идеи как это можно монетизировать? А заодно планы на будущее.
Потратил: в деньгах - ничего. Человекочасов - около двух месяцев интенсивной разработки в свободное время.
Заработал: $0. Проект полностью опенсорсный и бесплатный.
Планы монетизации: у меня есть план по развитию SaaS модели:
- CLI останется бесплатным
- SaaS платформа: real-time мониторинг уязвимостей и в будущем думаю развивать статический анализатор кода (скорее всего тоже в опенсорс), привязывая и тренируя к этому всему нейронки для распознавания/подтверждения уязвимостей.
Но сначала нужно добиться релиза 1.0.0 и получить хорошую узнаваемость в сообществе. Без качественной опенсорсной основы SaaS скорее всего не взлетит.
Нужны ли какие-то советы или помощь Клуба?
Дап! Есть вопросики.
Продуктовые моменты:
- Кто использует сканеры уязвимостей в своих проектах? Какие проблемы с существующими решениями?
- Что было бы классно видеть в SaaS решении?
Бизнесовые:
- Как правильно строить freemium (если это можно так назвать) модель в B2B секурности?
- Продажи энтерпрайзу
- Стратегии для прайсинга
Сообщество(нные):
- Как эффективно рассказывать о подобных продуктах?
- Какой должен быть подход к маркетингу?
- Поставите звёздочку, если проект нравится?
Какой совет вы бы сами могли дать идущим по вашим стопам?
Пара наблюдений:
Отказ - это не провал: отклоненный PR в uv стал началом более интересного самостоятельного проекта. Иногда "нет" открывает новые возможности.
Реальные отзывы пользователей > показатели: один отзыв от крутого разраба оказался важнее сотни звездочек на гитхабе (но вы оставляйте <3)
Проект активно развивается, всегда рад фидбеку. GitHub: https://github.com/nyudenkov/pysentry, сайт: https://pysentry.com
Кстати, а ещё я ищу работу питонистом-бекендером.
У меня 6+ лет опыта, за спиной самые разные проекты и довольно крутой опыт. Посмотреть мою сивишку можно на гитхабе - тык
А ещё из прикольных решений (мне это предложил как раз тот чувак из нвидии) - автоматические бенчмарки с каждым релизом и создание actions-ботом ПРа для обновления результатов в репе.
https://github.com/nyudenkov/pysentry/tree/main/benchmarks/results