ffmpeg - siguientes - ¿Puedo llamar dinámicamente un software LGPL/GPL en mi aplicación de código cerrado?
software libre (5)
Corrígeme si me equivoco, pero creo que la situación que describes es así:
- Usted tiene un programa GPL o LGPL, construido como un archivo ejecutable por separado, sin modificaciones hechas por usted.
- Está construyendo una aplicación de código cerrado que necesita la funcionalidad del programa GPL o LGPL.
- En su programa, utiliza las funciones de su framework o sistema operativo para ejecutar otro ejecutable por separado.
- Está utilizando la salida de ese ejecutable en su programa.
Si ese es el caso, en realidad no está enlazando al programa licenciado por GPL o LGPL. Por lo tanto, no está sujeto a los términos de licencia de ese programa. Esta es una forma bastante común, aunque complicada, de evitar problemas de licencia con dichos ejecutables.
Sin embargo, viola el espíritu de la GPL y la LGPL.
Quiero usar una herramienta ( ffmpeg ) que está bajo la Licencia Pública General Reducida de GNU, versión 2.1 Licencia Pública General de GNU (GPL) versión 2 para algunos componentes.
Para hacerlo, solo lo llamo en mi software como tal:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo("lgplSoftware.exe", myParams);
p.Start();
No lo cambio, solo uso una versión construida del software para Windows.
Wikipedia dice:
Una disputa clave relacionada con la GPL es si el software no GPL se puede vincular dinámicamente a bibliotecas GPL. La GPL es clara al requerir que todas las obras derivadas de código bajo la GPL deban estar bajo la GPL. Si bien se entiende que la vinculación estática produce trabajos derivados, no está claro si un ejecutable que se vincule dinámicamente con un código GPL debe considerarse un trabajo derivado (ver Copyleft débil). La comunidad de software libre / de código abierto está dividida en este tema. El FSF afirma que tal ejecutable es de hecho un trabajo derivado si el código ejecutable y GPL "hace llamadas de función entre sí y comparten estructuras de datos", con algunos otros acordando (por ejemplo, Jerry Epplin), mientras que algunos (por ejemplo, Linus Torvalds) acuerdan La vinculación dinámica puede crear trabajos derivados pero no estar de acuerdo con las circunstancias.
Estoy realmente confundido por todas estas cosas legales. También habría hecho mi proyecto LGPL y publicado la fuente, pero esto no depende de mí.
Entonces la pregunta es: ¿puedo usarlo como lo estoy haciendo en este momento o seré ejecutado por un ejército de abogados?
En general, es una de las pocas cosas que considero desagradables para la GPL. Lo que lo empeora es lo contagioso que puede ser. Aún así, hay una forma de evitarlo.
Primero, comienza definiendo tu propia interfaz para enviar datos. Esto se usará entre su aplicación y una biblioteca separada que creará. No reutilice nada del código GPL porque eso estaría bajo la licencia GPL. Sin embargo, no hay nada de malo en usar una estructura similar . Como esta interfaz es su propia creación, estaría bajo su propia licencia. Eres libre de usarlo como quieras.
A continuación, cree una biblioteca contenedora alrededor del código GPL que también implementará su interfaz personal. Esta biblioteca estaría bajo la licencia GPL y, por lo tanto, se contaminaría. Sin embargo, aunque exponga su interfaz al mundo exterior, su interfaz no puede contaminarse. No se deriva ni lo que sea. Es 100% tu propio código y puedes usar la misma interfaz para conectarte a una biblioteca diferente.
Esta biblioteca contenedora servirá como un buffer de protección entre su propio código de propiedad y el código GPL. Su propio código nunca sería GPL ya que no está usando ningún código GPL directamente. La interfaz también servirá como una solución para cambiar el código GPL por una solución diferente.
Es un truco para evitar la restricción de la licencia, pero como la interfaz es suya y solo suya, la GPL será bloqueada por ella. El código GPL y el código no GPL serían dos programas diferentes si se usan de esta manera.
Aún así, tenga en cuenta que es posible que necesite algunos consejos legales aquí. No hay muchos abogados aquí en SO. Pero es un truco que puede evitar esta licencia GPL.
No soy abogado, y esto no puede ser un consejo legal. Con eso detrás de nosotros, en mi humilde opinión, si el código con el que estás enlazando es LGPL, estás en el claro. Si se trata de GPL técnicamente es un problema.
La diferencia entre GPL y LGPL es que la vinculación con el código LGPL no genera la necesidad de compartir.
Puede hacerlo con el software LGPL, pero no puede hacerlo con el software licenciado GPL.
La sección 6 de LGPL 2.1 sobre obras combinadas dice cómo puede usar la biblioteca en su programa de código cerrado. Puede llamar a un programa con licencia LGPL como lo hace, e incluso puede vincularlo de forma dinámica.
La GPL no tiene tal excepción, cuando usa un programa / biblioteca GPL como parte de su programa, para que se perciba como una parte integral de su programa, entonces tiene que licenciar todo bajo una licencia compatible con GPL. Vea esta entrada GPL-FAQ .
Linking tiene un significado específico en la programación de computadoras. No está conectando ningún código GPL o LGPL, solo está generando un binario GLPL o LGPL, y GPL y LGPL lo permiten. Sus usuarios son libres de usar ese binario para los fines previstos por los autores y pueden descargarlo y compilarlo ellos mismos, de modo que se conservan todas sus libertades y no infringe la GPL o la LGPL. (De esto es de lo que hablan las preguntas frecuentes de GPL al "comunicarse a distancia"). Esto ni siquiera viola el espíritu de LGPL y GPL; toleran la existencia de software propietario y suponen que en algún momento los programas propietarios generarán programas gratuitos y viceversa. (De lo contrario, no podríamos ejecutar ningún software GPL en Windows).
La GPL requiere que los programas patentados y GPL "no se combinen de una manera que los haga efectivamente un solo programa". Si su programa depende por completo de los archivos ejecutables de GPL, de modo que no sería utilizable sin ellos, a pesar de que es un archivo binario independiente, eso podría colocarlo en un terreno más inestable. (Y es probable que sea hora de consultar a su abogado para averiguarlo con seguridad).
Además, aunque no haya preguntado específicamente sobre esto, tenga en cuenta que la distribución de software GPL o LGPL con su software significa que debe incluir una copia de la licencia con su instalador y también distribuir la fuente código. Por ejemplo, si empaqueta su aplicación en un instalador e incluye copias de ejecutables GPL o LGPL en el instalador, entonces está distribuyendo código LGPL o GPL y debe hacer copias del código fuente disponible. (ya sea en línea, por correo o en CD, dependiendo de cómo distribuyas tu aplicación). Incluir un enlace al proyecto ascendente no es suficiente (al menos para la versión 2 de la GPL). Lea la GPL y la LGPL para obtener detalles exactos.