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 licenceMIT, 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: NOASSERTION en 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 … purl porte l’identifiant qui rend la corrélation fiable ;
  • DocumentNamespace doit ê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.