2014-05-17

О лицензиях

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



Что вообще можно сделать с ПО и причем тут лицензии? По Ричарду Столлману делать мы можем вот что:
  • Запускать программу. Применительно к библиотеке, пожалуй, прилинковывать её к своему проекту. Ни одна лицензия ничего тут не запрещает, ибо именно для этого ПО и приобретается.
  • Модифицировать программу для своих нужд. Только для своих, тут не идет речь о распространении. Понятное дело, тут лучше бы иметь исходники.
  • Распространять копии программы. Оригинальные копии в том виде, в каком мы их получили.
  • Распространять и публиковать изменения и улучшательства, которые мы внесли в программу. На пользу сообщества. С предоставлением исходников.
Лицензия — это ваше (как пользователя) соглашение с автором (или распространителем) программы, где как раз и описывается, что вам можно делать, а чего нельзя.


ПО бывает проприетарным. Т.е. достается вам за деньги и под какой-то специфической лицензией. Часто эту лицензию называют EULA, потому что вы — конечный пользователь ПО. Соответственно, со всякими поставщиками (OEM) и продавцами заключается другое соглашение.

Проприетарное ПО часто поставляется только в бинарном виде, без исходников. (А если исходники есть, то лишь на правах «только на посмотреть»). И дает вам право только попользоваться ПО. Явно запрещается модификация даже под ваши нужды (в том числе декомпиляция и реверс инжиниринг). Явно запрещается распространение копий (как же, вы за эту копию деньги заплатили, пусть другие, кому надо, тоже заплатят, за свою копию). Ну и понятно, даже если вы что-то поменяли в ПО, вы не будете это распространять, ибо нечего палиться в том, что нарушили лицензию.

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


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


Более формальными, но почти такими же свободными являются лицензии «семейства BSD». Это BSD, MIT, Apache License и множество других. Вы можете пользоваться ПО под этими лицензиями, получать исходники, модифицировать, сколько душе угодно, распространять как оригинальную версию, так и модифицированную вами (при этом распространять можно под другой лицензией). Все можно. Только укажите имя оригинального автора и оригинальную лицензию (т.е. на каких условиях вы получили это ПО). Собственно, эти лицензии и возникли как жест доброй воли таких организаций, как Беркли, Масcачусетский Технологический или Apache Software Foundation.

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


ПО под свободными либеральными лицензиями, перечисленными выше, может быть «украдено». Можно взять удачный проект, переделать его под себя и начать продавать за бешенные деньги. Ни первоначальным авторам (в виде денег), ни сообществу (в виде исходников внесенных изменений) ничего не достанется. Например, широко распространенная проприетарная Mac OS X выросла из ядра Mach — ответвления BSD. И теперь коммерческий успех одной яблочной компании во многом основан на трудах нескольких университетов.

Чтобы бороться с любителями все закрыть и запроприетарить их же собственным оружием — законодательством об авторском праве, Ричардом Столлманом была создана лицензия GPL. Так как юридическая суть лицензии основана на авторском праве (copyright), но цель лицензии — совсем наоборот, не закрыть, а гарантировать открытость, её называют copyleft (левое право, отличная игра слов). Еще эту лицензию называют вирусной, потому что соприкасаясь (будучи прилинкованной) с другим софтом, она обязывает, чтобы этот другой софт тоже был под GPL.


Вирусность GPL различается для разных её версий. Под LGPL (Lesser GPL) выпускают библиотеки, чтобы их можно было использовать в проприетарном ПО. Вирусность тут ниже. Под AGPL (Affero GPL, Affero — это название компании, которая первой применила такую модификацию лицензии) выпускают серверное ПО, и все правила лицензии распространяются не только на прямых пользователей серверов (админов и программистов), но и на сетевых (конечных) пользователей этого сервиса. Вирусность тут выше.

Если вы пишете проприетарное ПО, то GPL библиотеки могут доставить хлопот. Собственно, GPL библиотека требует, чтобы все ваше ПО было тоже под GPL. А вот с LGPL дело иметь можно. Вам нужно распространять библиотеку тоже под LGPL, пусть и в составе вашего проприетарного продукта. А вот если вы внесли изменения в LGPL библиотеку, то вам придется опубликовать эти изменения тоже под LGPL, как полагается, предоставляя исходные тексты без дополнительной платы.

Если вы пишете свободный проект, то вам придется заморочиться совместимостью (свободных) лицензий. В GPL проекте вы точно не сможете использовать проприетарные библиотеки (даже если они бесплатные). (Я, например, так обломался с Flurry в своем GPL проекте под Android). Зато можно использовать GPL и LGPL библиотеки, а также библиотеки из списка совместимых лицензий.

Свобода ПО не связана с деньгами (эта путаница происходит из английского, где free — это и свободный, и бесплатный). Можно бесплатно распространять проприетарное ПО (то самое freeware, которым полны сейчас магазины мобильных приложений). А можно делать деньги на продаже GPL софта (и поддержке). Под свободой ПО подразумевается свобода создания и распространения идей и их реализаций, а не свобода получения денег.

Еще очень очень любят путать и подменять понятия свободного (free) и открытого (open, open source) ПО. Свободное ПО — это такое ПО, которое предоставляет вам все те свободы, упомянутые в начале статьи. Пользуйтесь, модифицируйте и распространяйте. А открытые исходники — это нечто другое. Без открытых исходников, конечно, не получится свободы. Но можно ведь открыть исходники, а свободы (их использовать) не дать, как и поступают некоторые корпорации.


Хоть GPL и использует юридические механизмы авторского права для своей вирусности, тем не менее, авторское право существует отдельно от лицензионных соглашений с пользователем. Авторское право всегда остается за автором. Автор имеет полное право перелицензировать свою работу, отдать другим пользователям под другими условиями. Свободные лицензии лишь приглашают вас тоже стать автором, пусть и маленького кусочка кода. Часто компании, живущие за счет свободного софта, заключают дополнительные соглашения с вновь прибывшими авторами о передаче авторских прав на код этим самым компаниям. Просто им так удобнее, компания остается единоличным автором продукта. В истинно свободных проектах, вроде Linux, наоборот, кроме GPL никаких других юридических соглашений с авторами нет. В результате авторами являются тысячи людей, и сменить лицензию становится физически невозможным.

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


Патенты тоже ортогональны лицензиям. В проприетарном мире бывает так, что вы покупаете за десяток баксов библиотеку, реализующую какой-нибудь патентованный кодек. Можете с ней поиграть/поэкспериментировать. Но вот для выхода на продакшен, распространения этой библиотеки вашим пользователям, вам нужно заплатить патентодержателю. Уже несколько килобаксов. В свободном же ПО патенты, как правило, не встречаются. Хоть лицензия и разрешает свободное распространение, это самое распространение может быть сильно ограничено патентами, чего и стараются избежать. Корпорации добра, бывает, делают жесты доброй воли, выпуская свободные кодеки и беря патентное бремя на себя.

Торговые марки, они как патенты, тоже к лицензиям малоотносительны. Например, один популярный браузер распространяется под либеральной лицензией MPL. Но вот название Mozilla™ Firefox™, а также лого с лисичкой — торговые марки Mozilla Foundation. В результате, скажем, в Debian вы не найдете Firefox, но увидите Iceweasel (не огненная лиса, зато ледяная ласка) — то же самое, но под другим названием и логотипом. Кстати, Linux™ и пингвин Tux™ принадлежат лично Линусу Торвальдсу.

Ну и напоследок помните, что почти все софтверные лицензии содержат фразу типа: «это ПО поставляется как есть, без каких либо гарантий». Т.е. если кофеварка под Linux вдруг обольет вас горячим кофе, программисты будут ни при чем, они уже отмазались. Исключением, пожалуй, является Rocket Science и софт для атомных станций, но там, наверное, совсем другие лицензии.


З.Ы. В следующий раз надо рассказать про Creative Commons.