Compatibilidade é 'posso distribuir combinado?'
Duas licenças são compatíveis quando é possível cumprir ao mesmo tempo as condições de ambas ao distribuir como um único programa os códigos sob cada uma delas. Se uma proíbe as condições da outra, não são compatíveis. Por exemplo, a GPL exige 'não impor restrições adicionais', então código sob licença com condições adicionais que a GPL não permite não pode entrar em um programa GPL.
A compatibilidade tem direção
Código permissivo pode entrar em projetos copyleft, mas o contrário não.
- Código MIT → projeto GPL: possível. Mantendo o aviso MIT, toda a obra combinada pode ser distribuída sob a GPL.
- Código GPL → projeto MIT: toda a obra combinada precisa seguir as condições da GPL, então não pode continuar sendo um 'projeto MIT'.
Por isso, uma tabela de compatibilidade deve sempre ser lida como 'qual código → em qual projeto'.
Combinações típicas
Apache-2.0 e GPL
A FSF considera que a Apache-2.0 é compatível com a GPL-3.0, mas não com a GPL-2.0. Isso porque as cláusulas de término de patentes e de indenização da Apache-2.0 são condições adicionais que a GPL-2.0 não tem. A GPL-3.0 foi projetada para resolver esse problema. Assim, um projeto GPL-2.0-or-later pode usar código Apache-2.0 se distribuir a obra combinada sob a GPL-3.0.
MPL-2.0 e licenças GNU
A seção 1.12 da MPL-2.0 define GPL-2.0, LGPL-2.1, AGPL-3.0 e versões posteriores como 'Secondary License', e a seção 3.3 permite distribuir sob a licença GNU um Larger Work que combina código MPL com esses códigos. A exceção é quando o autor original incluiu o Exhibit B ('Incompatible With Secondary Licenses').
Bibliotecas LGPL e apps fechados
Bibliotecas LGPL podem ser usadas em apps fechados. Em troca, o usuário deve poder substituir a biblioteca por uma versão modificada (a vinculação dinâmica é o caminho mais fácil), e é preciso fornecer o código-fonte da parte da biblioteca e o aviso de licença. Se você copiar e misturar código LGPL no código do app, a situação muda: a obra combinada passa a seguir as condições da LGPL/GPL.
GPL-3.0 e AGPL-3.0
As duas licenças permitem expressamente a combinação pela seção 13 de cada uma. Na obra combinada, a parte GPL continua seguindo as condições da GPL, e a parte AGPL, as condições da AGPL, inclusive o fornecimento do código-fonte pela rede.
EPL-2.0 e GPL
A EPL-2.0 não é compatível com a GPL por padrão, mas a combinação se torna possível se o autor original designar a GPL ou outra como Secondary License pelo Exhibit A.
| Código importado | App fechado | Projeto MIT | GPL-2.0-only | GPL-3.0 |
|---|---|---|---|---|
| MIT·BSD·ISC | Sim (aviso) | Sim | Sim | Sim |
| Apache-2.0 | Sim (aviso·NOTICE) | Sim | Não | Sim |
| MPL-2.0 | Condicional (divulgar arquivos) | Condicional | Condicional (Secondary) | Condicional (Secondary) |
| LGPL-3.0 | Condicional (vinculação) | Condicional (vinculação) | Não | Sim |
| GPL-3.0 | Não | Não | Não | Sim |
Até onde vai a 'combinação'
Os problemas de compatibilidade surgem quando os códigos são combinados em um único programa. A FSF considera um único programa quando há vinculação no mesmo executável ou compartilhamento de estruturas de dados internas complexas, e costuma considerar um 'agregado (aggregate)' de programas distintos a comunicação comum entre programas separados, como pipes, sockets e argumentos de linha de comando. Mas esse limite não foi fixado por jurisprudência, e as interpretações divergem. Colocar vários programas juntos em uma distribuição não é, por si só, combinação.
Passo a passo na prática
- Levante a lista de dependências (relatório de licenças do gerenciador de pacotes ou ferramentas de SBOM).
- Organize a licença de cada dependência pelo identificador SPDX.
- Faça uma primeira verificação das combinações com a licença do seu projeto no verificador de compatibilidade.
- Para combinações 'condicionais', confira as condições (aviso, forma de vinculação, existência de Secondary License) no texto das licenças.
- Se houver combinações impossíveis, troque a dependência, separe os programas ou ajuste a sua licença.
Este texto é informação geral e não constitui aconselhamento jurídico. Para decisões importantes, consulte um profissional.
Fontes
- GNU Licenses FAQ (matriz de compatibilidade, MereAggregation) — https://www.gnu.org/licenses/gpl-faq.html
- FSF, Various Licenses and Comments about Them — https://www.gnu.org/licenses/license-list.html
- Apache Software Foundation, GPL Compatibility — https://www.apache.org/licenses/GPL-compatibility.html
- Mozilla, MPL 2.0 FAQ — https://www.mozilla.org/en-US/MPL/2.0/FAQ/
- Eclipse Foundation, EPL 2.0 FAQ — https://www.eclipse.org/legal/epl-2.0/faq/