¿Qué significa "GPL con excepción classpath" en la práctica?

70

Oracle parece licenciar todo su código fuente abierto relacionado con Java bajo la GPL con una excepción de classpath . Por lo que entiendo, esto parece permitir combinar estas bibliotecas con su propio código en productos que no tienen que estar cubiertos por la GPL.

  1. ¿Como funciona esto?
  2. ¿Cuáles son ejemplos de cómo puedo y no puedo usar estas clases?
  3. ¿Por qué se utilizó esta nueva licencia en lugar de la LGPL, que parece permitir prácticamente las mismas cosas, pero está mejor establecida y se entiende?
  4. ¿Cuáles son las diferencias con la LGPL?
Thilo
fuente
1
Encontré esto en wikipedia: en.wikipedia.org/wiki/… que aclara un poco las cosas, pero todavía no entiendo por qué alguien usaría esto sobre LGPL. ¡Buena pregunta!
1
Que las páginas de Wikipedia no mencionan cosas como "el usuario debe poder cambiar la biblioteca con su propia versión", que son disposiciones de la LGPL. Entonces, ¿tal vez la Excepción GPL + no requiere eso?
Thilo
1
Leyendo, ese parece ser el caso: "LGPL formula más requisitos para la excepción de enlace: debe permitir la modificación de las partes de la Biblioteca que usa y la ingeniería inversa (de su programa y la biblioteca) para depurar tales modificaciones"
Thilo
En este caso, ¿qué no puedo hacer con esta licencia? ¿Puedo copiar el código con licencia (elegir + elegir clases) en mi propia base de código (sin modificar, por supuesto)? ¿Puedo usar herramientas de compilación automatizadas para modificar el binario resultante? ¿Ofuscadores, minimizadores, strippers de código muerto?
Thilo
Puede copiar el código de esto y usarlo en su propio código SOLO si su propio código también se publica bajo la licencia "GPL con excepción de classpath" . Si su código es propietario, o está bajo la mayoría de las otras licencias de código abierto como MIT, entonces no tiene permitido usarlo.
Abhi Beckert

Respuestas:

69

En primer lugar, no soy un abogado. Pero he estudiado muchas licencias y entiendo los problemas relacionados con ellas.

Segundo, sé que esta es una vieja pregunta, pero creo que aún es un punto de confusión y preocupación. Si NO ES un punto de preocupación, debería serlo. Elegir una licencia es un gran problema que no puede cambiar trivialmente en el futuro, especialmente si hay varios contribuyentes involucrados.

(L) GPL fue escrito con C / C ++ en mente, desafortunadamente. Habla de "Código fuente", "Código de objeto", "Enlace dinámico", "Enlace estático", "Compiladores" e "Intérprete de código de objeto". Por lo tanto, traducir esto para otros lenguajes que no siguen las mismas técnicas de compilación (como el código de bytes de Java, la compilación justo a tiempo de Python o la naturaleza interpretada de Javascript) requiere algunas conjeturas y suposiciones. Cuando habla de la ley, es decir, piensa en casos judiciales eventuales en los que dos partes están discutiendo, no tener una distinción clara es MALO.

Una pieza de código estándar con licencia GPL tiene una intención bastante sencilla. Se espera que cualquiera que use ese código publique su código a todos los usuarios cuando lo distribuyan o lo vendan. Ese es el virus GPL que Richard Stallman quería crear y lo hizo de manera clara y limpia.

La LGPL fue originalmente un intento de permitir una "biblioteca" que no sería viral. Pero todavía querían que el usuario final pudiera reemplazar la biblioteca por su cuenta, de ahí la distinción entre enlaces "estáticos" y "dinámicos": el usuario podría cambiar a una biblioteca vinculada dinámicamente diferente, por lo que no necesitaría tener licencia como GPL. Y un enlace estático requería que el usuario fuera GPL. La licencia en realidad habla de "archivos de encabezado", que están claros en C / C ++ pero obviamente no están claros cuando estás en los mundos de Java, Python, Javascript, etc. Entonces, la L ("biblioteca") de las cosas LGPL está turbia, en el mejor de los casos.

Esto llega al quid de la cuestión. Todo lo que no está claro es MALO en el mundo de las leyes. Si estoy buscando construir algo usando el componente GPL o LGPL, quiero estar seguro de cuál es mi posición legal en el futuro si llego a la corte. Pero a partir de hoy, no estoy seguro porque realmente no ha habido buenos casos judiciales que establezcan precedentes legales, solo argumentos intelectuales en foros como este.

Aquí es donde la excepción Classpath es invaluable. Establece claramente que el código bajo la licencia es (L) GPL, pero cualquier cosa que use ese código puede seguir cualquier licencia que desee. Sin dudas, quejas o peros. Si cambia el código central (por ejemplo, corrigiendo errores), aún tiene que liberar esos cambios como parte de la GPL. Pero usar NO te infecta.

Desde una perspectiva comercial, entiendo por qué algunos no quieren tocar el código GPL con un poste de 10 '. La situación legal no está clara y el negocio podría verse afectado una década más adelante cuando finalmente se establezcan los precedentes legales. O podrían estar atrapados en los tribunales durante años luchando por establecer el precedente legal. Independientemente de que simplemente no quieren arriesgar el costo de esa batalla. Agregar la cláusula Classpath Exception elimina las preguntas legales y evita cualquier caso judicial (grave) potencial.

Entonces, para mí, la excepción Classpath es muy diferente a la LGPL. Es una forma legalmente limpia de trazar una línea brillante que permite el uso sin código GPL del código fuente o bibliotecas GPL o LGPL.

Steve
fuente
21
IANAL, pero soy uno de los creadores de la excepción Classpath, y esta es la respuesta correcta. La excepción se creó para admitir casos de uso integrados compilados por AOT en los que los desarrolladores estarían vinculando estáticamente binarios (con gcj en nuestro caso). Necesitábamos algo como la licencia libgcc, así que escribí la primera versión de la excepción Classpath basada en eso. Desde entonces ha madurado, pero el espíritu es el mismo.
Anthony Green
6

GPL con excepción classpath se comporta como LGPL para la mayoría de los usos.

Significa que debe poder enviar la fuente de la biblioteca a pedido. No significa que deba poder enviar su propia fuente. Sucede que no tiene que enviar una forma de reemplazar la biblioteca si está enlazada estáticamente con ella, pero no puede usar una clave pública para evitar el reemplazo.

Joshua
fuente
-3

Parece que las licencias de estilo "GPL con excepción classpath" pueden ser anteriores a LGPL.

Quizás la única razón por la que alguien todavía lo usa, es porque el código GPL no se puede migrar a código LGPL sin el permiso por escrito de todos los que alguna vez contribuyeron con el código.

Abhi Beckert
fuente
77
La primera versión de LGPL se lanzó en 1991, por lo que es anterior a Java. en.wikipedia.org/wiki/LGPL
Thilo
Es anterior a Java, pero ¿es anterior a todo el código dentro de Java? Quizás la primera versión de Java contenía código de algún proyecto anterior "GPL con classpath".