System Package Data Exchange ( SPDX , ehemals Software Package Data Exchange ) ist ein offener Standard , der Systeme mit digitalen Komponenten als Stücklisten (BOMs) abbilden kann. [ 2 ] Ursprünglich zur Beschreibung von Softwarekomponenten entwickelt, kann SPDX die Komponenten von Softwaresystemen, KI-Modellen, Software-Builds, Sicherheitsdaten und anderen Datenpaketen beschreiben. SPDX ermöglicht die Darstellung von Komponenten, Lizenzen , Urheberrechten, Sicherheitsvermerken und anderen Metadaten zu Systemen. [ 3 ]

Der ursprüngliche Zweck von SPDX bestand in der Verbesserung der Lizenzkonformität [ 4 ] , und es wurde seither erweitert, um zusätzliche Anwendungsfälle wie Transparenz und Sicherheit in der Lieferkette zu ermöglichen [ 5 ] . SPDX wird vom gemeinschaftlich getragenen SPDX-Projekt unter der Schirmherrschaft der Linux Foundation entwickelt, an dem führende Branchenexperten, Organisationen und Open-Source-Enthusiasten beteiligt sind .

Die SPDX-Spezifikation ist als ISO/IEC 5962:2021 als internationaler offener Standard für Sicherheit, Lizenzkonformität und andere Artefakte der Software-Lieferkette anerkannt. Die neueste Version des Standards ist seit August 2025 die Version 3.0.1. [ 1 ]

Struktur

Version 2.x

Der SPDX-2.x-Standard definiert ein SBOM-Dokument, das SPDX-Metadaten über Software enthält. Das Dokument selbst kann in verschiedenen Formaten vorliegen, darunter JSON, YAML, RDF/XML, Tag-Wert-Paare und Tabellenkalkulationen. Jedes SPDX-Dokument beschreibt ein oder mehrere Elemente, beispielsweise ein Softwarepaket, eine bestimmte Datei oder einen Ausschnitt aus einer Datei. Jedem Element wird eine eindeutige Kennung zugewiesen, und die Metadaten eines Elements können auf andere Elemente verweisen. [ 6 ]

Version 3.0

SPDX 3.0 ermöglicht es Nutzern, Informationen wesentlich detaillierter zu kommunizieren, ohne sie als „Envelope“-Daten verpacken zu müssen. Ein zentrales Designprinzip von SPDX 3.0 ist, dass alle Elemente unabhängig voneinander ausgedrückt und referenziert werden können. Diese Unabhängigkeit ist erforderlich, um vielfältige Anwendungsfälle für den Datenaustausch und die Analyse zu unterstützen und die Kommunikation einzelner relevanter Elemente zu vereinfachen. Die Beziehungsstruktur wurde ebenfalls aktualisiert und ist nun ausdrucksstärker und verständlicher als in älteren Versionen der Spezifikation.

Das SPDX 3.0-Datenmodell basiert auf dem Resource Description Framework (RDF). Daten können in verschiedenen Formaten für Speicherung und Übertragung serialisiert werden, darunter in RDF 1.1 definierte Formate wie JSON-LD, Turtle (Terse RDF Triple Language), N-Triples und RDF/XML.

SPDX 3.0-Profile

Die Spezifikation 3.0 führte Profile ein , um die Erweiterung der Anwendungsfälle über Software hinaus zu unterstützen, ohne die Gesamtkomplexität zu erhöhen. Profile ermöglichen es Benutzern, Daten für die benötigten Anwendungsfälle zu definieren und gleichzeitig die Menge der direkt aus den SPDX-Daten gewinnbaren Informationen zu erhöhen. SPDX 3.0 definiert acht Profile:

  • Kern: grundlegende Konzepte, die allen Profilen gemeinsam sind
  • Software : Konzepte im Zusammenhang mit Softwareartefakten
  • Sicherheit: sicherheitsrelevante Metadaten, die spezifisch für eine Software sind.
  • Build: Informationen, die zur Beschreibung einer Instanz eines Software-Builds erforderlich sind
  • KI : Konzepte und Datenelemente im Zusammenhang mit einem KI-System und -Modell
  • Datensatz : Konzepte im Zusammenhang mit einem Datensatz, einschließlich Aufbereitungsprozess, Eigenschaften und Zugriffsmethoden
  • Lizenzierung : Lizenzinformationen, die für die Einhaltung typischer Lizenzierungsanwendungsfälle erforderlich sind
  • Lite : Eine Teilmenge der SPDX-Spezifikation, die darauf abzielt, den SPDX-Standard und die tatsächlichen Arbeitsabläufe in einigen Branchen in Einklang zu bringen.

Versionsverlauf

Spezifikationsversionen
VersionsnummerVeröffentlichungsdatumAnmerkungenReferenzen
3.0.1 Dezember 2024 Es wurden Änderungen vorgenommen, um SPDX 3 als potenziellen OMG- und ISO- Standard zu unterstützen. Zusätzlich wurden verschiedene „Fehlerbehebungen für Spezifikationsprobleme“ aus SPDX 3.0 vorgenommen, darunter kleinere Änderungen wie Tippfehlerkorrekturen. [ 7 ] [ 1 ]
3.0 April 2024 Es wurde eine umfassende Reihe von Aktualisierungen eingeführt, die das Modell, die Spezifikation und die Lizenzliste umfassen, mit der neuen Ergänzung von SPDX-Profilen zur Bewältigung moderner Systemanwendungsfälle wie Sicherheit und KI. [ 8 ]
2.3November 2022Es wurden neue Felder hinzugefügt, um die Erfassung sicherheitsrelevanter Informationen und die Interoperabilität mit anderen SBOM-Formaten zu verbessern.[ 9 ]
2.2.2April 2022Funktional gleichwertig mit SPDX 2.2.1, jedoch mit Verbesserungen in Rechtschreibung, Grammatik und anderen redaktionellen Bereichen.[ 10 ]
2.2.1Oktober 2020Funktional äquivalent zu SPDX 2.2, jedoch mit Satz für die Veröffentlichung gemäß ISO-Standard.[ 11 ]
2.2Mai 2020Das Profil „SPDX-lite“ wurde hinzugefügt, um eine minimale Software-Stückliste zu erhalten und die Unterstützung für externe Referenzen zu verbessern.[ 12 ]
2.1November 2016Unterstützung für die Beschreibung von Code-Ausschnitten und die Möglichkeit, auf Nicht-SPDX-Daten (wie z. B. CVEs ) zu verweisen, wurde hinzugefügt.[ 13 ] [ 14 ]
2.0Mai 2015Es wurde die Möglichkeit hinzugefügt, mehrere Pakete und die Beziehungen zwischen verschiedenen Paketen und Dateien zu beschreiben.[ 15 ]
1.2Oktober 2013Verbesserte Interaktion mit der SPDX-Lizenzliste und hinzugefügte Felder zur Dokumentation zusätzlicher Informationen über Softwareprojekte.[ 16 ]
1.1August 2012Ein Fehler im SPDX-Paketverifizierungscode (einer kryptografischen Hash-Funktion ) wurde behoben und die Unterstützung für Freitextkommentare hinzugefügt.[ 17 ]
1.0August 2011Die erste Version der SPDX-Spezifikation; verwaltet Pakete.[ 4 ]

Die erste Version der SPDX-Spezifikation sollte die Einhaltung von Softwarelizenzen vereinfachen [ 4 ] , spätere Versionen fügten jedoch Funktionen für andere Anwendungsfälle hinzu, beispielsweise die Möglichkeit, Verweise auf bekannte Software-Schwachstellen einzubinden [ 14 ] . Aktuelle Versionen von SPDX erfüllen die „Minimum Elements For a Software Bill of Materials“ der NTIA [ 18 ] .

SPDX 2.2.1 wurde im Oktober 2020 bei der Internationalen Organisation für Normung (ISO) eingereicht und im August 2021 als ISO/IEC 5962:2021 Informationstechnik — SPDX® Spezifikation V2.2.1 veröffentlicht. [ 11 ] [ 19 ]

SPDX-Lizenzkennung

Syntax

Jede Lizenz wird durch einen vollständigen Namen, wie z. B. „Mozilla Public License 2.0“, und eine Kurzkennung, hier „MPL-2.0“, identifiziert. Lizenzen können durch Operatoren und ANDsowie ORdurch Gruppierung kombiniert werden (.)

Beispielsweise (Apache-2.0 OR MIT)bedeutet „“ die Wahl zwischen Apache-2.0der Apache-Lizenz und MITder MIT-Lizenz . „“ hingegen (Apache-2.0 AND MIT)bedeutet, dass beide Lizenzen gelten.

Es gibt außerdem den Operator „+“, der, wenn er auf eine Lizenz angewendet wird, bedeutet, dass auch zukünftige Versionen der Lizenz gelten. Beispielsweise Apache-1.1+bedeutet „+“, dass „+“ Apache-1.1und Apache-2.0„+“ (und gegebenenfalls zukünftige Versionen) gelten.

SPDX beschreibt die genauen Bedingungen, unter denen eine Software lizenziert wird. Es versucht nicht, Lizenzen nach Typ zu kategorisieren, beispielsweise indem Lizenzen mit ähnlichen Bedingungen wie die BSD-Lizenz als „BSD-ähnlich“ bezeichnet werden. [ 20 ]

Im Jahr 2020 veröffentlichte die Europäische Kommission ihren Joinup Licensing Assistant [ 21 ] , der die Auswahl und den Vergleich von mehr als 50 Lizenzen ermöglicht und Zugriff auf deren SPDX-Kennung und Volltext bietet.

Veraltete Lizenzkennungen

Die GNU-Lizenzfamilie (z. B. GNU General Public License Version 2 ) bietet die Möglichkeit, eine spätere Version der Lizenz auszuwählen. Manchmal war unklar, ob die SPDX-Ausdrücke GPL-2.0„exakt GPL Version 2.0“ oder „GPL Version 2.0 oder eine spätere Version“ bedeuteten. [ 22 ] Daher erhielten die GNU-Lizenzen ab Version 3.0 der SPDX-Lizenzliste neue Bezeichnungen. [ 23 ]GPL-2.0-only bedeutet nun „exakt Version 2.0“ und GPL-2.0-or-laterbedeutet „Version 2.0 oder eine spätere Version“.

Annahme

Für die Lizenzierung

Die SPDX-Lizenzkennung kann als kurze Zeichenkette, die die verwendete Lizenz eindeutig angibt, am Anfang von Quellcodedateien hinzugefügt werden. Die SPDX-License-IdentifierSyntax, die 2013 von Das U-Boot entwickelt wurde , ist seit Version 2.1 Bestandteil von SPDX. 2017 veröffentlichte die FSFE REUSE , das Werkzeuge zur Validierung des Kommentars und zur effizienten Extraktion von Urheberrechtsinformationen bereitstellt. [ 24 ]

Die SPDX-Lizenzkennung wird auch in verschiedenen Paketmanagern wie npm [ 25 ] , Python [ 26 ] und Rust Cargo [ 27 ] verwendet. In Fedora Linux werden SPDX-Lizenzausdrücke in den Metadaten von RPM- Paketen verwendet und ersetzen dort das frühere Callaway-System. [ 28 ] Debian verwendet eine leicht abweichende Lizenzspezifikation. [ 29 ]

Siehe auch

Referenzen

  1. ^ a b c spdx. "Release Patch release 3.0.1 · spdx/spdx-3-model" . GitHub . Abgerufen am 02.09.2025 .
  2. ^ Stewart, Kate (25. Mai 2021). „SPDX: Es wird bereits für globale Software-Stücklisten (SBOM) und die Sicherheit der Lieferkette eingesetzt“ . Linux Foundation . Abgerufen am 13. August 2021 .
  3. ^ „Übersicht über bestehende SBOM-Formate und -Standards“ (PDF) . Nationale Telekommunikations- und Informationsverwaltung . 25. Oktober 2019. S. 9. Abgerufen am 13. August 2021 .
  4. ^ a b c Bridgwater, Adrian (19. August 2011). „Linux Foundation erleichtert Lizenzprobleme für Open Source“ . Open Source Insider . Computer Weekly . Archiviert vom Original am 20. August 2021. Abgerufen am 13. August 2021 .
  5. ^ Rushgrove, Gareth (16. Juni 2021). „Weiterentwicklung der SBOM-Standards: Snyk und SPDX“ . Snyk . Abgerufen am 14. August 2021 .
  6. ^ Winslow, Steve (06.04.2023). „SPDX- und NTIA-Minimalelemente für SBOM HOWTO“ . spdx.github.io .
  7. ^ spdx. „Release Patch release 3.0.1 · spdx/spdx-spec“ . GitHub . Abgerufen am 2025-09-02 .
  8. goneall (9. Oktober 2023). „SPDX-Profile verstehen“ . SPDX . Abgerufen am 19. Mai 2024 .
  9. ^ goneall (2. November 2022). „Release v2.3“ . spdx/spdx-spec . GitHub . Abgerufen am 22. November 2022 .
  10. ^ kestewart (27. April 2022). „Release v2.2.2“ . spdx/spdx-spec . GitHub . Abgerufen am 11. Juni 2022 .
  11. ^ a b „ISO/IEC 5962:2021 Informationstechnik — SPDX® Spezifikation V2.2.1“ . ISO . August 2021. Abgerufen am 1. Dezember 2021 .
  12. ^ Stewart, Kate (7. Mai 2020). „SPDX 2.2 Spezifikation veröffentlicht“ . Linux Foundation . Abgerufen am 1. Dezember 2021 .
  13. ^ „General Meeting/Minutes/2016-11-03“ . SPDX Wiki . 3. November 2016. Abgerufen am 1. Dezember 2021 .
  14. ^ a b „Die Open Compliance Initiative der Linux Foundation veröffentlicht neue SPDX-Spezifikation“ . Linux Foundation. 4. Oktober 2016. Abgerufen am 1. Dezember 2021 .
  15. ^ „Was ist neu in SPDX 2.0?“ . LWN.net . 20. Mai 2015. Abgerufen am 1. Dezember 2021 .
  16. ^ „Die SPDX-Arbeitsgruppe der Linux Foundation veröffentlicht eine neue Version des Software Package Data Exchange Standard“ . Linux Foundation. 22. Oktober 2013. Abgerufen am 1. Dezember 2021 .
  17. ^ „Die SPDX-Arbeitsgruppe der Linux Foundation veröffentlicht eine neue Version des Software Package Data Exchange Standard“ . Linux Foundation. 30. August 2012. Abgerufen am 1. Dezember 2021 .
  18. ^ „Die Mindestbestandteile einer Software-Stückliste (SBOM)“ (PDF) . Nationale Telekommunikations- und Informationsverwaltung . Abgerufen am 1. Dezember 2021 .
  19. ^Bernard, Allen (September 9, 2021). "SPDX becomes internationally recognized standard". TechRepublic. Retrieved 2021-12-01.
  20. ^Odence, Phil (2010-06-23). "The Software Package Data Exchange (SPDX) Format". Dr Dobb's. Retrieved 2012-08-31.
  21. ^"Joinup Licensing Assistant". Retrieved 31 March 2020.
  22. ^Richard Stallman. "For Clarity's Sake, Please Don't Say "Licensed under GNU GPL 2"!". GNU. Retrieved 2018-05-24.
  23. ^Jilayne Lovejoy (5 January 2018). "License List 3.0 Released!". spdx.dev. Archived from the original on 2018-01-05. Retrieved 2021-09-02.
  24. ^"Solving License Compliance at the Source: Adding SPDX License IDs - Linux Foundation". www.linuxfoundation.org.
  25. ^"package.json | npm Docs". docs.npmjs.com.
  26. ^"PEP 639 – Improving License Clarity with Better Package Metadata". peps.python.org.
  27. ^"The Manifest Format - The Cargo Book". doc.rust-lang.org.
  28. ^"License: field in Spec File". Fedora Legal Documentation. Retrieved 30 July 2023.
  29. ^"Machine-readable debian/copyright file". www.debian.org.