Guías · 04

Licencia dual (múltiple)

Explicamos los dos tipos de licencia dual (ofrecer dos o más licencias para un mismo código), el significado de las expresiones SPDX OR, AND y WITH, por qué hace falta un CLA y qué hay que tener en cuenta.

Última revisión: 2026-09-23

Por qué dar varias licencias a un mismo código

El titular del copyright puede licenciar el mismo código bajo varias condiciones a la vez. Quien lo recibe solo tiene que elegir una y cumplir sus condiciones. Hay dos grandes motivos para hacerlo.

  1. Ampliar la compatibilidad — para encajar bien con ecosistemas distintos.
  2. Modelo de negocio — para publicar como código abierto y vender a la vez una licencia comercial aparte.

Tipo 1: dos licencias permisivas juntas — MIT OR Apache-2.0

Es lo que hacen el lenguaje Rust y la mayoría de los crates de Rust. El usuario elige la que le convenga entre MIT y Apache-2.0.

Se obtienen las ventajas de ambas, por lo que es muy popular entre autores de bibliotecas. Por convención, el repositorio incluye dos archivos: LICENSE-MIT y LICENSE-APACHE.

Tipo 2: copyleft + comercial — 'o GPL, o pagas'

Se publica el código bajo GPL o AGPL y, a las empresas que no quieren asumir la obligación de publicar su código, se les vende una licencia comercial mediante un contrato aparte. MySQL (GPL + licencia comercial de Oracle) y Qt (LGPL-3.0/GPL + comercial) son casos representativos.

Este modelo solo funciona si el titular tiene los derechos sobre todo el código. El titular no tiene derecho a vender con licencia comercial el código que contribuidores externos aportaron solo bajo GPL.

CLA y DCO

Cómo escribirlo con expresiones SPDX

La relación entre varias licencias se escribe con expresiones de licencia SPDX.

ExpresiónSignificadoEjemplo
A OR BSe elige una de las dos (licencia dual a elegir)MIT OR Apache-2.0
A AND BHay que cumplir ambas (se mezclan partes distintas)MIT AND BSD-3-Clause
A WITH excepciónAñade una excepción a la licenciaGPL-2.0-only WITH Linux-syscall-note
ParéntesisFijan el orden de agrupación(MIT OR Apache-2.0) AND Unicode-3.0

Si confundes OR y AND, el significado se invierte. Si el usuario puede elegir, es OR; si hay que cumplir todas, AND.

Qué tener en cuenta

Ejemplo de aplicación

Para aplicar una licencia dual al estilo Rust, descarga en el generador los archivos MIT y Apache-2.0, guárdalos como LICENSE-MIT y LICENSE-APACHE y pon license = "MIT OR Apache-2.0" en los metadatos. En la cabecera de cada archivo escribe SPDX-License-Identifier: MIT OR Apache-2.0.

Este artículo es información general y no constituye asesoramiento jurídico. Para decisiones importantes, consulta con un profesional.

Fuentes