Guias · 04

Licença dupla (múltipla)

Os dois tipos de licença dupla, em que um mesmo código é oferecido sob duas ou mais licenças, o significado das expressões SPDX OR, AND e WITH, por que um CLA é necessário e os cuidados a tomar.

Última verificação: 2026-09-23

Por que dar várias licenças a um mesmo código

O titular pode licenciar o mesmo código sob várias condições ao mesmo tempo. Quem recebe escolhe uma delas e cumpre as condições correspondentes. Há dois objetivos principais.

  1. Ampliar a compatibilidade — para se encaixar bem em ecossistemas diferentes.
  2. Modelo de negócio — para publicar como open source e, ao mesmo tempo, vender uma licença comercial separada.

Tipo 1: duas permissivas juntas — MIT OR Apache-2.0

É o modelo usado pela linguagem Rust e pela maioria dos crates Rust. O usuário escolhe a que for mais conveniente entre MIT e Apache-2.0.

Como se aproveitam as duas vantagens, o modelo é popular entre autores de bibliotecas. Por convenção, o repositório traz dois arquivos, LICENSE-MIT e LICENSE-APACHE.

Tipo 2: copyleft + comercial — 'GPL, ou pague'

O código é publicado sob GPL ou AGPL, e às empresas que não querem assumir a obrigação de divulgar o código-fonte vende-se uma licença comercial por contrato separado. MySQL (GPL + licença comercial da Oracle) e Qt (LGPL-3.0/GPL + comercial) são exemplos típicos.

Esse modelo só funciona se o titular detiver os direitos de todo o código. Isso porque o titular não tem o direito de vender sob licença comercial o código que contribuidores externos enviaram apenas sob a GPL.

CLA e DCO

Como escrever com expressões SPDX

A relação entre várias licenças é escrita com expressões de licença SPDX.

ExpressãoSignificadoExemplo
A OR BEscolhe-se uma das duas (dupla por escolha)MIT OR Apache-2.0
A AND BÉ preciso cumprir as duas (quando partes diferentes estão misturadas)MIT AND BSD-3-Clause
A WITH exceçãoAcrescenta uma exceção à licençaGPL-2.0-only WITH Linux-syscall-note
ParêntesesDefinem a ordem de combinação(MIT OR Apache-2.0) AND Unicode-3.0

Confundir OR e AND inverte totalmente o sentido. Se o usuário pode escolher, é OR; se é preciso cumprir todas, é AND.

Cuidados

Exemplo de aplicação

Para aplicar uma licença dupla no estilo Rust, baixe no gerador os arquivos MIT e Apache-2.0, salve-os como LICENSE-MIT e LICENSE-APACHE e escreva license = "MIT OR Apache-2.0" nos metadados. No cabeçalho de cada arquivo, use SPDX-License-Identifier: MIT OR Apache-2.0.

Este texto é informação geral e não constitui aconselhamento jurídico. Para decisões importantes, consulte um profissional.

Fontes