Как начать разработку OpenSource продукта?

June 10, 2022
Около 6 мин

Все мы так или иначе пользуемся разными OpenSource-продуктами. Что-то нравится больше, что-то - меньше. И тому, что нам нравится, зачастую хочется помочь стать еще лучше. Один из способов - это помочь финансово, но мы же и сами разработчики, и порой мы представляем себя среди авторов замечательного инструмента, которым с удовольствием пользуемся сами. По крайней мере, так раньше было у меня. А затем мечта стала реальностью. Если для тебя это тоже мечта - прошу под кат: там и моя история, и ответ на то, как тебе тоже присоединиться к разработке любимого OpenSource-инструмента.

TL;DR: Как начать.

Thank you

Спасибо Леониду Черненкоopen in new window за помощь с вычиткой английской версии этой статьи. Это моя первая работа на английском языке, и я очень благодарен за его помощь и поддержку.

Моя история

А сейчас я один из core-разработчиков фреймворка Yii3. Я очень люблю этот фреймворк, и люблю помогать ему становиться лучше. История о том, как я вошел в команду разработки популярного фреймворка, проста до банальности. Однажды я зашел в чат фреймворка в telegram и увидел, как Александр Макаров, мейнтейнер фреймворка, отвечает на вопросы в чате. На все, не выбирая "интересное" или "полезное". Кажется, он тогда написал что-то на тему того, чтобы ему писали в личку, если есть какие-то вопросы лично к нему, но я не уверен. Признаться, я был ошарашен. Можно сказать, Александр был моим кумиром, и вдруг - вот он, в чатике, где с ним можно поболтать так же, как с моими друзьями. В тот момент я понял, что не общался с ним до сих пор лишь по той причине, что почему-то решил, что он не станет со мной общаться. И по той же причине я не участвовал в жизни Yii.

Тогда я решился на авантюру. Мне было страшно, но я это сделал: написал ему. Казалось бы, где Александр, а где я, но я убеждал себя, что в первую очередь мы оба - люди, а значит - нам не чуждо общение, да и вообще - за спрос не бьют. Я написал что-то вроде этого:

Привет! Меня зовут Виктор, я PHP-разработчик. Мне очень нравится фреймворк Yii, и я хотел бы помочь в выпуске новой, третьей версии. Подскажи, пожалуйста, с чего можно начать?

И он поблагодарил меня за энтузиазм и дал несколько ссылок на тикеты на гитхабе, за которые я вскоре принялся. Тикеты действительно были на уровне "с чего начать". Не помню, что именно, но это были мелочи. Постепенно я втянулся в этот процесс и стал делать все более сложные вещи. Например, я написал первую версию библиотеки yiisoft/validator. Не полностью, proof of concept. А потом я сменил основную работу и сколько-то месяцев не мог заниматься OpenSource-разработкой. Но ребята взяли мой код, доработали и превратили в полноценную библиотеку. Сейчас у нее уже совершенно другие архитектурные подходы, но лично для меня это много значит: это был мой первый серьезный вклад в популярный и, ИМХО, лучший фреймворк.

Что я вынес из OpenSource-разработки

Конечно, я вынес много опыта. Я продолжаю с радостью заниматься OpenSource в свободное время и продолжаю получать все новый опыт. Но если вычленить самые яркие приобретения, я назову эти пункты:

Глубокое понимание принципов SOLID и в целом архитектуры приложений и библиотек.

В коммерческой разработке у тебя обычно нет возможности спокойно сесть и проанализировать различные архитектурные решения, написать несколько вариантов и выбрать один из них, или даже полностью переработать первоначальный вариант, проведя глубокий рефакторинг. В OpenSource другие ценности: если в коммерческой разработке один из основных критериев выбора чего угодно - это соотношение цены/качества, то здесь ставка всегда на качество. И полученный в OpenSource опыт создания SOLID'ных архитектур я теперь применяю в коммерческой разработке, где важнее не следовать принципам до конца, а понимать, где и в какой степени им следовать стоит, и какова будет цена их соблюдения и нарушения.

Тестирование.

До Yii у меня было мало опыта в написании тестов. В основном - то, чему я научился сам. А здесь мы начали применять комплексный подход:

  • Psalmopen in new window, инструмент статической проверки типов.
  • PHPUnitopen in new window, фреймворк для написания автоматических тестов.
  • Infectionopen in new window, инструмент проверки качества тестов, написанных на PhpUnit (мутационное тестирование).

И при этом мы делаем максимально полное покрытие кода тестами. К релизу любого пакета Psalm выставляется на уровень 1, а Infection показывает почти 100% MSI (например, yiisoft/assetsopen in new window. Особенно ценно то, что я попал на новый виток развития фреймворка, и эти инструменты и способы их использования мы выбирали вместе, вместе покрывали тестами первые пакеты. Надо сказать, свой первый пакет я покрыл тестами так, что потом сам держался за голову: это было весьма сложно поддерживать, развивать. Но это тот случай, когда на ошибках учатся. Хотя именно те тесты на момент написания этой статьи еще не отрефакторены 😆

Опыт работы в самоуправляющемся коллективе.

Да, в core-команде разработки фреймворка Yii все равны. Как правило, мы придаем больше значения мнению Александра Макарова (@samdarkopen in new window), но и он от остальных не отмахивается. Если у кого-то есть вопросы или возражения - мы обсуждаем их до тех пор, пока не придем к какому-то общему решению.
У нас тоже не без минусов, конечно. Например, долгое время именно Александр выполнял всю менеджерскую и управленческую работу. Он фактически был нашим начальником. Он принимал архитектурные решения, мержил PR и релизил пакеты, он же определял приоритеты команды. И в какой-то момент на пару месяцев выпал из разработки фреймворка. Нам пришлось крутиться самим. И я очень рад, что мы выкрутились. Не сразу, но мы наладили процессы так, что они не требовали присутствия Александра. Мы созвонились и обсудили самые острые вопросы, договорились о компромиссах и приоритетах. А потом и @samdark подтянулся. Теперь он больше стал помогать остальной команде налаживать процессы по новой схеме, чем непосредственно управлять нашей деятельностью. Он по-прежнему самый уважаемый член команды и мейнтейнер фреймворка, но уже не является бас-фактором. Это чудесный, замечательный опыт: люди, объединенные одной идеей, по своей инициативе скооперировались и делают общее дело. И большинство из нас делает это бесплатно. Что-то подобное, вероятно, можно получить в т.н. "бирюзовых компаниях", но их на сегодня довольно мало, так что OpenSource остается более простым способом получить подобный опыт.

Это тот опыт, который оказался самым ярким для меня. Для каждого он свой. Но самое главное - для каждого найдется много такого, что очень сложно получить в коммерческой разработке. Не говоря уже о том, насколько ценна строчка о том, что у вас есть опыт разработки популярного OpenSource-инструмента, в резюме.

Как самому начать писать код в OpenSource-проекте

Не важно, какому именно продукту отдаете предпочтение лично вы, его команда будет рада вашей помощи. Хорошая новость в том, что начать писать код для него довольно просто. Необходимые для этого шаги:

  1. Узнать, в чем именно нужна помощь.
  2. Написать требуемый код и отдать его на ревью.
  3. Поправить код по замечаниям, которые появятся во время ревью.

Это действительно все. После этого вашим кодом начнут пользоваться сотни/тысячи/миллионы людей. Остаётся лишь продолжать попеременно выполнять пункты из этого списка.

Однако, самое сложное - это начать. Надо откуда-то узнать, чем именно можно помочь. Но тут тоже все просто: если вы не видите тикетов, которыми могли бы заняться прямо сейчас, задайте вопрос в сообществе продукта. Сейчас, наверное, у всех OpenSource-продуктов есть свои чаты или хотя бы форумы. Например, у Yii3 это телеграм-чаты @yii3ruopen in new window и @yii3enopen in new window. Алгоритм просто: заходим в чат, выражаем желание помочь и просим подкинуть тикет, которым стоит заняться. Если это для вас впервые - стоит попросить что-нибудь самое простое, чтобы на паре мелких задач прочувствовать весь процесс от чтения тикета до мержа вашей задачи в мастер.

Что мешает заняться разработкой OpenSource-продукта

Алгоритм выше действительно до безобразия прост, его выполнение доступно каждому. Но почему же так мало людей его выполняет?

1. Нет времени

Скорее всего, у вас есть фултайм-работа, может быть - семья. И 24 часа в сутки заняты, а то и все 25. Однако, секрет прост: можно заниматься OpenSource в свободное рабочее время. Может показаться, что "свободное" и "рабочее" - вещи несовместимые, однако это не так. Дело в том, что действительно продуктивны мы всего 2-4 часа из всего рабочего дня. Все остальное время занимают другие вещи: ревью кода, текучка, бюрократия и т.п. Но это - в идеале, а обычно все это время занято прокрастинацией. Подумайте: действительно ли ваши задачи для занимать столько времени на реализацию, сколько они занимают? Нет? Тогда предлагаю эксперимент: занимайтесь 2 часа в день своей работой с максимальным погружением в нее, не отвлекаясь ни на что. Подготовьте четкий план действий, переключите все чаты и почту на беззвучный, и - вперёд. Вторая часть плана - обязательно посвятить часть времени тому, что приносит удовольствие, чему вы искренне рады. Лично я порой это время трачу на разработку фреймворка 😃 Ну и значительную часть времени - на вялотекущие рабочие задачи, не требующие большой концентрации. И не стоит забывать про обед, где вы не будете заниматься работой ни в каком виде в течение часа. И ещё желательно устраивать себе прогулку или какие-то физ. упражнения в перерывах от работы.
Бьюсь об заклад, что при таком режиме ваша эффективность вырастет, а часть освободившегося времени можно будет отдать любимому OpenSource-проекту.

2. Я неопытен

Значит, OpenSource - для вас! Это превосходное место для наработки опыта. Как правило, задач хватает самой разной сложности: не только по разработке новых архитектурных подходов и оптимизации производительности, но и различные простые, но нужные мелочи: изменить стиль кода, дописать документацию, переименовать файлы и классы и т.п. И вы очень поможете, если возьмёте эти вещи на себя. При этом вы вольны брать и то, в чем ещё надо будет разобраться для реализации, и даже просить помощи у основных разработчиков продукта. Вход в OpenSource-разработку возможен на любом этапе профессионального развития, если вы уже хорошо знаете применяемый в продукте язык программирования.

3. Боюсь, что меня засмеют

Для меня очень странно было услышать эту причину. Я ещё не встречал настолько токсичных разработчиков OpenSource-инструментов, чтобы они как-то высмеивали тех, кто хочет им помочь. Да и за что? Единственное, что приходит в голову - что знакомые, услышав, что вы решили сделать свой вклад в OpenSource, из зависти и неуверенности в себе могут попытаться как-то оскорбить вас, остановить, чтобы ни в коем случае не оказалось, что вы "лучше их". Бросайте таких знакомых, если они у вас есть: не стоит идти ко дну вместе с ними. Наш с вами путь - только вперёд!

4. Мне страшно.

Конечно, страшно. Как и любому человеку, который собирается заняться чем-то новым. Это нормально. Без страха нет развития, а смелый человек - не тот, кто не боится, а кто действует, несмотря на страх. А потому лучшее решение - бояться и сделать 😊 Найти новых коллег, и кто знает, может быть - друзей и призвание?


Расскажите о своем опыте и желаниях. Писали ли вы код в OpenSource-проекты? Хотели ли вы когда-нибудь это сделать? Может, хотите, но что-то останавливает? Буду рад подискутировать в Telegram-чатеopen in new window.