O que é SPDX
O SPDX (Software Package Data Exchange) é um projeto da Linux Foundation e um padrão para representar, de forma legível por máquina, os componentes de um software e suas informações de licença. Em 2021 tornou-se o padrão internacional ISO/IEC 5962:2021. A parte mais usada são os identificadores curtos da SPDX License List. É a convenção de escrever apenas MIT, em vez de nomes variados como 'MIT License', 'The MIT license' ou 'licença MIT'.
As duas linhas do cabeçalho
Colocando as duas linhas abaixo como comentário no topo do arquivo-fonte, pessoas e ferramentas identificam na hora o titular e a licença daquele arquivo.
// SPDX-FileCopyrightText: 2026 Jane Doe <jane@example.com>
// SPDX-License-Identifier: MIT
SPDX-License-Identifierrecebe o identificador ou a expressão de licença (MIT OR Apache-2.0).SPDX-FileCopyrightTexté o aviso de copyright. Se houver várias pessoas, use várias linhas.- O kernel Linux adotou em 2017 essa forma de usar uma única linha no lugar do longo aviso de licença, eliminando milhares de linhas de boilerplate duplicado.
A aba Cabeçalho de arquivo do gerador cria essas duas linhas em 7 estilos de comentário.
Cuidado com identificadores obsoletos
A partir da SPDX License List 3.0 (dezembro de 2017), passou-se a explicitar no identificador a cláusula de versão das licenças GNU.
| Identificador obsoleto | Identificador atual |
|---|---|
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 |
Isso porque, escrevendo só GPL-3.0, não se sabe se é 'only' ou 'or later'. A diferença entre as duas formas está em only vs or-later.
Metadados de pacote
A maioria dos gerenciadores de pacotes aceita identificadores ou expressões SPDX.
| Ecossistema | Arquivo | Exemplo |
|---|---|---|
| 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 | Nome e URL dentro de <licenses> |
O UNLICENSED do npm tem um sentido totalmente diferente de 'Unlicense': indica um pacote privado cujo uso não é permitido. Como a grafia é parecida, o erro é frequente.
REUSE: todo o repositório legível por máquina
A especificação REUSE da Free Software Foundation Europe (FSFE) define como aplicar cabeçalhos SPDX de forma consistente em todo o repositório.
- Coloque todos os textos de licença na pasta
LICENSES/com o nomeidentificadorSPDX.txt(por exemplo,LICENSES/MIT.txt). - Inclua
SPDX-FileCopyrightTexteSPDX-License-Identifierem cada arquivo. - Para arquivos que não aceitam comentários (imagens, JSON etc.), registre as informações em um arquivo ao lado
nomedoarquivo.licenseou noREUSE.tomlna raiz do repositório. - Verifique com a ferramenta
reuse lintse nenhum arquivo ficou de fora.
Dicas práticas
- Os identificadores diferenciam maiúsculas e minúsculas e devem ser escritos exatamente como na lista (
Apache-2.0, e nãoapache2). - Licenças próprias que não estão na lista são escritas com o prefixo
LicenseRef-(por exemplo,LicenseRef-Proprietary). - Só o identificador, sem o texto, dificilmente cumpre a obrigação de aviso. Mantenha o arquivo com o texto da licença à parte.
Este texto é informação geral e não constitui aconselhamento jurídico. Para decisões importantes, consulte um profissional.
Fontes
- 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/