вторник, 26 ноября 2019 г.

[software] Мое мнение об OpenSource лицензиях и способах заработка на OpenSource библиотеках

Попробовал давеча на RSDN-е конструктивно обсудить возможности построения успешного софтверного бизнеса вокруг библиотек, распространяемых под пермиссивными лицензиями. К сожалению, попытка не удалась. Но т.к. тема для меня лично более чем интересная, то попытаюсь высказать свое личное мнение в блоге.

Принципиальные различия между copyleft- и пермиссивными лицензиями

Итак, OpenSource библиотеки распространяются под какой-то лицензией (иногда под несколькими лицензиями). Лицензии эти, грубо говоря, можно разделить на два типа: copyleft- и премиссивные.

Copyleft-лицензия означает, что написанный на базе библиотеки код так же должен лицензироваться под copyleft-лицензией. Самыми известными copyleft-лицензиями являются GNU GPL и GNU AGPL. Так, если вы задействовали в своем проекте библиотеку под GPL-лицензией, то и свой проект вам придется открывать под GPL-лицензией.

Пермиссивные лицензии не обязывают вас лицензировать свой код под такой же открытой лицензией. Поэтому вы можете использовать библиотеки под пермиссивными лицензиями при разработке закрытого ПО, т.е. ПО, исходный код которого вы не открываете. Примерами пермиссивных лицензий являются MIT, BSD-3-Clause, Boost и пр.

Т.е. если вы взяли библиотеку под copyleft-лицензией, то вам придется разрабатывать и распространять свой код под такой же copyleft-лицензией. Кроме того, если вы захотите адаптировать чужую библиотеку под copyleft-лицензией под себя (сделать свой форк), то и ваш форк этой библиотеки так же будет под copyleft-лицензией и вы должны будете предоставлять его исходный код всем, кто пользуется вашим форком.

Тогда как при использовании пермиссивных лицензий вы не обязаны раскрывать код, написанный с использованием библиотеки. Так же многие пермиссивные библиотеки разрешают вам создание ваших собственных, закрытых форков использованных вами библиотек.

Религиозные войны вокруг copyleft-лицензий и логичность copyleft-лицензирования

К сожалению, нормальные разговоры вокруг лицензий, в особенности copyleft-лицензий, сложно вести из-за наличия красноглазых фанатиков тотального OpenSource и не менее красноглазых хейтеров copyleft-лицензий. Первые убеждены, что лишь OpenSource -- это true way, а вся проприетарщина должна сдохнуть в муках. Тогда как вторые с пеной у рта доказывают, что свободное ПО является свободным только тогда, когда его можно использовать так, как заблагорассудиться: захотел сделать свой закрытый форк -- сделал и никому ничего не должен.

Я, к счастью, уже не отношусь ни к тем, ни к другим, хотя в прошлом меня самого закидывало в крайности, в частности в сторону хейтерства copyleft-лицензий.

Но не могу не отметить, что идея copyleft более чем логична. И логика эта в том, чтобы обеспечить свободу программному коду, выпущенному под copyleft-лицензией. Именно коду, а не пользователям. Впрочем, у пользователей так же есть свобода: никто не заставляет выбирать библиотеку под copyleft-лицензией, каждый волен выбрать что-то другое.

(Не)применимость copyleft-лицензий в бизнесе

Существует устойчивое мнение, что copyleft-лицензии не применимы при разработке ПО на коммерческой основе.

Происхождение этого мнения вполне понятно, т.к. ПО, в котором задействованы лицензированные под copyleft-лицензиями библиотеки, должно распространяться в соответствии с условиями copyleft-лицензии, т.е. исходный код продукта должен быть доступен пользователю. И не только доступен, но и пользователь обладает свободой изменять этот код под свои собственные нужды. Что, очевидно, вступает в противоречие с интересами производителей ПО.

Тем не менее, существует несколько категорий ПО для которых применение библиотек под copyleft-лицензиями проблемы не представляет. В частности, это заказная разработка ПО при которой заказчик в обязательном порядке получает все исходные тексты разработанного за его деньги ПО. Грубо говоря, к вам пришел производитель тепловозов и заказал разработку софтовой начинки кабины тепловоза. И в этой разработке вы, скорее всего, спокойно сможете использовать библиотеки под copyleft-лицензиями, т.к. все равно отдаете все, что разработали на деньги заказчика, а заказчик должен иметь право делать с полученным софтом все, что ему потребуется.

Так что, в общем случае, бизнес относится к использованию софта под copyleft-лицензиями негативно, но далеко не всегда библиотеки под copyleft-лицензиями будут под запретом при коммерческой разработке ПО.

Мои личные предпочтения между copyleft- и пермиссивными лицензиями

Сам я предпочитаю пермиссивные лицензии, т.к. меня больше заботит то, что я могу сделать с кодом, а не то, какая именно свобода у самого программного кода или у тех, кто пользуется моим кодом.

Но есть очень важный фактор, влияние которого я сам изначально сильно недооценивал. А именно: любой труд должен вознаграждаться. Разработка софта, в частности, повторно используемых библиотек -- это труд. Иногда тяжелый и неблагодарный. Поэтому если автор кода хочет, чтобы вознаграждением за его труд была именно свобода кода (т.е. использование copyleft-лицензии для кода), значит так тому и быть. Вот такая цена.

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

Так что к разработкам под copyleft-лицензиями я с некоторых пор отношусь с уважением. Их авторы решили так, это их право.

Бизнес на OpenSource-библиотеках под copyleft- и пермиссивными лицензиями

Ну а теперь можно перейти к главному вопросу, а именно: на базе чего можно построить бизнес вокруг разработки OpenSource библиотек?

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

В случае библиотеки под пермиссивной лицензией, как мне представляется, у вас есть следующие варианты:

  • платная техподдержка. Т.е. клиенты вам платят за то, что вы оперативно решаете проблемы, которые возникают у клиентов при использовании вашей библиотеки. Не важно, будут это проблемы в самой библиотеке, в неправильном ее использовании (кто же читает документацию) или в коде самого пользователя. Вы решаете проблему и вам за это платят;
  • продажа консультаций и/или обучения. Т.е. клиент приходит к вам и говорит: "У нас тут 20 человек, которым нужно быстро начать работать с вашей библиотекой, могли бы вы прочитать некий "курс молодого бойца" для них, чтобы через неделю они уже могли выдавать "на гора" код приличного качества?" Или другой сценарий: к вам приходит потенциальный клиент и говорит что у него есть проблема и ему кажется, что его проблема может быть решена с помощью вашей библиотеки. Но он не уверен и хочет, чтобы вы ему объяснили что к чему и как лучше всего решать данную проблему;
  • доработка вашей библиотеки за чужие деньги. Т.е. к вам кто-то обращается с вопросом: "А вот такая фича у вас есть?", а вы ему говорите: "Пока нет". На что следует вопрос: "А будет?" На что вы отвечаете: "Если заплатите такую-то сумму, то будет тогда-то". Вам платят и вы добавляете в свою библиотеку новую фичу за деньги клиента;
  • разработка под заказ с использованием вашей библиотеки. Т.е. к вам обращается клиент с вопросом вида "У меня есть такая-то проблема, можете ли вы ее решить посредством вашего инструмента? Если да, то сколько это займет и во что мне обойдется?" И вы за деньги клиента решаете чужую проблему делая разработку на базе вашей библиотеки;
  • пожертвования. Т.е. пользователи и сочувствующие просто пересылают вам какую-то денюжку просто за то, что есть ваша библиотека.

И все бы было вполне себе ничего, но есть нюансы:

Во-первых, пожертвования в качестве источника финансирования вряд ли стоит рассматривать всерьез. Насколько я слышал, более-менее приличные суммы в виде пожертвований собирают единицы открытых проектов. Так что строить бизнес в расчете на пожертвования слишком рискованно и этот пункт можно смело вычеркивать.

Во-вторых, за исключением доработок библиотеки за чужие деньги все оставшиеся в списке пункты требуют выполнения дополнительной работы для получения денег от клиента. При таком раскладе собственно работа над библиотекой (в частности ее развитие и наполнение новым функционалом) становится не доходной, а расходной статьей.

В-третьих, техподдержку будут покупать далеко не все пользователи. Чем выше качество вашей библиотеки, чем активнее вы поддерживаете своих пользователей через Issues на GitHub/GitLab/BitBucket, тем большее количество пользователей обходится без покупки платной техподдержки. Вот такой вот парадокс: чем выше качество, тем больше пользователей, но меньше потребность в ваших услугах.

Ну и самое важное: все эти источники доступны вам и когда ваша библиотека распространяется под copyleft-лицензией.

Copyleft-лицензии как часть двойного лицензирования

Система с двойным лицензированием, когда код библиотеки распространяется и под copyleft-лицензией для тех, кто не хочет платить и/или является приверженцем тотального OpenSource, и под коммерческой лицензией для тех, кто хочет закрыть свои разработки, мне представляется очень разумным компромиссом. Пожалуй, лучшее и наиболее практичное сочетание из тех, что было придумано и широко опробовано на данный момент.

Самое важное, что продажа лицензий дает вам некий финансовый поток, который делает работу над собственно библиотекой именно что доходной статьей, а не расходной. Т.е., вероятно, большую часть денег вы будете получать не от продажи лицензий, а от сопутствующих работ (например, техподдержка, консультации и разработка под заказ), но тем не менее, часть ваших затрат на разработку новых версий вашей библиотеки будет компенсироваться продажей коммерческих лицензий.

Так что с точки зрения минимизации затрат на собственно разработку библиотеки двойное лицензирование с привлечением copyleft-лицензии выглядит более предпочтительно, чем использование только пермиссивных лицензий.

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

Спрос в современном мире и влияние на это OpenSource-лицензий

Одна из важнейших вещей, про которую нужно помнить в разговоре про заработок вокруг OpenSource-библиотек -- это то, что деньги вам будет приносить только небольшой процент пользователей. Поэтому чем больше людей используют вашу библиотеку, тем больше будет тех, кто согласиться вам заплатить.

Соответственно, задача будет состоять в том, чтобы вашей библиотекой пользовалось как можно больше разработчиков. И тут, как несложно предположить, тип лицензии будет влиять очень сильно. Т.к. если есть две более-менее сравнимые между собой библиотеки, но одна под BSD-лицензией, а другая -- под GPL, то библиотека под BSD-лицензией будет иметь большую пользовательскую базу.

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

Так что выбор между copyleft- и пермиссивной лицензией усложняется еще и тем, что в случае copyleft-лицензии у вас может быть всего 2k пользователей, из которых 1k приносит вам деньги. А в случае пермиссивной лицензии у вас может быть 20k пользователей, но деньги приносит всего лишь та же самая тысяча. Но зато даже небольшой баг всплывает на поверхность практически сразу же. И, возможно, уже с готовым исправлением. Но зато и количество надоедливых пользователей, которые хотят всего, сразу и забесплатно, так же будет сильно больше.

Вместо заключения

Если вы решили попробовать зарабатывать на OpenSource библиотеке, то одним из ключевых моментов будет количество пользователей, которые будут использовать вашу библиотеку, т.к. только часть из них будет приносить вам деньги. Соответственно, чем больше пользователей вообще, тем больше тех, кто хоть что-то заплатит.

Тип лицензии для вашей библиотеки будет влиять на количество пользователей самым непосредственным образом. Джентельмены предпочитают блондинок Разработчики предпочитают все-таки пермиссивные лицензии. Соответственно у библиотеки под BSD-лицензией больше шансов собрать вокруг себя большое количество пользователей, чем у библиотеки под GPL-лицензией. С этим нужно считаться. Но, с другой стороны, большое количество пользователей у библиотеки под пермиссивной лицензией вовсе не гарантия достаточных денежных поступлений для окупаемости библиотеки.

Сам я сейчас думаю, что наиболее удачный компромисс -- это двойное лицензирование (т.е. GNU GPL или AGPL + коммерческая лицензия). И, полагаю, если бы мир базировался на принципах здравого смысла, именно такая схема была бы доминирующей. Но мы живем в реальном мире, развивающимся по законам эволюции (т.е. с высокой долей случайных событий и высокой степенью их влияния) и имеем то, что имеем :)

9 комментариев:

Антон Аникин комментирует...

> try way

:)))

eao197 комментирует...

@Антон Аникин

Да, знатная очепятка получилась, спасибо!

Alexander комментирует...

Есть ещё GNU LGPL. Для самой библиотеки лицензия copyleft, то есть её модификации должны быть открытыми. Но использующую её программу открывать не обязательно

XX комментирует...

Это вполне логично, что пермиссивные лицензии доминируют над копилефт. Просто экономическая модель производства такого софта несколько иная, чем у копилефта с двойным лицензированием, она менее соответствует товарному производству. Проблема в том, что вы хотите организовать товарное производство софта (то есть производить для продажи), а пермиссивная лицензия в основном используется в нетоварном "коммунистическом" производстве (когда цель производства - сам продукт, его непосредственное использование, а не товарный обмен).

Вот и весь секрет. Копилефт, как препятствующий образованию частной собственности на производный продукт, сам по себе менее применим в коммерческой разработке и именно поэтому лучше с ней сочетается, если его дополнить собственнической лицензией. Разрешительные же лицензии значительно шире и глубже проникают в товарное производство, но заходят с "заднего крыльца", не через куплю-продажу, а через непосредственное участие потребителя в их производстве (будь то человек или компания).

Вы, как товарный производитель, действующий в условиях рынка, с одной стороны - покупаете, далее - производите, затем - продаете. Какая-то продукция, которая производится "по-коммунистически", максимально "свободно", вам тут может пригодиться непосредственно только на первых двух этапах, чтобы сократить издержки. Но эффективно продавать вы ее не сможете (она же в общественной собственности и может и так использоваться всеми без существенных ограничений).

Поэтому в мире пермиссивных лицензий самая уверенная схема заработка - это четко выделить функции, какие нужны ТОЛЬКО собственническим клиентам, рыночникам, которые будут использовать ваш продукт для заработка, и ТОЧНО не нужны остальным участникам, которые намереваются просто свободно дорабатывать и использовать продукт. Тогда коммерческая версия вашего продукта (чаще всего - она расширенная, иногда и просто другая, производная) сможет эффективно продаваться, тогда как свободная версия, если она полностью удовлетворяет запросам сообщества, будет увеличивать вашу производственную мощь и известность, сокращать издержки.

Этого добиться очень непросто. Хороший пример, как это работает - GitHub. Правда это не о программном продукте, а о сервисе хранения, но суть та же. Вот GitLab, в свою очередь, еще добавляет в эту схему и программный продукт.

eao197 комментирует...

@XX

В ваших рассуждениях есть, по меньшей мере, один непонятный для меня момент:

> а через непосредственное участие потребителя в их производстве (будь то человек или компания).

Про какое непосредственное участие потребителя идет речь? Вот, скажем, некий человек написал и сопровождает libcurl. Это libcurl используется сотнями тысяч "потребителей" по всему миру. Но подавляющее большинство из них вообще ничего не приносит автору libcurl ни в каком виде.

Ну и есть вещи, которые выглядят несколько фантастически:

> Тогда коммерческая версия вашего продукта (чаще всего - она расширенная, иногда и просто другая, производная) сможет эффективно продаваться, тогда как свободная версия, если она полностью удовлетворяет запросам сообщества

Это означает, что должен быть некий базис продукта (библиотека или фреймворк) под пермиссивной лицензией, и плюс к тому должна быть некая закрытая часть продукта, которая и будет продаваться. При этом полезность закрытой части продукта должна заметно превосходить полезность открытой его части.

И тут возникает вопрос: всегда ли это возможно. Вот тот же libcurl. Что можно построить поверх libcurl-а, чтобы это стало продающимся продуктом? Или другой пример: Intel TBB. Что можно простроить поверх Intel TBB, чтобы можно было продавать?

И даже если на эти вопросы найдутся хорошие ответы (что, очевидно, не всегда возможно), то остается более важный момент: если для компании-производителя продукта прибыль приносит закрытая надстройка, то разработка открытого базиса -- это расходная статья, затраты на которую следует минимизировать. Что в пределе ведет к тому, чтобы переложить разработку открытой части на чьи-то чужие плечи, а самим сосредоточиться именно на платной надстройке, которая и дает клиентам наибольшую ценность, а производителю основной доход.

XX комментирует...

@eao197

> Про какое непосредственное участие потребителя идет речь? Вот, скажем, некий человек написал и сопровождает libcurl. Это libcurl используется сотнями тысяч "потребителей" по всему миру. Но подавляющее большинство из них вообще ничего не приносит автору libcurl ни в каком виде.

Ранее вы сами совершенно верно подметили, что существует некая "воронка полезности", в которой ширина горлышка зависит в том числе и от ширины основания. То есть, уже сам факт использования вашей программы множеством других людей делает ее разработку более устойчивой и потенциально ведет к вовлечению в нее большего числа людей. Кроме того, существуют методы, которые позволяют немного "выпрямить скос" и получать проекту больше от обычных пользователей, сильнее вовлекать их в процесс разработки. Даже банальная жалоба на форуме о баге может упростить доработку, если грамотно поставлена работа с этой информацией. То есть, развитие производства такого типа идет к тому, что любой пользователь в пределе не сможет использовать продукт, так или иначе не участвуя в его производстве, даже если он сам этого и не заметит.

> Это означает, что должен быть некий базис продукта (библиотека или фреймворк) под пермиссивной лицензией, и плюс к тому должна быть некая закрытая часть продукта, которая и будет продаваться. При этом полезность закрытой части продукта должна заметно превосходить полезность открытой его части.
И тут возникает вопрос: всегда ли это возможно.

Хороший вопрос. Я думаю, что это возможно всегда, вопрос только в степени использования свободного продукта в составе собственнического. Дело в том, что "закрытую часть продукта" следует мыслить как вообще отдельный продукт. То есть то, что вы продаете - вообще может быть слабо связано с тем, что вы производите свободно. Например, ваши сервера работают под Linux и вы участвуете в его разработке, но продаете вы рекламные места на ваших бесплатных сервисах, которые работают на этих серверах. Какое именно сочетание выбрать и как усилить эту связь - этот вопрос, полагаю, не решается в абстрактном виде. То есть универсальной формулы нет, многое зависит от ситуации на рынке, от возможностей и интересов производителя. Понятно, что в общем случае ваш свободный продукт не может быть тем продуктом, который вы продаете, но вот сокращать дистанцию между ними в стремлении их совместить - вполне хорошая тактика.

> Что можно построить поверх libcurl-а, чтобы это стало продающимся продуктом?

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

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

> Что можно простроить поверх Intel TBB, чтобы можно было продавать?

Тут мне сложно навскидку придумать что-то внятное. Вместо этого я предлагаю взглянуть на проблему с другой стороны: а что должен такого делать ваш клиент, чтобы ему позарез понадобилась Intel TBB? Что-то вроде производства софта с массовыми параллельными вычислениями. Может быть какие-то инструменты или движки в gamedev? Может быть какие-то RTB-системы? ML? В любом случае вам придется самому стать этим клиентом и разрабатывать TBB силами одного своего внутреннего подразделения для нужд другого.

XX комментирует...

@eao197

> если для компании-производителя продукта прибыль приносит закрытая надстройка, то разработка открытого базиса -- это расходная статья, затраты на которую следует минимизировать. Что в пределе ведет к тому, чтобы переложить разработку открытой части на чьи-то чужие плечи, а самим сосредоточиться именно на платной надстройке

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

Если же ваша цель именно развивать свм свободный продукт, но при этом получать еще и деньги, то вам нужно разработать такую схему, где товарно-рыночная часть будет подчинена свободной. А почему бы и нет? Раз возможно обратное. То есть, вы в таком случае не переложите свой свободный проект на плечи других, потому что именно этот проект и будет являться целью вашего предприятия, тогда как коммерческая деятельность - лишь вспомогательной. Юридически это можно выразить в форме некоммерческой организации с нетоварной целью, у которой имеются свои коммерческие подразделения. По типу Mozilla Foundation/Mozilla Corporation.

eao197 комментирует...

@XX

Большое спасибо за комментарии. Но для того, чтобы высказать то, их каких соображений я исхожу, нужно больше места, чем позволяют комментарии. Так что я постараюсь сделать отдельную заметку на эту тему, в которой попробую описать тенденции, которые я наблюдаю (или которые мне кажутся таковыми) и их взаимосвязь с затратами на разработку ПО (как денежными, так и временными, так и ресурсными).

eao197 комментирует...

@XX

Вот https://eao197.blogspot.com/2019/12/softwarethoughts-opensource.html