Was ist SPDX?
SPDX (Software Package Data Exchange) ist ein Projekt unter dem Dach der Linux Foundation und ein Standard, um Komponenten und Lizenzinformationen von Software maschinenlesbar darzustellen. 2021 wurde er als ISO/IEC 5962:2021 internationaler Standard. Am weitesten verbreitet sind die Kurzkennungen der SPDX-Lizenzliste: die Vereinbarung, statt uneinheitlicher Namen wie „MIT License“, „The MIT license“ oder „MIT-Lizenz“ einfach MIT zu schreiben.
Zwei Zeilen im Dateikopf
Stehen die folgenden zwei Zeilen als Kommentar am Anfang einer Quelldatei, erkennen Menschen und Werkzeuge sofort Rechteinhaber und Lizenz der Datei.
// SPDX-FileCopyrightText: 2026 Jane Doe <jane@example.com>
// SPDX-License-Identifier: MIT
- In
SPDX-License-Identifiersteht eine Lizenzkennung oder ein Ausdruck (MIT OR Apache-2.0). SPDX-FileCopyrightTextist der Urheberrechtsvermerk. Bei mehreren Personen schreibt man mehrere Zeilen.- Der Linux-Kernel hat 2017 begonnen, lange Lizenzhinweise durch diese eine Zeile zu ersetzen, und so Tausende Zeilen doppelten Boilerplate-Text eingespart.
Der Generator-Tab „Dateikopf“ erzeugt diese zwei Zeilen in sieben Kommentarstilen.
Vorsicht bei veralteten Kennungen
Seit Version 3.0 der SPDX-Lizenzliste (Dezember 2017) muss die Versionsklausel von GNU-Lizenzen in der Kennung erkennbar sein.
| Veraltete Kennung | Aktuelle Kennung |
|---|---|
GPL-2.0 | GPL-2.0-only |
GPL-2.0+ | GPL-2.0-or-later |
GPL-3.0 | GPL-3.0-only |
LGPL-2.1 | LGPL-2.1-only |
AGPL-3.0 | AGPL-3.0-only |
Schreibt man nur GPL-3.0, ist nicht erkennbar, ob „only“ oder „or later“ gemeint ist. Den Unterschied erklärt only vs. or-later.
Paketmetadaten
Die meisten Paketmanager akzeptieren SPDX-Kennungen oder -Ausdrücke.
| Ökosystem | Datei | Beispiel |
|---|---|---|
| npm | package.json | "license": "MIT" · proprietär: "UNLICENSED" |
| Rust | Cargo.toml | license = "MIT OR Apache-2.0" |
| Python | pyproject.toml | license = "Apache-2.0" (PEP 639) |
| Maven | pom.xml | Name und URL innerhalb von <licenses> |
UNLICENSED in npm bedeutet etwas völlig anderes als „Unlicense“: Es kennzeichnet ein proprietäres Paket, dessen Nutzung nicht erlaubt ist. Wegen der ähnlichen Schreibweise kommt es oft zu Verwechslungen.
REUSE: das ganze Repository maschinenlesbar
Die REUSE-Spezifikation der Free Software Foundation Europe (FSFE) legt fest, wie SPDX-Köpfe einheitlich im gesamten Repository angewendet werden.
- Alle Lizenztexte liegen im Ordner
LICENSES/unter dem NamenSPDX-Kennung.txt(z. B.LICENSES/MIT.txt). - Jede Datei erhält
SPDX-FileCopyrightTextundSPDX-License-Identifier. - Für Dateien ohne Kommentarmöglichkeit (Bilder, JSON usw.) werden die Angaben in einer Begleitdatei
Dateiname.licenseoder inREUSE.tomlim Stammverzeichnis gemacht. - Mit dem Werkzeug
reuse lintprüfen Sie, ob Dateien fehlen.
Praxistipps
- Schreiben Sie Kennungen mit korrekter Groß- und Kleinschreibung genau wie in der Liste (
Apache-2.0, nichtapache2). - Eigene Lizenzen, die nicht in der Liste stehen, erhalten das Präfix
LicenseRef-(z. B.LicenseRef-Proprietary). - Eine Kennung allein ohne Lizenztext erfüllt die Hinweispflicht kaum. Legen Sie die Lizenztexte als eigene Dateien ab.
Dieser Artikel enthält allgemeine Informationen und ist keine Rechtsberatung. Besprechen Sie wichtige Entscheidungen mit Fachleuten.
Quellen
- SPDX License List — https://spdx.org/licenses/
- SPDX Specification, Annex: Using SPDX short identifiers in source files — https://spdx.github.io/spdx-spec/v2.3/using-SPDX-short-identifiers-in-source-files/
- REUSE Specification — https://reuse.software/spec/
- npm Docs, package.json license — https://docs.npmjs.com/cli/configuring-npm/package-json#license
- PEP 639 — https://peps.python.org/pep-0639/