Выражения лицензий SPDX

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

Обзор

SPDX (Software Package Data Exchange) — это стандартный формат для передачи информации о компонентах и метаданных, связанных с программными пакетами. Три аспекта SPDX, наиболее актуальные для Fedora:

  • Список лицензий SPDX: ориентируясь на часто встречающиеся лицензии и исключения, используемые в свободном/открытом или коллаборативном программном обеспечении, данных и документации, этот список содержит стандартизированные короткие идентификаторы для ссылок на лицензии и исключения.

  • Грамматика выражений лицензий SPDX.

  • Рекомендации по сопоставлению SPDX: несколько реальных текстов лицензий будут «соответствовать» данному идентификатору лицензии или исключения из списка лицензий SPDX в соответствии с этими рекомендациями.

Fedora использует выражения лицензий SPDX в первую очередь для двух различных, хотя и связанных целей:

  • Для классификации и организации данных, относящихся к разрешённым и неразрешённым лицензиям, которые поддерживаются в репозитории Fedora License Data и списках лицензий Fedora, генерируемых из него.

  • Для заполнения тегов License в spec-файлах.

Типы выражений лицензий SPDX

Идентификаторы из списка лицензий SPDX

Обычно называемые «идентификаторами SPDX», это короткие идентификаторы, содержащиеся в списке лицензий SPDX. Примеры: MIT, GPL-2.0-or-later.

Пользовательские идентификаторы лицензий (LicenseRef-)

Пользовательский идентификатор лицензии (то есть не содержащийся в списке лицензий SPDX) может быть сформирован с использованием префикса LicenseRef-. В настоящее время в Fedora License Data все идентификаторы LicenseRef- определены специально Fedora (то есть не используются идентификаторы LicenseRef- из других проектов или организаций). Обратите внимание, что в SPDX в настоящее время нет официальной системы пространств имён для идентификаторов LicenseRef-.

Большинство идентификаторов LicenseRef- в Fedora представляют неразрешённые лицензии. Примеры: LicenseRef-sun-rpc, LicenseRef-OpenMotif. Однако некоторые представляют разрешённые лицензии. Примеры включают зонтичные идентификаторы LicenseRef-Fedora-Public-Domain и LicenseRef-Fedora-UltraPermissive.

Выражения WITH

Составное выражение SPDX может быть сформировано путём добавления к идентификатору SPDX оператора WITH, за которым следует идентификатор исключения, содержащийся в списке исключений SPDX. Это предназначено для обозначения дополнения лицензионного разрешения разрешающим исключением или дополнительным разрешением, что чаще всего встречается с лицензиями семейства GPL. Некоторые примеры: GPL-2.0-or-later WITH Autoconf-exception-generic, Apache-2.0 WITH LLVM-exception.

Теоретически WITH также может следовать за идентификатором LicenseRef-, но примеров этого в Fedora License Data нет. (Существует один необычный LicenseRef-, который включает WITH в идентификатор: LicenseRef-GPL-2.0-or-later-WITH-UPX.) SPDX 3.0 добавил конструкцию AdditionRef- в грамматику выражений SPDX, которая допускает пользовательские идентификаторы, которые могут следовать за WITH. Выражения WITH AdditionRef- могут использоваться для дополнительных условий всех типов, а не только для разрешающих исключений.

Выражения OR

Составное выражение SPDX может быть сформировано путём объединения двух выражений SPDX оператором OR. Это предназначено для обозначения выбора лицензий. В FOSS выбор ровно двух лицензий часто называется «двойным лицензированием», хотя этот термин иногда используется для обозначения разных понятий. Примеры: Apache-2.0 OR MIT (распространённая форма лицензирования ящиков Rust), MPL-1.1 OR GPL-2.0-or-later OR LGPL-2.1-or-later (исторически известная как тройная лицензия Mozilla).

Выражения AND

Составное выражение SPDX может быть сформировано путём объединения двух выражений SPDX оператором AND. Обычно это означает, что оба подвыражения применяются к разным частям файла или пакета. Пример: LGPL-2.1-or-later AND GPL-2.0-or-later AND MIT

Оператор +

Постфиксный оператор `, применённый к идентификатору SPDX, обозначает разрешение использовать более поздние версии лицензии. Пример: `LPPL-1.3a. Использование + не распространено в Fedora License Data.

По запросу Фонда свободного программного обеспечения использование + с идентификаторами лицензий семейства GPL было объявлено устаревшим в SPDX в пользу использования вариантов идентификаторов -only и -or-later (например, GPL-2.0-only и GPL-2.0-or-later).

Выражения лицензий SPDX в Fedora License Data

Каждый элемент в списках разрешённых и неразрешённых лицензий Fedora — это выражение лицензии SPDX, связанное с конкретным файлом TOML в каталоге data/ репозитория Fedora License Data. Каждый файл TOML имеет ключ expression, значение которого представляет собой строку, содержащую выражение лицензии SPDX. Это выражение SPDX образует базовое имя файла TOML, за исключением того, что внутренние пробелы представлены символом подчёркивания. Например, файл MIT.toml содержит expression = "MIT", а файл GPL-2.0-only_WITH_Linux-syscall-note.toml содержит expression = "GPL-2.0-only WITH Linux-syscall-note".

Выражения AND и, за одним исключением, выражения OR не подходят для Fedora License Data. (Они могут и обычно появляются в тегах License в spec-файлах.)

Исключение составляют определённые выражения OR, представляющие двойную лицензию, состоящую из лицензии семейства GPL и лицензии Perl 5 Artistic 1.0 (~ Artistic-1.0-Perl). В настоящее время два из них включены в Fedora License Data: GPL-1.0-or-later OR Artistic-1.0-Perl и GPL-2.0-or-later OR Artistic-1.0-Perl.

Это исключение предназначено для облегчения использования этих выражений OR в тегах License spec-файлов для пакетов Perl — предпочтение сопровождающих пакетов Perl в Fedora и сопровождающих модулей Perl в вышестоящем проекте, несмотря на то, что Artistic-1.0-Perl является неразрешённой. Обычное правило в Fedora состоит в том, что если лицензионное разрешение представимо выражением OR, которое включает разрешённую лицензию и лицензию, которая не разрешена, в тег License spec-файла следует включать только разрешённую лицензию.

Рекомендации по сопоставлению SPDX

Идентификаторы из списка лицензий SPDX представляют собой шаблоны (указанные в файлах XML, поддерживаемых в репозитории license-list-XML). Многие файлы XML используют регулярные выражения и обозначают части текста лицензии как необязательные. Несколько реальных текстов лицензий могут соответствовать идентификатору SPDX в смысле, подробно определённом в рекомендациях по сопоставлению, содержащихся в спецификации SPDX. Не все рекомендации по сопоставлению реализованы в файлах XML.

Используя идентификаторы SPDX и идентификаторы LicenseRef-, Fedora стремится применять рекомендации по сопоставлению SPDX в той мере, в какой они значимы или применимы к контексту Fedora.

Выражения лицензий SPDX в тегах License

Отдельная страница содержит подробное обсуждение использования выражений SPDX в тегах License spec-файлов.