Defina primeiro o objetivo
Escolher uma licença não é questão de gosto, mas de saber o que você quer. A maioria fica em algum ponto entre os dois objetivos abaixo.
- Quero que seja usado o máximo possível — se você quer que o código entre sem fricção em produtos de empresas, em outros projetos open source e em apps fechados, uma licença permissiva é vantajosa.
- Quero que as melhorias voltem abertas — se, quando alguém modificar e distribuir seu código, você quer que as modificações também sejam públicas, o copyleft é o adequado.
Permissivas: ampla adoção, pouca fricção
MIT, BSD, ISC e Apache-2.0 exigem pouco mais do que manter os avisos. A maioria dos departamentos jurídicos as coloca em listas de pré-aprovação, então a adoção é rápida. Em compensação, não é possível impedir que alguém modifique o código e o coloque em um produto fechado.
Dentro das permissivas, a escolha gira em torno de dois pontos.
- Patentes: se precisar de concessão explícita de patentes e cláusula de retaliação, Apache-2.0; se não, MIT.
- Compatibilidade com a GPL-2.0: a posição da FSF é que a Apache-2.0 não pode entrar em projetos GPL-2.0-only, então, no ecossistema em torno do kernel Linux, MIT e BSD são mais práticas.
Copyleft: a cadeia da abertura
A GPL impõe a obrigação de divulgação a todo o programa combinado, a LGPL à biblioteca e a MPL a cada arquivo. Para software que roda em servidor, a AGPL preenche a lacuna da GPL. Com copyleft, algumas empresas podem hesitar em usar ou contribuir. A AGPL, em especial, tem o uso restrito por políticas internas de muitas empresas. Isso pode ser o efeito desejado ou um efeito colateral indesejado.
As práticas do ecossistema também importam
Uma licença gera menos fricção quando segue as convenções da comunidade.
| Ecossistema | Licenças comuns | Observação |
|---|---|---|
| JavaScript (npm) | MIT, ISC | Muitos pacotes pequenos; preferência por permissivas curtas |
| Rust (crates.io) | MIT OR Apache-2.0 | O próprio Rust usa esse modelo duplo |
| Python (PyPI) | MIT, BSD-3-Clause, Apache-2.0 | BSD-3 é comum em computação científica |
| Go | BSD-3-Clause, MIT, Apache-2.0 | A biblioteca padrão do Go é BSD-3 |
| Módulos do kernel Linux | GPL-2.0-only | Praticamente obrigatória para combinar com o kernel |
| Ferramentas GNU de desktop | GPL-3.0-or-later | Padrão dos projetos GNU |
| Bibliotecas C/C++ | LGPL, MIT, BSL-1.0 | A forma de vinculação influencia a escolha |
Checklist de decisão
- Verifique as dependências: veja se as licenças das bibliotecas que você já usa limitam as opções. Se você distribui um programa combinado com uma biblioteca GPL, as opções se reduzem a licenças compatíveis com a GPL.
- Verifique o vínculo: código escrito no trabalho geralmente tem a empresa como titular. Veja se a política open source da empresa define uma licença.
- Forma de uso: o efeito do copyleft muda conforme seja software instalável, biblioteca ou serviço.
- Modelo de contribuição: se pretende aceitar contribuições externas, lembre que depois será difícil trocar de licença, porque os direitos autorais de várias pessoas se misturam.
- Modelo de receita: se pretende vender uma licença comercial à parte, considere a licença dupla copyleft + comercial junto com um acordo de licença de contribuidor (CLA).
Resumo em uma frase
- Ser amplamente usado é a prioridade → MIT (Apache-2.0 se patentes preocupam)
- Receber de volta as melhorias da biblioteca, mas deixar livre quem a usa → MPL-2.0 ou LGPL-3.0
- Que todo programa derivado seja aberto → GPL-3.0
- Que até versões modificadas de software de servidor sejam abertas → AGPL-3.0
- Não quero impor nenhuma condição → 0BSD, Unlicense, CC0
Responda a esses critérios em forma de perguntas no assistente de escolha e ele mostrará candidatas e motivos.
Este texto é informação geral e não constitui aconselhamento jurídico. Para decisões importantes, consulte um profissional.
Fontes
- choosealicense.com — https://choosealicense.com/
- FSF, Various Licenses and Comments about Them — https://www.gnu.org/licenses/license-list.html
- Licença do Rust (MIT OR Apache-2.0) — https://github.com/rust-lang/rust