Qu'est-ce que SPDX ?
SPDX (Software Package Data Exchange) est un projet de la Linux Foundation : une norme qui exprime de façon lisible par machine les composants d'un logiciel et leurs informations de licence. Elle est devenue la norme internationale ISO/IEC 5962:2021 en 2021. Son élément le plus utilisé est l'identifiant court de la liste des licences SPDX : au lieu de noms disparates comme « MIT License », « The MIT license » ou « licence MIT », on convient d'écrire simplement MIT.
Deux lignes d'en-tête
En plaçant ces deux lignes en commentaire en tête d'un fichier source, humains comme outils identifient immédiatement le titulaire et la licence du fichier.
// SPDX-FileCopyrightText: 2026 Jane Doe <jane@example.com>
// SPDX-License-Identifier: MIT
SPDX-License-Identifiercontient un identifiant ou une expression de licence (MIT OR Apache-2.0).SPDX-FileCopyrightTextest la mention de droit d'auteur. S'il y a plusieurs titulaires, on écrit plusieurs lignes.- Le noyau Linux a adopté dès 2017 cette ligne unique à la place des longs avis de licence, supprimant des milliers de lignes de texte standard dupliqué.
L'onglet En-tête de fichier du générateur crée ces deux lignes dans 7 styles de commentaire.
Attention aux identifiants obsolètes
Depuis la version 3.0 de la liste des licences SPDX (décembre 2017), la clause de version des licences GNU doit apparaître dans l'identifiant.
| Identifiant obsolète | Identifiant actuel |
|---|---|
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 |
Écrire simplement GPL-3.0 ne permet pas de savoir s'il s'agit de « only » ou de « or later ». La différence entre les deux est expliquée dans only vs or-later.
Métadonnées des paquets
La plupart des gestionnaires de paquets acceptent les identifiants ou expressions SPDX.
| Écosystème | Fichier | Exemple |
|---|---|---|
| npm | package.json | "license": "MIT" · pour un paquet privé "UNLICENSED" |
| Rust | Cargo.toml | license = "MIT OR Apache-2.0" |
| Python | pyproject.toml | license = "Apache-2.0" (PEP 639) |
| Maven | pom.xml | Nom et URL dans <licenses> |
Le UNLICENSED de npm n'a rien à voir avec « Unlicense » : il signale un paquet privé dont l'utilisation n'est pas autorisée. Les orthographes étant proches, les erreurs sont fréquentes.
REUSE : rendre tout le dépôt lisible par machine
La spécification REUSE de la Free Software Foundation Europe (FSFE) définit comment appliquer les en-têtes SPDX de façon cohérente à tout un dépôt.
- Placez tous les textes de licence dans le dossier
LICENSES/sous le nomidentifiantSPDX.txt(p. ex.LICENSES/MIT.txt). - Ajoutez
SPDX-FileCopyrightTextetSPDX-License-Identifierà chaque fichier. - Pour les fichiers qui ne peuvent pas contenir de commentaires (images, JSON, etc.), indiquez les informations dans un fichier voisin
nomdufichier.licenseou dans unREUSE.tomlà la racine du dépôt. - Vérifiez avec l'outil
reuse lintqu'aucun fichier ne manque.
Conseils pratiques
- Écrivez les identifiants exactement comme dans la liste, en respectant la casse (
Apache-2.0, et nonapache2). - Pour une licence maison absente de la liste, utilisez le préfixe
LicenseRef-(p. ex.LicenseRef-Proprietary). - Un identifiant sans texte de licence ne suffit guère à remplir l'obligation de mention. Conservez le fichier du texte séparément.
Cet article est fourni à titre d'information générale et ne constitue pas un conseil juridique. Pour toute décision importante, consultez un professionnel.
Sources
- 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/