Открыть сервис

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-идентификатор представляет собой строку, состоящую из букв латинского алфавита, цифр, дефисов и точек. Формат идентификатора обычно следует шаблону: сокращённое название лицензии, иногда с указанием версии. Например:

Для сложных случаев, когда код распространяется под несколькими лицензиями одновременно, используются операторы 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-идентификаторы. Например:

Нестандартные и устаревшие лицензии

Для лицензий, которые не включены в официальный список, используется идентификатор 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 →