Introducción a las licencias de código abierto
Las licencias de código abierto son contratos legales que definen cómo se puede usar, modificar y distribuir software de código abierto. Cada proyecto de código abierto incluye una licencia que especifica los derechos concedidos a los usuarios y las obligaciones que deben cumplir. Comprender las licencias es esencial para implementar de forma legal y segura software de código abierto en contextos organizativos.
Qué licencias de código abierto definen
Una licencia de código abierto es un documento legal que acompaña al código fuente y especifica:
Permisos concedidos
Las licencias conceden explícitamente a los usuarios determinados derechos:
- Derechos de uso: Permiso para usar el software para cualquier propósito, incluidas las aplicaciones comerciales.
- Derechos de modificación: Permiso para modificar el código fuente para satisfacer necesidades específicas, corregir errores o agregar características.
- Derechos de distribución: Permiso para compartir el software con otros usuarios, ya sea en forma original o modificada.
- Derechos de licencia secundarios: En algunos casos, permiso para conceder licencias al software a otros en términos diferentes.
Sin una licencia explícita, la ley de copyright prohíbe el uso, modificación o distribución de software. La licencia proporciona permiso legal para estas actividades.
Obligaciones impuestas
Las licencias suelen imponer requisitos a los usuarios:
- Requisitos de atribución: Debe conservar los avisos de copyright y el texto de la licencia en copias distribuidas.
- Divulgación de código fuente: Algunas licencias requieren proporcionar código fuente al distribuir archivos binarios.
- Conservación de licencias: Debe incluir el texto de la licencia con copias distribuidas.
- Licencias de trabajo derivadas: Algunas licencias requieren trabajos derivados para usar la misma licencia (copyleft).
- Concesiones de patentes: Algunas licencias incluyen concesiones explícitas de patentes o cláusulas de terminación defensiva.
Declinación de responsabilidades y garantías
Casi todas las licencias de código abierto renuncian a responsabilidad y garantías:
- Sin garantía: El software se proporciona "tal cual" sin garantías de comerciabilidad, idoneidad para fines o no infracción.
- Sin responsabilidad: Los autores y titulares de derechos de autor no son responsables de los daños derivados del uso del software.
- Riesgo de usuario: Los usuarios aceptan todos los riesgos asociados al uso del software.
Estas declinaciones de responsabilidades protegen a los desarrolladores de código abierto de responsabilidad legal, reconociendo que el software normalmente se proporciona libremente sin compensación.
Definición de código abierto
La Iniciativa de código abierto (OSI) mantiene la definición de código abierto autoritativa que especifica criterios para que las licencias se consideren verdaderamente de código abierto:
Requisitos básicos
Según la definición de código abierto, las licencias de código abierto deben:
Redistribución gratuita:
- Sin restricciones: Las licencias no pueden restringir la venta o entrega del software como parte de una distribución agregada.
- Sin regalías: Las licencias no pueden requerir regalías ni tarifas para dichas ventas.
Inclusión de código fuente:
- Disponibilidad: Los programas distribuidos deben incluir código fuente o proporcionar instrucciones claras para obtenerlo sin costo alguno.
- Formulario preferido: El código fuente debe tener el formato preferido para las modificaciones.
- Sin ofuscación: El código fuente ofuscado deliberadamente no satisface el requisito.
Trabajos derivados:
- Modificaciones permitidas: Las licencias deben permitir modificaciones y trabajos derivados.
- Mismos términos: Las licencias deben permitir la distribución de modificaciones en los mismos términos que el software original.
Integridad del código fuente del autor:
- Archivos de revisión: Las licencias pueden requerir que se distribuyan modificaciones como archivos de revisión junto con el origen original.
- Nombramiento: Las licencias pueden requerir trabajos derivados para usar nombres o números de versión diferentes del original.
Sin discriminación contra personas o grupos:
- Acceso universal: Las licencias no pueden discriminar a ninguna persona o grupo de personas.
- Derechos iguales: Todos deben tener los mismos derechos para usar el software.
Sin discriminación contra campos de esfuerzo:
- Cualquier propósito: Las licencias no pueden restringir el uso del software en campos específicos, como la investigación genética o empresarial.
- Uso comercial: Las licencias no pueden prohibir el uso del software en aplicaciones comerciales.
Distribución de la licencia:
- Aplicación automática: Los derechos adjuntos al programa deben aplicarse a todos los usuarios a los que se redistribuya el programa.
- Sin licencias adicionales: Los usuarios no deben tener que ejecutar licencias adicionales para recibir estos derechos.
La licencia no debe ser específica de un producto:
- Derechos independientes: Los derechos no deben depender del programa que forme parte de una distribución de software determinada.
- Ejecución independiente: Si se extrae de la distribución original, el software debe llevar los mismos derechos.
La licencia no debe restringir otro software:
- Sin contaminación: Las licencias no pueden imponer restricciones en otro software distribuido junto con el software con licencia.
- Agregación permitida: Las licencias no pueden impedir la distribución del software junto con el software bajo licencias diferentes.
La licencia debe ser independiente de la tecnología:
- Sin restricciones de interfaz: Las licencias no pueden requerir tecnologías o estilos de interfaz específicos.
- Método de ejecución independiente: Las licencias no deben importar si el software se ejecuta a través de iconos de clic, líneas de comandos o interfaces web.
¿Por qué son importantes estos requisitos?
La definición de código abierto garantiza que las licencias proporcionen libertad significativa:
Protege la libertad del usuario: Los requisitos impiden que las licencias impongan restricciones ocultas que perjudicarían los principios de código abierto.
Habilita el uso comercial: Al prohibir la discriminación contra campos de esfuerzo, la definición garantiza que las empresas puedan crear productos mediante software de código abierto.
Promueve la compatibilidad: Requisitos que limitan cómo las licencias pueden afectar a otros programas reducen los problemas de compatibilidad.
Impide la fragmentación: Al exigir términos razonables, la definición impide la proliferación de licencias casi abiertas incompatibles.
Categorías de licencias de código abierto
Aunque existen muchas licencias de código abierto diferentes, generalmente se dividen en dos categorías generales:
Licencias permisivas
Las licencias permisivas imponen requisitos mínimos en obras derivadas:
- Características: Permite incorporar código en software propietario sin necesidad de que el software propietario sea de código abierto.
- Requisitos: Normalmente, solo requieren atribución (conservando los avisos de copyright y el texto de la licencia).
- Uso comercial: Totalmente compatible con el desarrollo de software comercial.
- Ejemplos: Licencia MIT, Apache License 2.0, BSD Licenses.
Las licencias permisivas maximizan la libertad de los usuarios, lo que les permite crear productos comerciales de código abierto que incorporan código abierto.
Licencias de Copyleft
Las licencias de Copyleft requieren trabajos derivados para usar la misma licencia:
- Características: Asegúrese de que las versiones modificadas y los trabajos derivados sigan siendo de código abierto.
- Requisitos: Requerir la distribución del código fuente y el uso de la misma licencia para trabajos derivados.
- Uso comercial: Se puede usar en software comercial, pero las obras derivadas deben ser de código abierto.
- Ejemplos: Gnu General Public License (GPL), GNU Lesser General Public License (LGPL), Mozilla Public License (MPL).
Las licencias de Copyleft priorizan la libertad de software sobre la libertad de usuario, lo que garantiza que el software de código abierto sigue siendo de código abierto incluso a medida que evoluciona.
Copyleft débil
Algunas licencias ocupan un terreno medio:
- Se permite el uso de la biblioteca: Permitir la vinculación a bibliotecas en aplicaciones propietarias sin abrir la aplicación.
- Restricciones de modificación: Las modificaciones en la propia biblioteca deben ser de código abierto.
- Ejemplos: GNU LGPL, Mozilla Public License.
Las licencias de copyleft débiles equilibran la promoción del desarrollo de código abierto con la habilitación del uso comercial.
Selección de licencias por proyectos
Los proyectos de código abierto eligen licencias en función de sus objetivos:
Maximización de la adopción: Los proyectos que priorizan la adopción generalizada suelen elegir licencias permisivas que no imponen obligaciones significativas a los usuarios.
Garantizar la libertad: Los proyectos que priorizan la libertad de software eligen licencias copyleft que garantizan que los trabajos derivados sigan siendo de código abierto.
Impedir bifurcaciones propietarias: Las licencias de Copyleft impiden que las empresas creen versiones propietarias del software de código abierto.
Protección de patentes: Proyectos preocupados por las patentes eligen licencias con concesiones explícitas de patentes (como Apache 2.0) que proporcionan derechos de patente más claros.
Compatibilidad: Los proyectos pueden elegir licencias compatibles con otro software con el que dependen o quieren integrarse.
Varias licencias
Algunos proyectos usan varias estrategias de licencias:
Licencias duales: Ofrezca software en licencias comerciales y de código abierto, lo que permite a los usuarios elegir qué términos se aplican.
Apilamiento de licencias: Los distintos componentes de un proyecto pueden tener licencias diferentes.
Evolución de las licencias: A veces, los proyectos cambian las licencias a lo largo del tiempo, aunque esto requiere un contrato de todos los colaboradores.
La paradoja de la transparencia
La transparencia del código fuente crea ventajas y riesgos de seguridad:
Ventajas de seguridad de la transparencia
El código fuente público permite mejoras de seguridad:
- Muchos ojos: Miles de desarrolladores pueden revisar el código para detectar vulnerabilidades, lo que aumenta la probabilidad de detección.
- Divulgación más rápida: Cuando se encuentran vulnerabilidades, se pueden revelar y aplicar revisiones públicamente, informando a todos los usuarios.
- Revisiones de la comunidad: Los desarrolladores conscientes de la seguridad contribuyen a las revisiones para corregir las vulnerabilidades.
- Funcionalidad de auditoría: Las organizaciones pueden auditar las dependencias de código abierto para problemas de seguridad, lo que es imposible con el software de código cerrado.
Riesgos de seguridad de la transparencia
El código fuente público también ayuda a los atacantes:
- Detección de vulnerabilidades: Los actores malintencionados pueden analizar el código fuente para encontrar vulnerabilidades que se puedan aprovechar.
- Desarrollo de vulnerabilidades: Comprender los detalles de implementación ayuda a los atacantes a desarrollar vulnerabilidades de seguridad.
- Identificación de destino: Los atacantes pueden identificar qué aplicaciones usan versiones vulnerables de componentes de código abierto.
- Explotación de día cero: Los atacantes pueden detectar y aprovechar vulnerabilidades antes de que se revelen públicamente.
El saldo
La investigación sugiere transparencia que proporciona ventajas netas de seguridad:
Ley de Linus: "Dada suficiente cantidad de revisores, todos los errores son superficiales". La revisión abierta generalmente detecta y corrige vulnerabilidades más rápido que el desarrollo de código cerrado.
La oscuridad no es seguridad: Mantener el secreto de código fuente no impide vulnerabilidades, solo se ocultan hasta que los atacantes los descubran finalmente.
Divulgación responsable: La comunidad de código abierto ha desarrollado prácticas de divulgación responsables que equilibran la seguridad con transparencia.
Realidad práctica: Las infracciones de seguridad más graves implican software de código cerrado o configuración incorrecta, no vulnerabilidades de código abierto, lo que sugiere que la transparencia no reduce inherentemente la seguridad.
Comprender las licencias de código abierto y sus categorías proporciona la base para evaluar licencias específicas. En la siguiente unidad se exploran las licencias comunes de código abierto en detalle, lo que le ayuda a comprender qué términos las licencias populares imponen y cómo difieren.