Сделать вклад в развитие сообщества, прокачать скилы или сэкономить на разработке – у каждого есть свой мотив, чтобы участвовать в open source проектах. Мы поговорили с Андреем Власовских, участником программного комитета Pycon Russia и одним из фанатов открытого кода, как войти в open source и как добиться в нем успеха (и в чем этот успех можно измерить). Ну и немножко про Python, конечно.
IT-People: Андрей, с чего началась твоя любовь к Python?
Андрей Власовских: Моя история с Python началась в 2004 году в институте. Я тогда писал на C++ и Java. Что-то писал для себя, что-то с друзьями. Тогда был популярен скриптинг, скриптовые языки для написания чего-то небольшого. И среди всех этих скриптовых языков того времени (PHP, Perl, Bash) Python выглядел как самый понятный, читаемый и простой. В скриптовых языках меня больше всего привлекла интерактивность. Потому что они сразу давали тебе возможность экспериментировать, изучить все детали, рассмотреть объект. А что это за атрибут? А вот эта функция? А что будет, если я сделаю так или так? Это было очень увлекательно. Оказалось, что на Python можно сделать почти что всё.
IT-People: В своём блоге ты пишешь, что в начале работы с Python был так влюблён в язык, что использовал его даже там, где он был не очень нужен. Зачем и чему тебя научил этот опыт?
Андрей Власовских: Тогда было очевидно, что ты можешь взять C или C++ и написать всё, что угодно. Для Java это уже казалось не так очевидно, но всё-таки. А вот к скриптовым языкам было отношение как к игрушечным. В крайнем случае — как к клею для приложений. Но Python был настолько понятным, настолько читаемым, что на нём хотелось писать и писать. Курса по Python в институте ещё не было, но была возможность посмотреть — где же ещё его можно применить и что из этого выйдет. Например, в криптографии Python напрямую был неприменим, потому что там нужно очень эффективно молотить числа. В Python работа с числами, с массивами чисел очень медленная, а NumPy тогда ещё не было. Единственный способ, который мне тогда был известен, — написать свой C extension. То есть, реализовать критическую часть на C, а на Python сделать всё остальное. Я так попробовал и понял разницу между скоростями Python и C. В среднем она отличается в 10-50 раз, в плохом случае — раз в 100. Положительная часть опыта заключается в том, что почти всегда на Python будет меньше кода и можно намного быстрее стартовать. И главное, что в большинстве случаев ничего, кроме Python, и не понадобится.
IT-People: Как ты пришёл к идее открытого кода и чем она тебе нравится?
Андрей Власовских: В начале 2000-х был очень популярен линуксовый open source в целом. Про это очень много писали в интернете — мол, Майкрософт не круто, Линукс круто — там всё опенсорсное, можно взять исходники, во всём разобраться. Это казалось мне очень привлекательным: я читал исходники, смотрел, что происходит. Ну и довольно быстро пришла мысль, что хорошо бы работать вместе с другими людьми. Мне нравилось, что можно вместе что-то спланировать, обсудить. Это было веселее, чем заниматься написанием кода одному.
Open source стал для меня такой коммуникационной затеей, когда мы с друзьями начали пробовать совместно писать код. Ни к чему это тогда не пришло, но сама идея мне понравилась. Хоте те ранние мои проекты и не взлетели, но мне удалось поработать с несколькими контрибьюторами. Я получил опыт, который показал важность международной коммуникации и знания английского языка.
Чуть позже я стал интересоваться языками программирования с точки зрения того, как они устроены, как устроены их компиляторы. В то же время увлёкся идеей применения парсинга методом рекурсивного спуска на основе функциональных комбинаторов. Из таких простых парсеров можно делать комбинации, которые сами вновь будут являться парсерами. Их можно рекурсивно применять и построить на них всю грамматику. Плюс они еще обладают всякими крутыми свойствами из мира функционального программирования.
Так в 2009 году я написал библиотеку funcparserlib. Сначала для себя, просто как игрушку. Но потом понял, что она компактная, работает быстрее её аналогов, таких как PyParsing. Подумал, что будет круто её заопенсорсить. Сейчас у неё 100 тысяч загрузок в месяц с PyPI и это лишь 0.1% от загрузок PyParsing. Популярность — вещь относительная.
То есть, я оказался в open source, потому что 1) подхватил то, что было на хайпе в начале двухтысячных 2) мне показалось, что будет круто поделиться моей библиотекой парсинга с сообществом 3) мне в принципе нравится работа в команде.
IT-People: Какие проблемы легче всего решить с помощью open source?
Андрей Власовских: Бывает open source чисто на энтузиазме, некоммерческий. Бывает же open source в рамках компании. Опенсорс на энтузиазме — это на самом деле круто. Сам CPython тому пример. Большинство девелоперов вообще ничего не получают за то, что они над этим работают. Никакая компания это не контролирует. Почти все разработчики работают в свободное время. Язык развивается и не нужно никакого сурового индустриального комитета, не нужно компаний с кучей денег, чтобы язык развивался. Достаточно хорошей идеи, запаса удачи, и люди вокруг сами организуются. Для сообщества это выгодно, потому что появляются качественные продукты. Для людей — это личный интерес, личные амбиции, желание проводить время с другими людьми, работа над сложными интересными проблемами, над которыми почему-то не удаётся поработать в своей компании. Например, у меня было мало возможностей писать на Python на основной работе, а в open source — сколько угодно.
Какие проблемы решает open source в рамках компании? Теоретически можно тратить меньше времени и денег на поддержку софта, в котором заинтересована не только твоя компания, но и другие компании и люди. Когда у вашей компании есть компонент, на котором мы напрямую не зарабатываете. Будь он готовый, качественный и бесплатный, вы бы его использовали. Но поскольку его нет или существующие решения вам не подходят, нужно создать свой. Но строить из этого какой-то бизнес или извлекать прибыль напрямую вы не хотите или не можете.
IT-People: Нет ли ощущения, что open source обесценивает коммерческую разработку?
Андрей Власовских: У меня нет. А вот у Elastic и MongoDB вполне может быть такое ощущение (они делали open source, но недавно перешли на схему с двумя лицензиями — copyleft и коммерческой — что сделало невозможным бесплатное коммерческое использование их софта). Если вы делаете опенсорсной основную штуку, на которой вы зарабатываете, не удивляйтесь, что её потом начинает продавать как сервис тот же Amazon. Им бы стоило или не идти в open source, или предоставлять на его основе сервис, с которым другие компании не могут потягаться.
Приведу ещё один пример. Когда мы начали делать PyCharm, это был закрытый код. И он таким оставался первые три года. После чего в 2013 году мы заопенсорсили PyCharm Community Edition. Почему? Во-первых, мы увидели, что есть куча людей, которые не профессионалы в Python, не получают деньги за написание кода, а используют его как такой повседневный, обыденный язык программирования. И большинство этих людей не станут нашими коммерческими пользователями. Для профессионалов же у нас будут припасены крутые коммерческие фичи: поддержка веб-фреймворков, интеграция с базами данных, Docker и т. д. А вот базовая вся поддержка Python с дебаггером, рефакторингами, дополнением кода, переходами к определению — это всё есть в open source версии. И это не обесценило нашу разработку, оно лишь сегментировало и расширило нашу аудиторию.
IT-People: Есть ли какие-то заблуждения об open source, с которыми ты сталкивался и можешь опровергнуть?
Андрей Власовских: Их много, я и сам на них попадался. И продолжаю попадаться!
Заблуждение 1. Если вы компания и вы что-то заопенсорсили, то не надо ничего делать — оно само взлетит и вы сразу получите бесплатное развитие вашего продукта.
Нет, так не будет. Чтобы продукт стал популярным, нужно вкладываться в это, нужно взаимодействие с сообществом. Нужен менеджмент, чтобы привлекать людей, разбирать пул реквесты, писать гайдлайны, промоутить этот проект в новостях и на конференциях (например, на PyCon RU) и всячески облегчать другим участие в проекте. Если сделать всё правильно, то в будущем у вас будет уходить меньше времени и денег, чем если бы вы писали этот код сами.
Заблуждение 2. Если вы заопенсорсили что-то, то проект просто лежит у вас на публичном хостинге и вы сами его развиваете.
Есть индивидуалисты, которые не хотят брать на себя работу по приему пул реквестов, ответам на тикеты и т. д. Мол, есть исходник — бери, но взаимодействовать по нему с тобой мы не будем. Но так получится не open source, а скорее source open. В результате у таких проектов на GitHub меньше 100 звёздочек и только один-единственный контрибьютор. Open source — это всё же про совместное развитие проекта.
Заблуждение 3. Вы что-то выложите в open source и все скажут: «О, круто!».
Имейте в виду, только положительных комментариев вы не получите. Можно столкнуться с хейтом и троллингом. Вам будут писать: «Это отстой, ничего не работает!». Будут предъявлять к вам претензии, как будто вы им что-то обязаны. «Почему у тебя вот это не поддерживается? Когда начнёт? Ну-ка, назови дату».
Я в таких случаях вежливо объясняю людям, что это некоммерческий проект. Что я занимаюсь им в свободное время. Что нет никаких гарантий качества. Прошу внимательнее познакомиться с содержимым открытой лицензии. Если вам интересно — пишите pull request, я готов рассмотреть и принять его или выдать конструктивный фидбек.
IT-People: Допустим, я — начинающий программист, который хочет принять участие в open source. Как выбрать подходящий проект? На что обращать внимание и к чему можно быть готовым?
Андрей Власовских: Есть два подхода: либо контрибьютить в существующие проекты, либо выложить и пытаться развивать что-то своё.
Существующие хороши тем, что вы сразу вовлекаетесь в социальный аспект open source. Пул реквесты, ревью кода, общение в комментариях с неизвестными вам людьми, попытки договориться и понять друг друга — всё это ценно. На конференциях есть спринты и хакатоны. Там обычно всё показывают и рассказывают, как начать контрибьютить в проект.
Альтернатива — можно сделать что-то своё, выложить и жадно ждать любых реакций. На всё отвечать, рассказывать о проекте на форумах, в разных соцсетях, на Гитхабе, на митапах и конференциях. Кстати, формат коротких докладов lightning talks — отличный способ рассказать о своём проекте участникам конференции за 5 минут и получить опыт публичных выступлений.
Как выбирать проект:
Обращайте внимание на то, что проект вообще готов принять новичков. Некоторые на Гитхабе так и пишут: «Этот тикет подходит для начинающих контрибьюторов».
Выбирайте те проекты, которые интересны и полезны лично вам. Будет больше мотивации внести в них свой вклад.
IT-People: Какой из своих проектов ты считаешь самым успешным, а какой не оправдал надежд?
Андрей Власовских: Из open source самым успешным я бы назвал IdeaVim — просто потому что у него больше всего звездочек на Гитхабе (около 7 тысяч), около 100 контрибьюторов, 11 миллионов скачиваний. За те лет восемь-девять, что я его поддерживал, проект очень вырос. Правда, новый мейнтейнер, которого я какое-то время менторил в JetBrains, добился ещё больших успехов. За два года проект стал в два раза более популярным на Гитхабе благодаря его активности. Так что можно очень много добиться, если есть инициатива, желание и навыки.
По PyCharm отдельно метрики посчитать сложно, потому что он живет на платформе IntelliJ и там один общий репозиторий кода. Это не самый успешный open source проект, потому что есть большой языковой барьер. Пользователи PyCharm в основном питонисты, а платформа IntelliJ написана на Java и Kotlin.
Из тех моих проектов, что не взлетели, я бы выделил Obraz. Это статический генератор сайтов, которых на самом деле 100500. Я поддерживаю на нём свой сайт pirx.ru, несколько моих знакомых им пользуются, но широкого внимания он не привлёк, несмотря на мои попытки его продвигать.
Ещё один не взлетевший проект — графическая утилита Pyxdu для просмотра занятого места на диске. Была такая утилита xdu — древняя программа из 1991 года, которая рисовала дерево каталогов в Unix-системах. Она мне супер нравилась, но была написана на C с древними зависимостями и уже под современную macOS не собиралась. Я её переписал так, чтобы сохранить этот ретростиль, эту атмосферу начала 1990-х — мне показалось, что это будет очень прикольно. Выпустил Pyxdu в день релиза оригинальной программы, ровно через 30 лет. Написал про неё в паре мест и надеялся на какую-то реакцию сообщества. Но реакций было супер мало и проект никем, кроме меня, не используется.
IT-People: Как убедить разработчиков писать код именно для твоего проекта?
Андрей Власовских: Надо, чтобы у проекта было много пользователей, тогда часть этих людей придёт контрибьютить в проект. А для привлечения пользователей можно промоутить свой проект. Это взаимосвязанные процессы. Надо активно вовлекать сообщество: общаться, общаться и ещё раз общаться.
В целом, же open source помогает узнать, как работают другие люди, завести новые знакомства, получить признание в сообществе и почувствовать, что ты вносишь вклад в то, чем ты пользуешься. Это очень классное ощущение!