[Перевод] Безвозмездная работа над проектами с открытым кодом — нежизнеспособная модель
Вечер понедельника, без четверти полночь. Мой сын шести недель от роду спит у меня в кабинете, чтобы жена могла спокойно отдыхать первую половину ночи. Раз уж он наконец заснул, мне бы стоило последовать его примеру после целого дня за работой. Но я еще не закончил. По профессии я разработчик ПО, но программирование — это также моё увлечение и страсть. Поэтому я делаю то же, что и всегда по вечерам уже больше десяти лет: загружаю компьютер, чтобы поработать с кодом.
Чем бы заняться, чем бы заняться… Освоить что-то новое? Возможно. Написать статью в блог? Ну… как видите, этот вариант победил. Но при этом в глубине души я знаю, что стоило бы уделить внимание некоторым проектам с открытым кодом. Так вышло, что один из них активно используется. Я приближаюсь к отметке в три четверти миллиона скачиваний, и люди явно находят в нем определенную пользу для себя. Это если говорить о хороших сторонах. Если же говорить о плохих, скопилось уже с десяток отчетов об ошибках, которые я еще даже не открывал, не говоря о том, чтобы отсортировать, изучить и исправить. От сообщества поступило несколько pull request-ов — их тоже нужно просмотреть. Некоторые зависимости требуют обновлений. Список можно продолжать. Этот проект достиг той вехи, которой достигают и многие другие: человек, который его поддерживает, выгорел.
Что движет любым разработчиком?
В своих усилиях по написанию ПО я определенно не одинок. И, вопреки риску сделать излишне смелое обобщение для огромной группы специалистов, занимающихся разработкой, предположу, что эти усилия образуются из простого уравнения:
время = увлеченность + деньги
Каждый час, который мы тратим на написание кода, происходит из некоторого сочетания увлеченности и оплаты. Любая из этих переменных может быть равна нулю, но тогда другая должна иметь достаточно большое значение, чтобы покрыть отсутствие одного из компонентов. Давайте разберем мою деятельность в качестве примера:
Синим обозначена увлеченность, желтым — оплата (в совокупности они составляют мотивацию), красным — спрос.
В том, что касается работы (колонка справа), я отлично устроился. Мне платят деньги за написание кода. По большому везению, меня также очень вдохновляет то, что я пишу, и продукты, которые при этом создаю. Кроме того, моя работа крайне востребована. Всё это просто здорово, я счастливчик. Другие люди, возможно, не так увлечены своей работой или вообще к ней равнодушны, но ради зарплаты возвращаются в офис каждый понедельник в девять утра. И это тоже вполне нормально.
Теперь посмотрим на другие мои текущие проекты. Один из них — мой блог (колонка слева). Прибыли я от него никакой не получаю, но мне интересно для него писать, а спрос соответствует затрачиваемым усилиям. Далее, есть личный проект (вторая колонка справа), который тоже не приносит мне денег, но зато весьма воодушевляет, так что мотивация остается высокой. Спроса на него нет, что позволяет работать в собственном темпе и развивать проект в любых направлениях, каких пожелаю.
Ну и наконец, проект с открытым кодом, который лично для меня не представляет интереса (вторая колонка слева). Когда-то он занимал для меня то же место, что и личный проект сейчас, но теперь с точки зрения мотивации изменился до неузнаваемости. Однако спрос на него высокий. Многие пользователи, зачастую корпоративные, применяют его на благо своим организациям. Плохие новости: мне от этого ничего не перепадает. Так что мотивация остается практически на нулевом уровне. Увлеченность больше не вывозит, но деньги могли бы мотивировать меня регулярно работать над этим проектом.
Так что же происходит?
Вся ситуация сводится к следующему: многие компании, работающие на прибыль, используют программы, которые какой-то разработчик написал безвозмездно. Эти программы способствуют привлечению дополнительной прибыли. Но разработчик ничего с этого не имеет — он ведь просто автор каких-то там коммитов и в зарплатных ведомостях не значится.
Такую схему можно назвать VaaS (Volunteering as a Service, волонтерство как услуга). По сути, это дармовщина для компаний за счет трудолюбивых одиночек. Звучит довольно мрачно, так что позвольте немного сгладить сказанное. Далеко не все компании относятся к программам с открытым кодом подобным образом. А из тех, которые относятся, готов поручиться, 99% не удерживают плату намеренно. Просто в самой системе проектов с открытым кодом не предусмотрено легких способов для компаний оплатить труд людей, которые делают вклад.
Каково решение?
Постановка проблемы не отличается новизной. Она часто мелькает в обсуждениях в разных формах. Так какое же решение могу предложить я?
Люди, которые делают вклад в проекты с открытым кодом, должны получать вознаграждение, рассчитанное по следующей формуле:
деньги = размер вклада * число пользователей
Если вы активно работаете над проектом, которым пользуются многие люди, выплаты должны это отражать. И, с другой стороны, если вы пару раз отправляли коммиты для продукта, который никому особо не нужен, то это тоже должно сказываться на выплатах (или их отсутствии). Но не всё так просто — на свете есть разные типы разработчиков, участвующих в проектах с открытым кодом. Некоторые из них делают свой вклад в рамках трудоустройства, а это значит, что их работа, скорее всего, уже оплачивается: вознаграждение встроено в зарплату, которую они получают дважды в месяц. Но есть и другой тип участников — они работают над проектами в свое личное время и вне связи с какими-либо организациями.
Выступать в качестве спонсоров должны компании, которые пользуются программами с открытым кодом. Раз уж пользуются, в конце концов. И пусть им не приходится покупать лицензию, как в случае с Какой-Нибудь Компанией С Закрытым Кодом, это не значит, что можно вообще никак не вкладываться.
Что могут дать компании?
Самый очевидный ответ — деньги. Менее очевидный ответ — время своих разработчиков. Это весьма распространенная практика. Компании могут выделять часть рабочего времени сотрудников или даже полную ставку на участие в проектах с открытым кодом. Отличный пример реализации этой идеи — Kubernetes и все разработчики, которые делают вклад в проект в рамках рабочего времени. Компании, участвующие в инициативе (Google, Red Hat, VMware и Microsoft), прикладывают руку к успеху соответствующих проектов — они жертвуют временной ресурс своих сотрудников.
Если же компания не выделяет ресурса на поддержание проектов с открытым кодом, вообще или в достаточной мере, она должна возмещать недостачу деньгами, которые будут перенаправлены разработчикам, не представляющим никакие компании. Компенсацию от предприятий следует рассчитывать так:
компенсация = разработчики + деньги
Всю модель можно представить следующим образом:
Все три компании, представленные на схеме, добросовестно вносят свой вклад в проекты с открытым кодом, но делают это по-разному. Первая компания предоставляет и деньги, и время разработчиков, вторая компания просто пересылает деньги, а третья — направляет на проект должное количество сотрудников. Третья компания принимает на себя ту же роль, что и Google или Microsoft для Kubernetes.
Как будут оплачиваться зависимости?
Быстро, назовите все зависимости Kubernetes. Не можете. Я тоже — их слишком много. Не должно получиться так, что справедливую компенсацию получают только продукты, обращенные к пользователю. Такие продукты должны перенаправлять часть полученных ресурсов (денег и рабочих часов) своим зависимостям, чтобы складывалось что-то вроде большого счастливого дерева с вкладами.
Какие могут возникнуть сложности?
Тут много подводных камней, даже если брать в расчет только те, которые пришли мне в голову. Уверен, в реальности все еще сложнее. Именно по этой причине в текущем моменте я отказываюсь возлагать моральную ответственность на компании. Необходимо внедрить систему, которая взимала бы компенсацию с пользователей и распределяла ее по проектам и зависимостям этих проектов. Иначе это просто неподъемно. Вторая компания со схемы выше может в один прекрасный день заявить: «Мы хотим поступать порядочно и оплачивать труд людей, работающих над программами с открытым кодом». Но ээээ… куда именно им посылать деньги? Понятия не имею. Нет никакого способа отправить кому-то оплату без кучи накладных расходов –, а это уже несправедливо по отношению ко всем задействованным лицам. И нет, я не считаю GitHub Sponsors достойным решением.
Обобщая сказанное
Надеюсь, когда-нибудь мы разберемся, как должным образом вознаграждать людей за их работу над проектами с открытым кодом. Это простая честность, и не думаю, что кто-то (включая и сами компании) станет оспаривать это утверждение. Нам всем нужно как-то уживаться в большом мире ПО.