05 марта 2026 № 1 (2026)

ROSARIUM

газета советского программиста

Основные лицензии

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 — строго версия 2
  • GPL-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Патентные права
MITPermissiveДаНетНет
BSD-3-ClausePermissiveДаНетНет
Apache-2.0PermissiveДаНетДа
GPL-2.0CopyleftДаСильныйНет
GPL-3.0CopyleftДаСильныйДа
LGPL-2.1CopyleftДаСлабыйНет
MPL-2.0CopyleftДаФайловыйДа

Совместимость лицензий

При 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-синтаксиса — в следующем разделе.

Проверьте понимание

  1. Чем permissive-лицензия отличается от copyleft?
  2. Можно ли смешивать MIT-код и GPL-код в одном пакете?
  3. Чем LGPL отличается от GPL для целей линковки?
  4. Что означает -or-later в GPL-3.0-or-later?

Далее: SPDX и указание в SPEC