Та самая фраза
В рекомендуемом уведомлении лицензий GNU есть следующая фраза.
either version 3 of the License, or (at your option) any later version.
Если она есть, получатель может выбрать и соблюдать условия указанной версии или любой версии, которую FSF опубликует позже. Это «or later» (SPDX GPL-3.0-or-later). Если убрать часть «or later» и указать только конкретную версию, получится «only» (GPL-3.0-only).
Эту конструкцию задают раздел 14 GPL-3.0 и раздел 9 GPL-2.0. В частности, раздел 9 GPL-2.0 устанавливает, что для программы, где номер версии вообще не указан, можно выбрать любую версию, опубликованную FSF. Поэтому если положить только файл LICENSE и не указать условие о версии, лицензию могут истолковать не так, как вы задумывали.
Зачем нужен «or later»
FSF рекомендует «or later». Причина — будущая совместимость. Когда из-за изменений в праве и технологиях выходит новая GPL, код «or later» естественным образом объединяется с новой версией. На практике код GPL-2.0-or-later можно было без изменений включать в проекты GPL-3.0, а код GPL-2.0-only — нельзя.
Раздел 14 GPL-3.0 идёт ещё дальше и позволяет назначить «доверенное лицо» (proxy): если назначенный правообладателем человек публично решит принять более позднюю версию, это решение имеет силу.
Зачем выбирают «only»
«Or later» — это также заранее данное согласие на ещё не написанную лицензию. Если FSF позже выпустит версию с условиями, расходящимися с вашими намерениями, получатель сможет выбрать её для использования вашего кода.
Самый известный пример — ядро Linux. Ядро распространяется под GPL-2.0-only. Линус Торвальдс публично выступал против положения GPL-3.0 о сведениях для установки (так называемой защиты от тивоизации), а в ядре смешаны авторские права тысяч участников, так что сменить лицензию практически невозможно.
Влияние на совместимость
Матрицу совместимости из FAQ по лицензиям GNU можно кратко свести к следующему.
| Заимствуемый код → мой проект | GPL-2.0-only | GPL-2.0-or-later | GPL-3.0 |
|---|---|---|---|
| GPL-2.0-only | Можно | Можно (объединение — 2.0-only) | Нельзя |
| GPL-2.0-or-later | Можно | Можно | Можно |
| GPL-3.0 | Нельзя | Можно (объединение — 3.0) | Можно |
| LGPL-3.0 | Нельзя | Можно (объединение — 3.0) | Можно |
Главное: GPL-2.0-only и GPL-3.0 не могут принять друг друга. Обе требуют «не налагать дополнительных ограничений», а дополнительные условия другой стороны (в 3.0 — положения о патентах, сведениях для установки и т. д.) с точки зрения каждой являются дополнительными ограничениями. Другие сочетания можно проверить в проверке совместимости.
Критерии выбора
- Следуйте экосистеме: код для ядра Linux должен быть под GPL-2.0-only (или совместимой GPL-2.0-or-later либо разрешительной лицензией).
- Важна будущая совместимость: если велика вероятность обмена кодом с разными проектами GPL, гибче or-later.
- Важен контроль: если не хотите доверять будущие решения FSF, используйте only или назначьте лицо, принимающее решения, через proxy раздела 14 GPL-3.0.
Как указывать
- В
LICENSE(илиCOPYING) помещают текст соответствующей версии без изменений. Сам текст лицензии не различает only и or-later. - Условие о версии указывают в уведомлении каждого файла и в идентификаторе SPDX. Если на вкладке генератора «Заголовок файла» выбрать «only» или «or-later», будут созданы и официальное уведомление GNU, и строка SPDX.
- Отметьте это одной строкой и в README (например, «Licensed under GPL-3.0-or-later»).
Эта статья содержит общую информацию и не является юридической консультацией. Важные решения обсуждайте со специалистами.
Источники
- FAQ по лицензиям GNU, VersionThreeOrLater · AllCompatibility — https://www.gnu.org/licenses/gpl-faq.html
- GNU, How to Use GNU Licenses for Your Own Software — https://www.gnu.org/licenses/gpl-howto.html
- Правила лицензирования ядра Linux — https://www.kernel.org/doc/html/latest/process/license-rules.html
- SPDX License List — https://spdx.org/licenses/