1001Ferramentas
📋 Validadores

Validador de Expressão SPDX

Valide expressões SPDX de licença ("(MIT OR Apache-2.0) AND BSD-3-Clause") com parser oficial, útil para package.json e Cargo.toml.

Operadores suportados: AND, OR, WITH, +, ( ). Útil para license em package.json e Cargo.toml.

Expressões de licença SPDX explicadas

Uma expressão de licença SPDX é uma pequena linguagem legível por máquina para declarar exatamente qual licença open-source (ou combinação de licenças) se aplica a um software. Ela aparece no campo license do package.json, em manifestos do Cargo, em Software Bills of Materials (SBOMs) e em cabeçalhos compatíveis com o REUSE. Validar uma expressão significa checar duas coisas: a gramática (operadores e parênteses) e os identificadores (são entradas reais da SPDX License List?).

Identificadores e operadores

Uma expressão simples é um único id de licença da SPDX License List, como MIT, Apache-2.0, GPL-3.0-or-later ou BSD-3-Clause. Os identificadores diferenciam maiúsculas de minúsculas, e os operadores que os combinam são escritos em maiúsculas:

  • AND — ambas as licenças se aplicam (ex.: MIT AND BSD-3-Clause).
  • OR — o destinatário pode escolher qualquer uma (ex.: MIT OR Apache-2.0).
  • WITH — anexa uma exceção de licença (ex.: GPL-2.0-or-later WITH Classpath-exception-2.0).
  • Parênteses agrupam subexpressões: (MIT OR Apache-2.0) AND BSD-3-Clause.

Para licenças que não estão na lista oficial, use o prefixo LicenseRef- (ex.: LicenseRef-minha-licenca-proprietaria) para referenciar uma licença definida em outro ponto do documento.

O operador + obsoleto

Um + no final (como em GPL-2.0+) já significou "esta versão ou qualquer versão posterior". Hoje ele está obsoleto em favor dos identificadores explícitos -or-later, como GPL-2.0-or-later, que são mais claros e evitam ambiguidade. Prefira a forma nova em qualquer metadado novo que você escrever.

Pegadinhas comuns

  • Escrever os operadores em minúsculas (mit or apache-2.0) — os operadores devem ser maiúsculos.
  • Errar a caixa do identificador: é Apache-2.0, não apache-2.0 nem APACHE-2.0.
  • Usar o nome da licença em vez do id SPDX (ex.: "GPLv3" no lugar de GPL-3.0-or-later).
  • Depender do + obsoleto em vez de -or-later.
  • Esquecer que WITH recebe um id de exceção, não outro id de licença.

FAQ

MIT OR Apache-2.0 é uma licença dupla? Sim — OR significa que quem recebe pode escolher qual das duas licenças prefere usar. Já o AND exigiria cumprir ambas.

Por que minha expressão falha se a gramática parece correta? Provavelmente o identificador não é reconhecido. A validação também confere cada id contra a SPDX License List, então um erro de digitação ou um nome antigo/customizado sem o prefixo LicenseRef- será rejeitado.

Como declaro uma licença proprietária? Use o prefixo LicenseRef-, por exemplo LicenseRef-Acme-EULA, e defina o texto da licença no documento ou SBOM que a acompanha.

Ferramentas Relacionadas