Основные лицензии
MIT, BSD, Apache, GPL, LGPL, MPL — что разрешают и требуют.
На этой странице
Мейнтейнеру не нужно быть юристом, но нужно понимать основные семейства лицензий. Это позволит правильно указать License: в SPEC и убедиться, что пакет можно распространять.
Две категории лицензий
Permissive (разрешительные)
Позволяют делать с кодом почти всё, включая использование в проприетарных проектах. Требуют только сохранение уведомления об авторстве.
Copyleft (копилефт)
Требуют, чтобы производные работы распространялись под той же (или совместимой) лицензией. «Свобода, которая защищает свободу».
Основные лицензии
MIT
SPDX: MIT
- Тип: Permissive
- Разрешает: всё, включая коммерческое использование
- Требует: сохранение уведомления об авторстве и лицензии
- Примеры: jQuery, Node.js, Rails, .NET
Самая простая и популярная лицензия. Проблем с распространением практически не бывает.
BSD-2-Clause / BSD-3-Clause
SPDX: BSD-2-Clause
SPDX: BSD-3-Clause
- Тип: Permissive
- Разрешает: всё, включая коммерческое использование
- Требует: сохранение уведомления об авторстве
- BSD-3 дополнительно: запрет использования имени авторов для продвижения
- Примеры: FreeBSD, Nginx
Похожа на MIT, но с чуть более строгими условиями.
Apache-2.0
SPDX: Apache-2.0
- Тип: Permissive
- Разрешает: всё, включая коммерческое использование
- Требует: сохранение уведомления, указание изменений
- Дополнительно: явная выдача патентных прав
- Примеры: Kubernetes, Android, TensorFlow
Важное отличие от MIT — Apache-2.0 содержит явное патентное разрешение.
GPL-2.0 / GPL-3.0
SPDX: GPL-2.0-only
SPDX: GPL-2.0-or-later
SPDX: GPL-3.0-only
SPDX: GPL-3.0-or-later
- Тип: Copyleft (сильный)
- Разрешает: использование, модификацию, распространение
- Требует: исходный код производных работ должен быть доступен под GPL
- Примеры: Linux kernel (GPL-2.0-only), GCC (GPL-3.0-or-later), GIMP
Для пакетирования GPL не создаёт проблем — вы распространяете Open Source. Проблемы возникают при смешивании GPL с несовместимыми лицензиями.
-only vs -or-later:
GPL-2.0-only— строго версия 2GPL-2.0-or-later— версия 2 или любая более поздняя (в исходниках: «version 2 of the License, or (at your option) any later version»)
LGPL-2.1 / LGPL-3.0
SPDX: LGPL-2.1-only
SPDX: LGPL-2.1-or-later
SPDX: LGPL-3.0-only
SPDX: LGPL-3.0-or-later
- Тип: Copyleft (слабый)
- Отличие от GPL: разрешает линковку проприетарного кода с LGPL-библиотекой без «заражения»
- Примеры: glibc, GTK, Qt (частично)
Для пакетирования: если ваш пакет линкуется с LGPL-библиотекой, это не влияет на лицензию вашего пакета.
MPL-2.0
SPDX: MPL-2.0
- Тип: Copyleft (файловый)
- Особенность: copyleft применяется к отдельным файлам, а не ко всему проекту
- Примеры: Firefox, Thunderbird, LibreOffice
MPL-2.0 совместима с GPL-2.0+ и Apache-2.0.
Сводная таблица
| Лицензия | Тип | Коммерческое использование | Copyleft | Патентные права |
|---|---|---|---|---|
| MIT | Permissive | Да | Нет | Нет |
| BSD-3-Clause | Permissive | Да | Нет | Нет |
| Apache-2.0 | Permissive | Да | Нет | Да |
| GPL-2.0 | Copyleft | Да | Сильный | Нет |
| GPL-3.0 | Copyleft | Да | Сильный | Да |
| LGPL-2.1 | Copyleft | Да | Слабый | Нет |
| MPL-2.0 | Copyleft | Да | Файловый | Да |
Совместимость лицензий
При bundling или статической линковке лицензии должны быть совместимы:
MIT + GPL-3.0 = GPL-3.0 ✓ (MIT совместима с GPL)
Apache-2.0 + GPL-3.0 = GPL-3.0 ✓ (Apache-2.0 совместима с GPL-3.0)
Apache-2.0 + GPL-2.0-only = ??? ✗ (Apache-2.0 НЕ совместима с GPL-2.0-only)
GPL-2.0-only + GPL-3.0-only = ??? ✗ (несовместимы)
Правило: permissive + copyleft = copyleft (более строгая «побеждает»).
Что указывать в SPEC
# Простой случай
License: MIT
# Два компонента под разными лицензиями (оба присутствуют)
License: MIT AND BSD-3-Clause
# Код под двойной лицензией (пользователь выбирает)
License: MIT OR Apache-2.0
# GPL с исключением
License: GPL-2.0-or-later WITH GCC-exception-3.1
# Сложный случай
License: (MIT OR Apache-2.0) AND GPL-3.0-or-later AND BSD-2-Clause
Подробности SPDX-синтаксиса — в следующем разделе.
Проверьте понимание
- Чем permissive-лицензия отличается от copyleft?
- Можно ли смешивать MIT-код и GPL-код в одном пакете?
- Чем LGPL отличается от GPL для целей линковки?
- Что означает
-or-laterвGPL-3.0-or-later?
Далее: SPDX и указание в SPEC