Руководства · 04

Двойное (множественное) лицензирование

Два типа двойного лицензирования (несколько лицензий на один и тот же код), смысл выражений SPDX OR, AND и WITH, зачем нужен CLA и на что обратить внимание.

Последняя проверка: 2026-09-23

Зачем давать одному коду несколько лицензий

Правообладатель может одновременно разрешить использование одного и того же кода на нескольких условиях. Получатель выбирает одну из них и соблюдает её условия. Цели у этого в основном две.

  1. Расширить совместимость — чтобы код подходил к разным экосистемам.
  2. Бизнес-модель — публиковать код как открытый и при этом продавать отдельные коммерческие лицензии.

Тип 1: две разрешительные лицензии вместе — MIT OR Apache-2.0

Так делают язык Rust и большинство крейтов Rust. Пользователь выбирает удобную: MIT или Apache-2.0.

Получаются оба преимущества сразу, поэтому модель популярна у авторов библиотек. В репозитории по традиции кладут два файла: LICENSE-MIT и LICENSE-APACHE.

Тип 2: копилефт + коммерческая — «GPL или платите»

Код публикуется под GPL или AGPL, а компаниям, которые не хотят брать на себя обязанность раскрытия исходников, продаётся коммерческая лицензия по отдельному договору. Типичные примеры — MySQL (GPL + коммерческая лицензия Oracle) и Qt (LGPL-3.0/GPL + коммерческая).

Эта модель работает, только если правообладателю принадлежат права на весь код. На код, который внешние участники внесли только под GPL, у правообладателя нет права продавать коммерческую лицензию.

CLA и DCO

Запись выражениями SPDX

Отношения между несколькими лицензиями записываются выражениями лицензий SPDX.

ВыражениеСмыслПример
A OR BВыбрать и соблюдать одну из двух (двойная на выбор)MIT OR Apache-2.0
A AND BСоблюдать обе (смешаны разные части)MIT AND BSD-3-Clause
A WITH исключениеДобавить к лицензии исключениеGPL-2.0-only WITH Linux-syscall-note
СкобкиЗадать порядок объединения(MIT OR Apache-2.0) AND Unicode-3.0

Если перепутать OR и AND, смысл станет противоположным. Если пользователь может выбирать — OR, если нужно соблюдать всё — AND.

На что обратить внимание

Пример применения

Чтобы применить двойное лицензирование в стиле Rust, скачайте в генераторе файлы MIT и Apache-2.0, сохраните их как LICENSE-MIT и LICENSE-APACHE и укажите в метаданных license = "MIT OR Apache-2.0". В заголовке каждого файла пишите SPDX-License-Identifier: MIT OR Apache-2.0.

Эта статья содержит общую информацию и не является юридической консультацией. Важные решения обсуждайте со специалистами.

Источники