Qué es SPDX
SPDX (Software Package Data Exchange) es un proyecto de la Linux Foundation y un estándar para expresar de forma legible por máquina los componentes de un software y su información de licencia. En 2021 se convirtió en el estándar internacional ISO/IEC 5962:2021. Lo más usado de él son los identificadores cortos de la lista de licencias SPDX: un acuerdo para escribir simplemente MIT en lugar de nombres dispares como 'MIT License', 'The MIT license' o 'licencia MIT'.
Las dos líneas de cabecera
Si pones estas dos líneas como comentario al principio de un archivo fuente, tanto personas como herramientas sabrán al instante el titular y la licencia de ese archivo.
// SPDX-FileCopyrightText: 2026 Jane Doe <jane@example.com>
// SPDX-License-Identifier: MIT
- En
SPDX-License-Identifierva el identificador o la expresión de licencia (MIT OR Apache-2.0). SPDX-FileCopyrightTextes el aviso de copyright. Si hay varios titulares, se escriben varias líneas.- El kernel de Linux adoptó en 2017 la práctica de poner solo esta línea en lugar de largos avisos de licencia, eliminando miles de líneas de texto repetido.
La pestaña Cabecera de archivo del generador crea estas dos líneas en 7 formatos de comentario.
Cuidado con los identificadores obsoletos
Desde la lista de licencias SPDX 3.0 (diciembre de 2017), la cláusula de versión de las licencias GNU se refleja en el identificador.
| Identificador obsoleto | Identificador actual |
|---|---|
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 |
El motivo es que, si solo se escribe GPL-3.0, no se sabe si es 'only' u 'or later'. La diferencia entre ambas está explicada en only vs or-later.
Metadatos de paquetes
La mayoría de los gestores de paquetes aceptan identificadores o expresiones SPDX.
| Ecosistema | Archivo | Ejemplo |
|---|---|---|
| npm | package.json | "license": "MIT" · para privados, "UNLICENSED" |
| Rust | Cargo.toml | license = "MIT OR Apache-2.0" |
| Python | pyproject.toml | license = "Apache-2.0" (PEP 639) |
| Maven | pom.xml | Nombre y URL dentro de <licenses> |
El UNLICENSED de npm significa algo completamente distinto de 'Unlicense': indica un paquete privado cuyo uso no está permitido. Como se escriben parecido, los errores son frecuentes.
REUSE: que todo el repositorio sea legible por máquina
La especificación REUSE de la Free Software Foundation Europe (FSFE) define cómo aplicar las cabeceras SPDX de forma coherente en todo el repositorio.
- Pon los textos de todas las licencias en la carpeta
LICENSES/con el nombreIdentificadorSPDX.txt(p. ej.,LICENSES/MIT.txt). - Añade
SPDX-FileCopyrightTextySPDX-License-Identifiera cada archivo. - Para los archivos que no admiten comentarios (imágenes, JSON, etc.), indica la información en un archivo adjunto
nombre.licenseo enREUSE.tomlen la raíz del repositorio. - Comprueba con la herramienta
reuse lintque no falte ningún archivo.
Consejos prácticos
- Los identificadores distinguen mayúsculas y minúsculas: escríbelos exactamente como aparecen en la lista (es
Apache-2.0, noapache2). - Las licencias propias que no están en la lista se escriben con el prefijo
LicenseRef-(p. ej.,LicenseRef-Proprietary). - Con solo el identificador y sin el texto, difícilmente se puede considerar cumplida la obligación de aviso. Incluye aparte el archivo con el texto.
Este artículo es información general y no constituye asesoramiento jurídico. Para decisiones importantes, consulta con un profesional.
Fuentes
- 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/