Совместимость — это «можно ли распространять вместе»
Две лицензии совместимы, если при распространении кода под ними как одной программы можно одновременно соблюсти условия обеих лицензий. Если одна лицензия запрещает условия другой, они несовместимы. Например, GPL требует «не налагать дополнительных ограничений», поэтому код под лицензией с дополнительными условиями, которые GPL не допускает, нельзя включить в программу под GPL.
У совместимости есть направление
Разрешительный код может войти в проект с копилефтом, но не наоборот.
- Код MIT → проект GPL: можно. Если сохранить уведомление MIT, всё объединённое произведение можно распространять под GPL.
- Код GPL → проект MIT: всё объединённое произведение должно следовать условиям GPL, и «проектом MIT» оно остаться не может.
Поэтому таблицы совместимости всегда читают как «какой код → в какой проект».
Типичные сочетания
Apache-2.0 и GPL
FSF считает Apache-2.0 совместимой с GPL-3.0, но несовместимой с GPL-2.0. Положения Apache-2.0 о прекращении патентной лицензии и о возмещении — дополнительные условия, которых нет в GPL-2.0. GPL-3.0 при разработке была устроена так, чтобы решить эту проблему. Поэтому проект GPL-2.0-or-later может использовать код Apache-2.0, если распространять объединённое произведение под GPL-3.0.
MPL-2.0 и лицензии GNU
Раздел 1.12 MPL-2.0 определяет GPL-2.0, LGPL-2.1, AGPL-3.0 и их более поздние версии как «Secondary License», а раздел 3.3 позволяет распространять Larger Work, объединяющее код MPL с таким кодом, под лицензией GNU. Исключение — если первоначальный автор добавил Exhibit B («Incompatible With Secondary Licenses»).
Библиотеки LGPL и закрытые приложения
Библиотеки LGPL можно использовать в закрытых приложениях. Но пользователь должен иметь возможность заменить библиотеку изменённой версией (проще всего — при динамической компоновке), а исходный код и уведомления о лицензии для части библиотеки нужно предоставить. Если же скопировать код LGPL в исходники приложения и смешать, ситуация меняется: объединённое произведение должно следовать условиям LGPL/GPL.
GPL-3.0 и AGPL-3.0
Обе лицензии прямо разрешают объединение в своих разделах 13. В объединённом произведении часть GPL продолжает следовать условиям GPL, а часть AGPL — условиям AGPL, включая обязанность предоставлять исходный код по сети.
EPL-2.0 и GPL
EPL-2.0 по умолчанию несовместима с GPL, но если первоначальный автор указал GPL и т. п. как Secondary License через Exhibit A, объединение становится возможным.
| Заимствуемый код | Закрытое приложение | Проект MIT | GPL-2.0-only | GPL-3.0 |
|---|---|---|---|---|
| MIT·BSD·ISC | Можно (уведомление) | Можно | Можно | Можно |
| Apache-2.0 | Можно (уведомление · NOTICE) | Можно | Нельзя | Можно |
| MPL-2.0 | С условиями (раскрыть файлы) | С условиями | С условиями (Secondary) | С условиями (Secondary) |
| LGPL-3.0 | С условиями (компоновка) | С условиями (компоновка) | Нельзя | Можно |
| GPL-3.0 | Нельзя | Нельзя | Нельзя | Можно |
Где заканчивается «объединение»
Вопрос совместимости возникает, когда код объединяется в одну программу. FSF считает одной программой части, скомпонованные в один исполняемый файл или разделяющие сложные внутренние структуры данных, а обычное взаимодействие отдельных программ через каналы, сокеты и аргументы командной строки, как правило, — «совокупностью» (aggregate) отдельных программ. Однако эта граница не закреплена судебной практикой, и толкования расходятся. Само по себе размещение нескольких программ в одном дистрибутиве объединением не является.
Порядок действий на практике
- Составьте список зависимостей (функция отчёта о лицензиях менеджера пакетов или инструменты SBOM).
- Запишите лицензию каждой зависимости идентификатором SPDX.
- Предварительно проверьте сочетание с лицензией своего проекта в проверке совместимости.
- Для сочетаний «с условиями» сверьте условия (уведомление, способ компоновки, наличие Secondary License) с текстом лицензии.
- Если есть недопустимые сочетания, замените зависимость, разделите программу или скорректируйте свою лицензию.
Эта статья содержит общую информацию и не является юридической консультацией. Важные решения обсуждайте со специалистами.
Источники
- FAQ по лицензиям GNU (матрица совместимости, MereAggregation) — https://www.gnu.org/licenses/gpl-faq.html
- FSF, Various Licenses and Comments about Them — https://www.gnu.org/licenses/license-list.html
- Apache Software Foundation, GPL Compatibility — https://www.apache.org/licenses/GPL-compatibility.html
- Mozilla, MPL 2.0 FAQ — https://www.mozilla.org/en-US/MPL/2.0/FAQ/
- Eclipse Foundation, EPL 2.0 FAQ — https://www.eclipse.org/legal/epl-2.0/faq/