SPDX
Identité
Software Package Data Exchange, créé au sein de la Linux Foundation, normalisé ISO/IEC 5962 pour la version 2.2.1. Sérialisations tag-value, JSON, YAML, RDF/XML et tableur.
Conçu par une communauté de conformité juridique, autour de la question des licences.
Structure du document (SPDX 2.x)
| Section | Contenu |
|---|---|
| Document creation information | Version SPDX, identifiant du document, licence des données, créateur, horodatage |
| Packages | Les paquets : nom, version, fournisseur, empreinte, licence déclarée et licence constatée, notice de copyright, provenance |
| Files | Le détail fichier par fichier, avec licence et copyright — granularité rare mais décisive en cas d’audit |
| Snippets | Fragments de code d’origine distincte au sein d’un fichier |
| Relationships | Les relations : contient, dépend de, est généré par, est un fichier source de… |
| Annotations | Commentaires horodatés et attribués |
| Other licensing information | Licences non référencées dans la liste SPDX |
La distinction entre licence déclarée (PackageLicenseDeclared, ce que le projet
affirme) et licence constatée (PackageLicenseConcluded, ce que l’analyse établit) est
propre à SPDX et sans équivalent direct ailleurs. Elle est précieuse en contentieux : elle
documente le fait que vous avez vérifié plutôt que cru sur parole.
SPDX 3 et les profils
SPDX 3 réorganise le modèle autour de profils activables : core, software, licensing, security, build, AI, dataset, extension. Cela rapproche SPDX de la couverture fonctionnelle de CycloneDX tout en conservant sa profondeur juridique.
La liste de licences SPDX
C’est l’apport le plus universel du projet : une liste normalisée d’identifiants de
licence — MIT, Apache-2.0, GPL-3.0-or-later, LGPL-2.1-only, MPL-2.0,
BSD-3-Clause, AGPL-3.0-only — utilisée par l’ensemble de l’écosystème, y compris par
CycloneDX.
Les expressions de licence permettent d’exprimer les cas composés :
| Expression | Sens |
|---|---|
MIT |
Licence unique |
MIT OR Apache-2.0 |
Double licence, au choix du destinataire |
GPL-2.0-only AND MIT |
Les deux s’appliquent cumulativement |
GPL-2.0-only WITH Classpath-exception-2.0 |
Licence assortie d’une exception normalisée |
NOASSERTION |
Licence indéterminée — à traiter comme un défaut bloquant |
Ce que chacune de ces licences impose réellement est traité dans Les familles de licences.
Exemple commenté (tag-value)
SPDXVersion: SPDX-2.3
DataLicense: CC0-1.0
SPDXID: SPDXRef-DOCUMENT
DocumentName: acme-gateway-4.2.1
DocumentNamespace: https://acme.example.org/spdx/acme-gateway-4.2.1
Creator: Tool: syft-1.x
Created: 2026-08-19T09:12:04Z
PackageName: acme-gateway
SPDXID: SPDXRef-Package-acme-gateway
PackageVersion: 4.2.1
PackageDownloadLocation: NOASSERTION
FilesAnalyzed: true
PackageLicenseDeclared: Apache-2.0
PackageLicenseConcluded: Apache-2.0
PackageCopyrightText: NOASSERTION
PackageName: http-client
SPDXID: SPDXRef-Package-http-client
PackageVersion: 5.3.1
PackageLicenseDeclared: MIT
PackageLicenseConcluded: MIT
ExternalRef: PACKAGE-MANAGER purl pkg:maven/org.example/[email protected]
Relationship: SPDXRef-Package-acme-gateway DEPENDS_ON SPDXRef-Package-http-client
Points d’attention :
PackageLicenseConcluded: NOASSERTIONen masse est le signal d’un outil qui n’a pas analysé les fichiers ; c’est un défaut de qualité, pas une propriété du composant ;ExternalRef … purlporte l’identifiant qui rend la corrélation fiable ;DocumentNamespacedoit être unique et stable : c’est l’identité du document.
Quand vous produisez du SPDX
- Lorsqu’un client l’exige contractuellement.
- Pour les livrables juridiques : fichier d’attributions, réponses aux diligences, préparation d’un audit de licences.
- Lorsqu’un écosystème amont le publie déjà dans ce format et que vous l’agrégez.
Dans tous les autres cas, votre format pivot reste CycloneDX, avec conversion documentée.