System Package Data Exchange ( SPDX , ранее Software Package Data Exchange ) — открытый стандарт , способный представлять системы с цифровыми компонентами в виде спецификаций материалов (BOM). [1] Первоначально разработанный для описания компонентов программного обеспечения, SPDX может описывать компоненты систем программного обеспечения, модели ИИ, сборки программного обеспечения, данные безопасности и другие пакеты данных. SPDX позволяет выражать компоненты, лицензии , авторские права, ссылки на безопасность и другие метаданные, относящиеся к системам. [2]
Первоначальной целью SPDX было улучшение соответствия требованиям лицензий [3] , и с тех пор он был расширен для упрощения дополнительных вариантов использования, таких как прозрачность и безопасность цепочки поставок. [4] SPDX создан в рамках проекта SPDX, поддерживаемого сообществом, в котором участвуют ключевые отраслевые эксперты, организации и энтузиасты открытого исходного кода под эгидой Linux Foundation .
Спецификация SPDX признана международным открытым стандартом безопасности, соответствия лицензиям и других артефактов цепочки поставок программного обеспечения как ISO/IEC 5962:2021. Текущая версия стандарта — 3.0. [5]
Стандарт SPDX 2.x определяет документ SBOM, который содержит метаданные SPDX о программном обеспечении. Сам документ может быть выражен в нескольких форматах, включая JSON, YAML, RDF/XML, тег-значение и электронную таблицу. Каждый документ SPDX описывает один или несколько элементов, которые могут быть пакетом программного обеспечения, определенным файлом или фрагментом файла. Каждому элементу присваивается уникальный идентификатор, а метаданные для элемента могут ссылаться на другие элементы. [6]
SPDX 3.0 позволяет пользователям передавать информацию на гораздо более детальном уровне без необходимости упаковывать ее как данные «конверта». Ключевой принцип проектирования в SPDX 3.0 заключается в том, что все элементы могут быть выражены и ссылаться на них независимо от любого другого элемента. Эта независимость необходима для поддержки различных вариантов использования обмена и анализа контента и упрощает передачу отдельных элементов, представляющих интерес. Структура отношений также была обновлена, чтобы стать более выразительной и более понятной по сравнению со старыми версиями спецификации.
Модель данных SPDX 3.0 основана на Resource Description Framework (RDF). Данные могут быть сериализованы в различных форматах для хранения и передачи, включая форматы, определенные в RDF 1.1, такие как JSON-LD, Turtle (Terse RDF Triple Language), N-Triples и RDF/XML.
Спецификация 3.0 представила профили для поддержки расширения вариантов использования за пределы программного обеспечения без увеличения общей сложности. Профили позволяют пользователям определять данные для нужных им вариантов использования, а также увеличивают объем информации, которую можно собрать непосредственно из данных SPDX. SPDX 3.0 определяет восемь профилей:
Первая версия спецификации SPDX была предназначена для упрощения соответствия лицензиям на программное обеспечение , [3] но последующие версии спецификации добавили возможности, предназначенные для других вариантов использования, такие как возможность содержать ссылки на известные уязвимости программного обеспечения . [13] Последние версии SPDX соответствуют «Минимальным элементам для спецификации программного обеспечения» NTIA . [17]
SPDX 2.2.1 был представлен в Международную организацию по стандартизации (ISO) в октябре 2020 года и опубликован как ISO/IEC 5962:2021 Информационные технологии — Спецификация SPDX® V2.2.1 в августе 2021 года. [10] [18]
Каждая лицензия идентифицируется полным именем, например "Mozilla Public License 2.0" и коротким идентификатором, здесь "MPL-2.0". Лицензии можно объединять с помощью операторов AND
и OR
, а также группировать (
, )
.
Например, (Apache-2.0 OR MIT)
означает, что можно выбрать между Apache-2.0
( Apache License ) или MIT
( MIT license ). С другой стороны, (Apache-2.0 AND MIT)
означает, что применяются обе лицензии.
Также есть оператор "+", который при применении к лицензии означает, что применяются и будущие версии лицензии. Например, Apache-1.1+
означает, что Apache-1.1
и Apache-2.0
могут применяться (и будущие версии, если таковые имеются).
SPDX описывает точные условия, на которых лицензируется часть программного обеспечения. Он не пытается классифицировать лицензии по типу, например, описывая лицензии с условиями, похожими на лицензию BSD, как «BSD-подобные». [19]
В 2020 году Европейская комиссия опубликовала свой Joinup Licensing Assistant [20] , который позволяет выбирать и сравнивать более 50 лицензий с доступом к их идентификатору SPDX и полному тексту.
Семейство лицензий GNU (например, GNU General Public License версии 2 ) имеет встроенную возможность выбора более поздней версии лицензии. Иногда было неясно, GPL-2.0
означает ли выражение SPDX «точно GPL версии 2.0» или «GPL версии 2.0 или любой более поздней версии». [21] Таким образом, начиная с версии 3.0 Списка лицензий SPDX, семейство лицензий GNU получило новые названия. [22] GPL-2.0-only
означает «точно версия 2.0» и GPL-2.0-or-later
означает «версия 2.0 или любая более поздняя версия».
Идентификатор лицензии SPDX может быть добавлен в начало файлов исходного кода в виде короткой строки, однозначно указывающей на используемую лицензию. SPDX-License-Identifier
Синтаксис, впервые предложенный Das U-Boot в 2013 году, стал частью SPDX в версии 2.1. В 2017 году FSFE запустил REUSE, который предоставляет инструменты для проверки комментариев и эффективного извлечения информации об авторских правах. [23]
Идентификатор лицензии SPDX также используется в ряде менеджеров пакетов, таких как npm , [24] Python, [25] и Rust cargo. [26] Выражения лицензии SPDX используются в метаданных пакета RPM в Fedora Linux , заменяя более раннее использование системы Callaway. [27] Debian использует немного другую спецификацию лицензии. [28]