SPDX-идентификатор¶
SPDX-идентификатор — это уникальная буквенно-цифровая строка, присваиваемая каждой лицензии на программное обеспечение в рамках спецификации Software Package Data Exchange (SPDX). SPDX-идентификаторы используются для однозначного машинно-читаемого обозначения лицензионных условий, под которыми распространяется программный компонент, и являются ключевым элементом стандартизации управления лицензиями в разработке ПО.
¶История и происхождение
Стандарт SPDX был разработан и поддерживается некоммерческой организацией Linux Foundation. Первая версия спецификации (SPDX 1.0) была опубликована в августе 2011 года, а сам проект стартовал в 2010 году. Основной целью создания SPDX было устранение неоднозначности в идентификации лицензий, которая возникает из-за того, что разные проекты могут использовать разные названия для одной и той же лицензии или схожие названия для разных лицензий.
SPDX-идентификаторы впервые появились в версии 1.0 спецификации. С тех пор список лицензий (SPDX License List) регулярно обновляется: добавляются новые лицензии, уточняются существующие. По состоянию на 2024 год список включает более 600 различных лицензий, а также их вариантов и исключений.
¶Структура и формат
SPDX-идентификатор представляет собой строку, состоящую из букв латинского алфавита, цифр, дефисов и точек. Формат идентификатора обычно следует шаблону: сокращённое название лицензии, иногда с указанием версии. Например:
MIT— лицензия MIT (Massachusetts Institute of Technology License).Apache-2.0— лицензия Apache версии 2.0.GPL-3.0-only— GNU General Public License версии 3.0 (только данная версия).GPL-3.0-or-later— GNU General Public License версии 3.0 или любой более поздней версии.BSD-2-Clause— двухпунктовая лицензия BSD (Berkeley Software Distribution).LGPL-2.1-only— GNU Lesser General Public License версии 2.1 (только данная версия).Unlicense— лицензия, освобождающая код от авторских прав (public domain).
Для сложных случаев, когда код распространяется под несколькими лицензиями одновременно, используются операторы AND, OR, WITH и круглые скобки. Например:
(MIT OR Apache-2.0)— выбор между двумя лицензиями.Apache-2.0 AND MIT— одновременное действие обеих лицензий.GPL-2.0-only WITH Classpath-exception-2.0— основная лицензия с исключением (exception).
¶Классификация и виды
SPDX-идентификаторы делятся на несколько категорий в зависимости от типа лицензии:
¶Основные лицензии
Это наиболее распространённые лицензии, используемые в открытом и свободном ПО. К ним относятся:
- MIT — простая разрешительная лицензия.
- Apache-2.0 — разрешительная лицензия с условиями патентного лицензирования.
- GPL-2.0-only и GPL-3.0-only — копилефт-лицензии (требуют, чтобы производные работы распространялись под той же лицензией).
- BSD-2-Clause и BSD-3-Clause — разрешительные лицензии с минимальными обязательствами.
- LGPL-2.1-only и LGPL-3.0-only — копилефт-лицензии для библиотек.
¶Исключения (Exceptions)
Исключения — это дополнения к основной лицензии, которые позволяют использовать код в определённых условиях, не нарушая копилефт-требований. Например:
Classpath-exception-2.0— позволяет использовать GPL-код в Java-проектах, не распространяя GPL на весь проект.GCC-exception-2.0— разрешает компиляцию кода с GCC без лицензирования производного кода под GPL.
¶Специальные лицензии
Некоторые лицензии не входят в стандартные категории, но имеют собственные SPDX-идентификаторы. Например:
CC0-1.0— Creative Commons Zero (общественное достояние).BSL-1.0— Boost Software License.Zlib— лицензия zlib/libpng.
¶Нестандартные и устаревшие лицензии
Для лицензий, которые не включены в официальный список, используется идентификатор LicenseRef-[пользовательский-идентификатор]. Устаревшие лицензии (например, GPL-2.0 без указания only или or-later) помечены в списке как deprecated, но сохраняют обратную совместимость.
¶Применение
SPDX-идентификаторы используются в нескольких ключевых областях:
¶В файлах лицензий и метаданных
Разработчики указывают SPDX-идентификатор в файле LICENSE или в комментариях в исходном коде. Например, в начале файла может быть строка: `` SPDX-License-Identifier: MIT `` Это позволяет автоматизированным инструментам однозначно определить лицензию.
¶В системах управления зависимостями
Многие пакетные менеджеры (npm, Maven, PyPI, Cargo, NuGet и другие) поддерживают указание SPDX-идентификатора в файлах конфигурации (например, package.json, pom.xml, Cargo.toml). Это упрощает аудит лицензий в проекте.
¶В инструментах анализа лицензий
Специализированные инструменты (например, FOSSA, Black Duck, Snyk) используют SPDX-идентификаторы для автоматического определения лицензий в коде и генерации отчётов о соответствии лицензионным требованиям.
¶В документации и отчётах
SPDX-идентификаторы включаются в SBOM (Software Bill of Materials) — спецификацию, описывающую все компоненты программного обеспечения. SBOM, оформленный в формате SPDX, содержит для каждого компонента его SPDX-идентификатор, что позволяет проводить лицензионный аудит и управление рисками.
¶Значение и критика
SPDX-идентификаторы стали де-факто стандартом для обозначения лицензий в мире открытого ПО. Они упрощают автоматизацию проверки лицензионной совместимости, снижают вероятность ошибок при ручном вводе названий лицензий и облегчают обмен данными между различными инструментами.
Критика SPDX-идентификаторов связана с несколькими аспектами:
- Неполнота списка — некоторые лицензии, особенно малоизвестные или специфические для отдельных проектов, могут отсутствовать в официальном списке.
- Сложность для сложных лицензионных схем — комбинации операторов
AND,OR,WITHмогут быть громоздкими и трудными для понимания. - Зависимость от сообщества — обновление списка лицензий происходит по инициативе сообщества, что может приводить к задержкам в добавлении новых лицензий.
¶Интересные факты
- SPDX-идентификаторы поддерживаются не только для открытых лицензий, но и для некоторых проприетарных лицензий, если они зарегистрированы в списке.
- В 2022 году спецификация SPDX была принята как международный стандарт ISO/IEC 5962:2021.
- Идентификатор
LicenseRef-[пользовательский-идентификатор]позволяет использовать SPDX-идентификаторы даже для лицензий, не входящих в официальный список, что делает стандарт гибким.
¶Источники
- Официальная спецификация SPDX, версия 2.3 (2023). Linux Foundation.
- SPDX License List, версия 3.23 (2024). Linux Foundation.
- ISO/IEC 5962:2021 — Information technology — Software Package Data Exchange (SPDX).
- Документация по SPDX-идентификаторам в системах управления зависимостями (npm, Maven, PyPI).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →

