- PVSM.RU - https://www.pvsm.ru -
Прошло больше полугода с момента выхода фреймворка для C++ 🐙 userver [1] в open-source. За это время мы многое узнали, на многом настрадались, а главное — получили много приятных сюрпризов.
И мы решили об этом написать. Рассказ будет полезен тем, кто ведёт или планирует вести свой open-source проект или занимается контрибьютами. Остальным будет интересно почитать про чужое набивание шишек и что вообще open-source даёт проекту.
Чтобы анонс о выходе фреймворка в open-source прошёл более гладко, мы выложили исходники чуть заранее и плотно занялись обустройством на GitHub: настройкой CI, оформлением, тестированием и выкладкой документации. В итоге ко времени анонса у нас уже был готовый к использованию шаблон сервиса на основе фреймворка userver со всеми настроенными CI и сборками.
Однако, чего мы совсем не ожидали, так это то, что репозиторий с исходниками найдут ещё до анонса. Совсем неожиданно, что некоторые сторонние разработчики нашли нетривиальные места для оптимизаций глубоко в недрах драйверов и подсказали более производительные решения. Мы ответили им той же монетой: в течение нескольких часов неожиданно всё улучшили и выразили благодарности в changelog.
Потребности компании зачастую совершенно не совпадают с пожеланиями пользователей из open-source. То, что успешно используется годами в продакшене внутри компании, может не подойти новому пользователю из-за фактора, которого просто нет в корпоративной среде.
Мы ожидали, что понадобятся доработки после выхода в open-source, но не догадывались, что именно запросят наши новые пользователи. Разумеется был и технический долг: некоторые вещи требовали доработки, но было непонятно, какие именно долги больше всего мозолят глаза.
Чтобы подчеркнуть, что мы знаем, что есть над чем работать, мы выложили фреймворк в статусе беты. Решение себя оправдало: многие сообщения от пользователей попадали под регулярку «А как вы вообще выкладываетесь без технологии s+. А, хотя это бета, тогда ОК!»
Итак, анонс [2].
Для нас было важно из анонса понять основные боли при попытке воспользоваться фреймворком, основные пожелания по развитию и осознать, что мы упустили. Ну и показать себя с лучшей стороны, конечно же.
Разумеется, не обошлось и без курьёзов. Например, мы отдали в отдел PR материал с общим посылом: «Сегодня мы анонсируем выход в open-source фреймворка userver для создания высоконагруженных IO-bound приложений на C++». Материал после некоторых трансформаций отправился в публикацию как «Анонсируем выход первого в мире набора инструментов, который позволяет создавать высоконагруженные приложения». К счастью, удалось вовремя остановить процесс.

У нас есть доска с от руки нарисованными ачивками за сомнительные достижения — эта появилась как раз после этой истории
Первое, с чем стали приходить люди после анонса выхода в open-source — проблемы со сборкой.
Если вы хотите быть дружелюбны к хотя бы половине ваших пользователей, то придётся поддержать:
Это как раз одна из тех проблем, которые внутри крупной компании практически не возникают: кто-то давным давно уже всё настроил и все вещи разрабатываются фактически под пару платформ. Ну, или есть отдельная команда людей, которая занимается проблемами сборки.
И тут мы простого решения для open-source не придумали, поэтому пошли по сложному пути: поддержать по мере сил и возможностей все конфигурации, которые интересны нашим активным пользователям. Отдельное спасибо тем, кто принёс готовые правки под свои любимые платформы!
Из сообщений в чатах поддержки и из комментариев к статьям быстро стала понятна озабоченность пользователей судьбой технологии. Ведь если вы начинаете использовать что-то для решения своих бизнес-задач, вам не захочется, чтобы оно в скором времени перестало поддерживаться.
Показать, что мы настроены серьёзно, помогло следующее:
Чем меряются большие мальчики, разрабатывающие фреймворки? Правильно, их производительностью. Есть различные ресурсы в сети, где можно посравнивать себя с другими, и даже получить из таких сравнений полезную информацию:
О, раз бенчмарки такие полезные, может фреймворк прям по ним и выбирать? Вот, например, нам в компании понадобился фреймворк на Go/Kotlin/NodeJS/… Давайте возьмём топовый из бенчмарков!
Идея интересная, но на практике не работает:
И наконец, мой любимый фактор — простота написания и поддержки кода. На каком из этих фреймворков вы хотели бы писать:

Нельзя просто взять и написать отличную документацию. В зависимости от настроения, задачи и предпочтений разработчикам нужны разные стили документации:
При этом все люди разные, и материалы желательно преподносить и в разных формах, например, как видео-лекции и как текст.
Документация — это не разовая задача. Надо прислушиваться к запросам пользователей и покрывать бо́льшим количеством примеров те части фреймворка, по которым возникают частые вопросы. Или же упрощать это место во фреймворке, чтобы вообще не надо было документировать.
Чаты поддержки идут рука об руку с документацией: люди задают вопросы, как правило, по тем моментам, которые плохо освещены в документации, что помогает её дополнять.
Отдышавшись после анонса и поправив основные недочёты, мы с запозданием осознали интересный момент. В Яндексе множество обучающих проектов, например, Школа бэкенд-разработки [5]. Многие из этих активностей предполагают написание выпускной работы — некоторого игрушечного сервиса. Он знакомит студента с промышленной разработкой и в публичный доступ, как правило, не выкладывается.
Но ведь если хорошо поработал, хочется этим похвастаться! Показать код, указать строчку в резюме со ссылкой на сделанную работу.
Мы подключились к части инициатив с предложением: «А давайте выпускным проектом будет написание реального кода для userver». В итоге, если хорошо поработал, точно будет чем похвастаться и что показать.
Правда, тут возникли заминки: нас завалило кодом, и мы до сих пор занимаемся его подмерживанием в userver.
Кстати, оказалось весьма полезным разметить feature requests на GitHub как «Хорошая задача для начинающих» [6] и отдельно разметить «Большая фича для продвинутых» [7]. Мы сразу получаем набор задач внешних активностей на 2—4 дня и набор проектов для больших многомесячных курсов, например, как «Код для всех» [8].
Вопрос: «А зачем вы выложили в open-source?» не даёт покоя многим людям в чатиках и на форумах. Ну что ж, давайте честно на всё ответим и разберём все мифы.
Увы, это так не работает. Подавляющее большинство коммитов у нас идёт от внутренних разработчиков. Я, конечно, втайне надеюсь, что это изменится. Но, как показывает опыт с Boost C++ Libraries, даже очень популярные открытые проекты очень долго выходят на подобную модель развития и очень мало у кого получается.
При этом PR от стороннего пользователя — это маленький праздник! Ведь значит ещё кому-то проект стал интересен и полезен.
Не без этого :) Но как и с разработкой, здесь подавляющее количество багрепортов идёт изнутри. Многие внешние багрепорты связаны со сборкой или функциональностью, которые в компании редко используется.
Если вдруг у вас небольшой проект с достаточно узкой функциональностью (например, небольшая библиотека), то open-source вам явно поможет лучше тестироваться. Для больших фреймворков всё несколько сложнее.
У разных проектов могут быть разные причины. Прежде всего, мы хотели похвастаться своей разработкой и предоставить всем желающим возможность воспользоваться ей.
Для больших компаний open-source — это ещё и развитие технологического бренда компании. Так можно показать людям интересные и полезные решения, которые мы пишем в рабочее время. Ну и при найме это полезно: если вы вдруг выбираете между разными отделами Яндекса, у вас есть возможность заранее увидеть технологии, с которыми вы будете работать, и выбрать себе код по вкусу.
А ещё open-source даёт возможность использовать привычный набор инструментов в партнёрских проектах: например, теперь есть шанс воспользоваться userver при коллаборации с CERN, или при автоматизации сталелитейных заводов.
Мы готовимся к первому релизу фреймворка в этом году. А пока релиз ещё в работе, мы с радостью готовы рассказать о фреймворке (и не только) на конференциях Saint HighLoad++ [9] и HighLoad++ Serbia [10].
А если вам самим есть о чём рассказать, приходите к нам на C++ Zero Cost Conf с идеей доклада [11]. У нас тепло, весело и международно! В этом году конференция пройдёт в двух странах — в России и в Сербии. Ждём ваши заявки!
Спасибо всем, кто контрибьютил и багрепортил в userver. Вы лучшие!
Автор: Antony Polukhin
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/framework/384945
Ссылки в тексте:
[1] 🐙 userver: https://userver.tech/
[2] анонс: https://habr.com/ru/companies/yandex/articles/674902/
[3] Changelog: https://userver.tech/d6/d38/md_en_userver_roadmap_and_changelog.html#changelog
[4] Roadmap: https://userver.tech/d6/d38/md_en_userver_roadmap_and_changelog.html#roadmap
[5] Школа бэкенд-разработки: https://academy.yandex.ru/schools/backend
[6] «Хорошая задача для начинающих»: https://github.com/userver-framework/userver/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22+label%3A%22help+wanted%22
[7] «Большая фича для продвинутых»: https://github.com/userver-framework/userver/issues?q=is%3Aissue+is%3Aopen+label%3A%22big%22+label%3A%22help+wanted%22
[8] «Код для всех»: https://foss.kruzhok.org/code-for-all
[9] Saint HighLoad++: https://highload.ru/spb/2023
[10] HighLoad++ Serbia: https://highload.rs/2023/
[11] приходите к нам на C++ Zero Cost Conf с идеей доклада: https://cppzerocostconf.yandex.ru/?utm_source=habr&utm_medium=social&utm_campaign=c_zerocostconf300723&utm_content=partners&utm_term=rus
[12] Источник: https://habr.com/ru/companies/yandex/articles/729588/?utm_source=habrahabr&utm_medium=rss&utm_campaign=729588
Нажмите здесь для печати.