Для ясности не говорите, пожалуйста, “лицензировано по GNU GPL 2”!
Ричард СтолменКогда я в 1989 году писал Стандартную общественную лицензию GNU (GNU GPL), я сознавал, что могут потребоваться изменения: у ФСПО могут когда-нибудь появиться причины опубликовать новую версию. Так что я назвал ее “версией 1” и установил схему, по которой пользователи могут обновлять программы до более поздних версий лицензии.
Общепринятых способов обновлять свободную лицензию не было; насколько я знаю, до этого такого никто не делал. Разработчики выпускали новую версию программы под другой лицензией, а может быть, они делали новые выпуски старых версий под другой лицензией, но они никогда не устанавливали способа систематически предлагать пользователям выбор будущей версии лицензии для уже выпущенных версий программ.
Я не знал, как разработчики отнесутся к этому новшеству, так что я решил оставить на выбор каждому разработчику, разрешать ли будущие версии. Это значило, что разработчики могли выпускать программы по лицензии GNU GPL только версии 1 или выпускать по GPL версии 1 или любой более поздней версии. Разработчики указывали свой выбор с помощью лицензионного уведомления, которое находится в начале каждого файла исходного текста. Там-то, согласно GPL, и высказывается это решение.
Фонд свободного программного обеспечения призывал разработчиков выбирать или любую более позднюю версию, поскольку это означало, что пользователи будут вольны пользоваться этой программой по GNU GPL версии 1, или по версии 2 (после того как появится версия 2), или по версии 3 (после того как появится версия 3). И они будут вольны пользоваться ею по версии 4, если мы когда-нибудь выпустим версию 4.
С тех пор ФСПО выпустил в 1991 году версию 2 GNU GPL, а в 2007 году — версию 3. В каждой версии разработчикам предлагается выбор настаивать только на этой версии лицензии или допускать пользование на условиях будущих версий лицензии. (GPL 3 допускает также возможность “посредника”, когда на указанной странице в Интернете могут последовательно выдаваться разрешения пользоваться каждой конкретной будущей версией.)
Публиковать программы с разрешением обновлять лицензии жизненно важно, чтобы избежать несовместимости между программами, выпущенными под разными версиями GPL.
Две разные лицензии с авторским левом почти неизбежно несовместимы в отсутствие какого-то явного механизма совместимости. Дело в том, что каждая из них требует, чтобы измененные версии программы выпускались под той же самой лицензией. Как следствие, программы, выпущенные под GPL только версии 2, нельзя объединять с программами, выпущенными под GPL только версии 3.
Механизм совместимости между версиями GPL состоит в том, чтобы выпускать программу под “версией N или любой более поздней версией”. Программу, выпущенную под GPL-2.0-или-более-поздней, можно объединять с программой, выпущенной под GPL-3.0-или-более-поздней, потому что “3 или более поздняя” является подмножеством “2 или более поздней”.
Некоторые разработчики говорят: “Я выпущу пока под GNU GPL только версии 3. Когда я увижу GPL версии 4, если она мне понравится, я перелицензирую свою программу, разрешив пользование по версии 4”. Все будет отлично, если вы единственный автор, при условии, что вы к тому времени еще будете живы, здоровы, с вами можно будет связаться и вы сможете уделить этому внимание. Но авторское право в наше время длится до безобразия долго; если не будет коренных реформ, то авторское право на ваши программы будет длится 70 лет после вашей смерти в США и 100 лет в Мексике. Вы завещали своим наследникам рассмотреть вопрос перелицензирования ваших программ на GPL версии 4 на случай, если вы не сможете рассмотреть это сами?
Но неприятности начнутся уже при вашей жизни. Что, если мы через десять лет выпустим GNU GPL версии 4, а к тому времени 50 других добавят что-то к вашей программе, выпуская свои добавленные тексты под GPL-только-3.0 просто потому, что так сделали вы? Вы могли бы одобрить GPL 4 для программы, которую вы первоначально выпустили, но к тому времени было бы не так-то просто связаться с теми 50 последующими разработчиками и получить их разрешение применять GPL 4 для их дополнений.
Избежать этих проблем можно, одобрив будущие версии GPL в лицензионном уведомлении с самого начала. Размещайте, пожалуйста, в каждом нетривиальном файле выпуска исходного текста лицензионное уведомление в виде, показанном в конце той версии GPL, которую вы применяете.
Поскольку мы управляем лицензионной совместимостью таким способом, то когда люди вам говорят, что программа выпускается “под GNU GPL версии 2”, они оставляют неясность в лицензировании программы. Выпускается ли она под GPL-только-2.0 или GPL-2.0-или-более-поздней? Можно ли объединять программу с пакетами, выпущенными под GPL-3.0-или-более-поздней?
Когда такие сайты, как GitHub, приглашают разработчиков выбрать среди прочих возможных лицензий “GPL 3” или “GPL 2” и не поднимают вопрос о будущих версиях, это приводит к тому, что тысячи разработчиков оставляют неясность в лицензировании своих программ. Если бы их просили выбирать между “только” и “или более поздней”, они лицензировали бы свои программы ясно. Это был бы также повод объяснить, что второй вариант позволит избежать несовместимости в будущем.
Сокращенные индикаторы лицензий, такие как “GPL-2.0” или “GPL-3.0”, тоже будут приводить к путанице. Люди и организации, которые не видят разницы между “только 2” и “2 или более поздней”, зачастую будут писать “GPL-2.0” в обоих случаях, не осознавая, что нужно проводить различие.
Таким образом, когда вы пользуетесь индикаторами лицензий SPDX, пользуйтесь вот этими:
- GPL-2.0-only или GPL-2.0-or-later
- GPL-3.0-only или GPL-3.0-or-later
- LGPL-2.0-only или LGPL-2.0-or-later
- LGPL-2.1-only или LGPL-2.1-or-later
- LGPL-3.0-only или LGPL-3.0-or-later
- AGPL-3.0-only или AGPL-3.0-or-later
- GFDL-1.3-only или GFDL-1.3-or-later
Пожалуйста, не пользуйтесь старыми неоднозначными индикаторами лицензий, которые будут выводиться из употребления:
- GPL-2.0
- GPL-3.0
- LGPL-2.0
- LGPL-2.1
- LGPL-3.0
- AGPL-3.0
- GFDL-1.3.
В 1989 году дать разработчикам выбор между GPL версии “только 1” и GPL версии “1 или более поздней” представлялось необходимым, но это привело к сложности, которой было бы лучше избежать. Между тем получили широкое распространение несколько лицензий, которые дают пользователям безусловную возможность обновления до более поздних версий лицензии. В их число входят Общественная лицензия Mozilla и Общественная лицензия Eclipse. В каждой лицензии сказано, что пользователь волен применять работу под более поздними версиями той же самой лицензии, если таковые имеются. Лицензия Creative Commons с авторским левом, CC BY-SA, разрешает пользователям повышать версию лицензии, когда они изменяют произведение.
Возможно, нам следует перейти на этот подход в будущих версиях GNU GPL. Но об этом нужно подумать в будущем.
Мы благодарим SPDX за решение заменить краткие идентификаторы семейства лицензий GNU, чтобы сделать выбор между “или более поздней” и “только” явным. В следующей версии Списка лицензий SPDX будут применяться идентификаторы, рекомендованные выше. Неясные идентификаторы, такие как “GPL-2.0”, будут выводиться из употребления. Мы призываем как можно скорее заменить их на новые однозначные идентификаторы.
Применяя идентификаторы, явно говорящие только или любой более поздней версии, мы можем осведомлять сообщество о различии между ними, а также поощрять разработчиков ясно выражать свои решения.