Por motivo de clareza, por favor não diga “Licenciado sob GNU GPL2”!

por Richard Stallman

Quando escrevi a Licença Pública Geral GNU (GNU GPL), em 1989, reconheci que as mudanças poderiam ser necessárias: a FSF poderia algum dia ter motivos para publicar uma nova versão. Então eu parei com a licença “versão 1” e configurei uma estrutura para permitir que os usuários atualizem programas para versões de licença posteriores.

Não havia nenhuma maneira habitual de fazer isso com uma licença livre; até onde eu sei, nunca tinha sido feito antes. Os desenvolvedores lançaram uma nova versão de um programa sob uma licença diferente e talvez tenham feito novos lançamentos de versões antigas que ofereçam uso sob uma licença diferente, mas nunca criaram uma maneira sistemática de oferecer aos usuários a escolha de usar uma versão futura de uma licença para versões já lançadas de um programa.

Eu não sabia como os desenvolvedores responderiam a essa inovação, então eu decidi dar a cada desenvolvedor uma escolha de permitir futuras versões. Isso significava que os desenvolvedores poderiam lançar um programa em GNU GPL versão 1 apenas ou lançá-lo em GPL versão 1 ou qualquer versão posterior. A maneira como os desenvolvedores afirmam que é a escolha na nota de licença que vai no início de cada arquivo de origem. É aí que a GPL diz que a decisão está declarada.

A Free Software Foundation instou os desenvolvedores a escolher ou qualquer versão posterior, pois isso significava que os usuários seriam livres para usar esse programa na GNU GPL versão 1 ou na versão 2 (uma vez que havia uma versão 2) ou na versão 3 (uma vez que havia uma versão 3). E eles serão livres para usá-la na versão 4, se alguma vez tivermos que fazer uma versão 4.

Desde então, a FSF lançou a GNU GPL versão 2 em 1991 e a versão 3 em 2007. Cada versão oferece aos desenvolvedores a opção de insistir nessa única versão da licença ou permitir o uso em versões futuras da licença. (A GPL 3 também permite a opção “intermediária”, na qual uma página da Web especificada pode subsequentemente dar permissão para usar uma versão futura específica.)

Publicar programas com permissão de atualização de licença é vitais para evitar a incompatibilidade entre os programas lançados sob versões diferentes da GPL.

Duas licenças de copyleft diferentes são quase inevitavelmente incompatíveis na ausência de algum mecanismo de compatibilidade explícita. Isso porque cada um exige necessariamente versões modificadas de um programa para ser lançado sob aquela mesma licença. Como consequência, o código lançado sob a versão 2 da GPL não pode ser mesclado com o código lançado apenas na versão GPL versão 3.

O mecanismo de compatibilidade entre versões da GPL serve para lançar um programa na “versão N ou qualquer versão posterior”. Um programa lançado na GPL-2.0-ou-posterior pode ser mesclado com o código em GPL-3.0-ou-posterior, pois o “3 ou posterior” é um subconjunto de “2 ou posterior”.

Alguns desenvolvedores dizem “Eu vou lançar agora sob GNU GPL versão 3 apenas. Quando eu vir a GPL versão 4, se eu quiser, relicenciarei meu programa para permitir o uso sob a versão 4”. Isso funcionará bem se você for o único autor, desde que você ainda esteja vivo, saudável, contatável e prestando atenção naquele momento. Mas o direito de autor dura um tempo incrivelmente longo hoje em dia; na ausência de grandes reformas, os direitos autorais do seu código durarão 70 anos após a sua morte, nos EUA (e 100 anos, no México). Você já fez arranjos para seus herdeiros para considerar a questão de relicenciar seu código para a GPL versão 4 se você não estiver mais para considerar fazê-lo?

Mas problemas acontecerão até mesmo durante sua vida. E se lançarmos a GNU GPL versão 4 daqui a dez anos e, até lá, outros 50 adicionaram ao seu programa, lançando os respectivos códigos adicionados sob a GPL-3.0-apenas porque você o fez? Você poderia aprovar a GPL 4 para o programa que você inicialmente lançou, mas seria um grande trabalho entrar em contato com os 50 desenvolvedores subsequentes naquela época para obter sua permissão para uso da GPL 4 de suas adições.

A maneira de evitar esses problemas é aprovando as futuras versões da GPL no aviso de licença no início. Por favor, coloque em cada arquivo não trivial do lançamento fonte um aviso de licença da foram mostrada no final da versão da GPL que você está usando.

Porque lidamos com a compatibilidade de licença desta forma, quando as pessoas lhe dizem que um programa é lançado “sob GNU GPL versão 2”, eles não deixam o licenciamento do programa claro. Foi lançado apenas em GPL-2.0 ou GPL-2.0-ou-posterior? Você pode mesclar o código com pacotes lançados em GPL-3.0-ou-posterior?

Quando sites como o GitHub convidam os desenvolvedores a escolher “GPL 3” ou “GPL 2” entre outras opções de licença e não levantam o problema de versões futuras, isso leva milhares de desenvolvedores a deixar o licenciamento de seu código pouco claro. Pedir para esses usuários escolherem entre “apenas” e “ou posterior” os levaria a tornar claro o licenciamento de seus códigos. Isso também oferece uma oportunidade para explicar como a última escolha evita incompatibilidades futuras.

Indicadores de licença abreviados como o “GPL-2.0” ou “GPL-3.0” também levará à confusão. Pessoas e organizações que não reconhecem a diferença entre o “2 apenas” e “2 ou posterior” estarão propensos a escrever “GPL-2.0” em ambos os casos, não percebendo que há uma distinção a ser feita.

Portanto, quando você usar indicadores de licença da SPDX, por favor use esses:

Não use apenas os indicadores de licença ambíguos e antigos, que ficarão obsoletos:

Dar aos desenvolvedores a escolha da GPL versão “1 apenas” ou GPL versão “1 ou posterior” parecia obrigatório em 1989, mas criou uma complexidade sem a qual seríamos melhores. Enquanto isso, várias licenças que incondicionalmente dão aos usuários a opção de atualizar para versões posteriores da licença tornaram-se amplamente aceitas. Estas incluem a Licença Pública Mozilla, a Licença Pública Eclipse e todas as licenças da Creative Commons. Cada versão diz que um usuário é livre para usar o trabalho em versões posteriores, se houver, da mesma licença.

Talvez nós devêssemos trocar para essa abordagem em versões futuras da GNU GPL. Mas isso é algo para pensar sobre no futuro.

Agradecemos à SPDX por decidir mudar os identificadores curtos da família de licenças da GNU para tornar “ou posterior” versus “apenas” um escolha explícita. A próxima versão da Lista de Licenças da SPDX para os identificadores de licença usará os identificadores recomendados acima. Os identificadores confusos, como o “GPL-2.0”, ficarão obsoletos. Pedimos às pessoas que as substituam com os novos identificadores inequívocos o mais rápido possível.

Ao usar identificadores que são explícitos quanto a apenas ou qualquer versão posterior, podemos conscientizar a comunidade e incentivar os desenvolvedores a indicar suas decisões com clareza.

Nota do Tradutor:
  1. Em inglês, “apenas” é “only” e “ou posterior” é “ou later”. Então, por exemplo, “GPL-2.0-ou-posterior” seria “GPL-2.0-or-later” em sites sem tradução para português, como é o caso da Lista de Licenças da SPDX.