A frase em questão
O aviso recomendado das licenças GNU contém a seguinte frase.
either version 3 of the License, or (at your option) any later version.
Com essa frase, quem recebe pode escolher seguir as condições da versão indicada ou de qualquer versão que a FSF venha a publicar depois. Isso é o 'or later' (SPDX GPL-3.0-or-later). Se você remover a parte 'or later' e indicar apenas uma versão específica, fica 'only' (GPL-3.0-only).
Essa estrutura é definida pela seção 14 da GPL-3.0 e pela seção 9 da GPL-2.0. Em particular, a seção 9 da GPL-2.0 determina que, se o programa não indicar nenhum número de versão, pode-se escolher qualquer versão publicada pela FSF. Por isso, deixar só o arquivo LICENSE sem declarar a cláusula de versão pode levar a interpretações diferentes da pretendida.
Por que usar 'or later'
A FSF recomenda o 'or later'. O motivo é a compatibilidade futura. Quando o direito e a tecnologia mudarem e surgir uma nova GPL, o código 'or later' poderá se combinar naturalmente com a nova versão. De fato, código GPL-2.0-or-later pôde entrar diretamente em projetos GPL-3.0, mas código GPL-2.0-only não.
A seção 14 da GPL-3.0 vai além e permite designar um 'procurador (proxy)'. Se a pessoa designada pelo titular decidir publicamente aceitar uma versão posterior, essa decisão passa a valer.
Por que escolher 'only'
O 'or later' também significa concordar antecipadamente com uma licença que ainda não foi escrita. Se a FSF publicar no futuro uma versão com condições diferentes das que você deseja, quem recebe poderá escolher essa versão para usar o seu código.
O kernel Linux é o exemplo típico. O kernel é GPL-2.0-only. Linus Torvalds declarou publicamente ser contra a cláusula de informações de instalação da GPL-3.0 (a chamada anti-tivoização), e, como o kernel mistura os direitos autorais de milhares de contribuidores, na prática nem seria possível mudar a licença.
Impacto na compatibilidade
Resumindo a matriz de compatibilidade da FAQ das licenças GNU:
| Código importado → meu projeto | GPL-2.0-only | GPL-2.0-or-later | GPL-3.0 |
|---|---|---|---|
| GPL-2.0-only | Sim | Sim (obra combinada 2.0-only) | Não |
| GPL-2.0-or-later | Sim | Sim | Sim |
| GPL-3.0 | Não | Sim (obra combinada 3.0) | Sim |
| LGPL-3.0 | Não | Sim (obra combinada 3.0) | Sim |
O ponto central é que GPL-2.0-only e GPL-3.0 não aceitam uma à outra. Cada uma exige 'não impor restrições adicionais', e as condições adicionais de uma (como as cláusulas de patentes e de informações de instalação da 3.0) são restrições adicionais do ponto de vista da outra. Mais combinações podem ser verificadas no verificador de compatibilidade.
Critérios de escolha
- Siga o ecossistema: código destinado ao kernel Linux precisa ser GPL-2.0-only (ou GPL-2.0-or-later ou permissivo, que são compatíveis).
- Compatibilidade futura importa: se for provável trocar código com vários projetos GPL, o or-later é mais flexível.
- Controle importa: se não quiser depender de decisões futuras da FSF, use only ou designe quem decide por meio do proxy da seção 14 da GPL-3.0.
Como indicar
- Em
LICENSE(ouCOPYING), mantenha inalterado o texto da versão correspondente. O texto em si não distingue only de or-later. - Declare a cláusula de versão no aviso de cada arquivo e no identificador SPDX. Escolhendo 'only' ou 'or-later' na aba Cabeçalho de arquivo do gerador, o aviso oficial GNU e a linha SPDX são criados juntos.
- Registre também em uma linha no README (por exemplo, 'Licensed under GPL-3.0-or-later').
Este texto é informação geral e não constitui aconselhamento jurídico. Para decisões importantes, consulte um profissional.
Fontes
- GNU Licenses FAQ, VersionThreeOrLater · AllCompatibility — https://www.gnu.org/licenses/gpl-faq.html
- GNU, How to Use GNU Licenses for Your Own Software — https://www.gnu.org/licenses/gpl-howto.html
- Linux kernel licensing rules — https://www.kernel.org/doc/html/latest/process/license-rules.html
- SPDX License List — https://spdx.org/licenses/