Pregunta

Estoy desarrollando una aplicación con licencia GPL en Python y necesito saber si la GPL permite que mi programa utilice complementos propietarios.Esto es lo que la FSF tiene que decir sobre el tema:

Si un programa publicado bajo la GPL utiliza complementos, ¿cuáles son los requisitos para las licencias de un complemento?

Depende de cómo el programa invoque sus complementos.Si el programa utiliza fork y exec para invocar complementos, entonces los complementos son programas separados, por lo que la licencia para el programa principal no los exige.

Si el programa vincula dinámicamente complementos, realizan llamadas a funciones entre sí y comparten estructuras de datos, creemos que forman un solo programa, que debe tratarse como una extensión tanto del programa principal como de los complementos.Esto significa que los complementos deben publicarse bajo la GPL o una licencia de software libre compatible con la GPL, y que se deben seguir los términos de la GPL cuando se distribuyan esos complementos.

Si el programa vincula dinámicamente complementos, pero la comunicación entre ellos se limita a invocar la función "principal" del complemento con algunas opciones y esperar a que regrese, ese es un caso límite.

La distinción entre fork/exec y enlace dinámico, además de ser algo artificial, no se aplica a los lenguajes interpretados:¿Qué pasa con un complemento Python/Perl/Ruby, que se carga a través de import o execfile?

(editar:Entiendo por qué la distinción entre fork/exec y vinculación dinámica, pero parece que alguien que quisiera cumplir con la GPL pero vaya en contra del "espíritu" (yo no lo hago) podría simplemente usar fork/exec y la comunicación entre procesos para hacer prácticamente cualquier cosa).

La mejor solución sería agregar una excepción a mi licencia para permitir explícitamente el uso de complementos propietarios, pero no puedo hacerlo porque estoy usando cuarto/PyQt que es GPL.

¿Fue útil?

Solución

La distinción entre fork/exec y enlace dinámico, además de ser algo artificial,

No creo que sea artificial en absoluto.Básicamente sólo están haciendo la división basándose en el nivel de integración.Si el programa tiene "complementos" que esencialmente se activan y olvidan sin integración a nivel de API, entonces es poco probable que el trabajo resultante se considere un trabajo derivado.En términos generales, un complemento que simplemente se bifurca o ejecuta se ajustaría a este criterio, aunque puede haber casos en los que no sea así.Este caso se aplica especialmente si el código del "complemento" también funciona independientemente de su código.

Si, por otro lado, el código depende profundamente del trabajo bajo GPL, como llamadas extensivas a API o una estrecha integración de la estructura de datos, entonces es más probable que se considere un trabajo derivado.Es decir, el "complemento" no puede existir por sí solo sin el producto GPL, y un producto con este complemento instalado es esencialmente un trabajo derivado del producto GPL.

Entonces, para que quede un poco más claro, los mismos principios podrían aplicarse a su código interpretado.Si el código interpretado depende en gran medida de sus API (o viceversa), se considerará un trabajo derivado.Si es sólo un script que se ejecuta por sí solo con muy poca integración, entonces puede que no sea así.

¿Eso tiene más sentido?

Otros consejos

@Daniel

La distinción entre fork/exec y enlace dinámico, además de ser algo artificial, no se aplica a los lenguajes interpretados:¿Qué pasa con un complemento Python/Perl/Ruby, que se carga mediante importación o archivo ejecutivo?

No estoy seguro de que la distinción es artificial.Después de una carga dinámica, el código del complemento comparte un contexto de ejecución con el código GPL.Después de una bifurcación/exec no es así.

En cualquier caso, supongo que importing hace que el nuevo código se ejecute en el mismo contexto de ejecución que el bit GPL, y debes tratarlo como el caso del enlace dinámico.¿No?

¿Cuánta información compartes entre los complementos y el programa principal?Si está haciendo algo más que simplemente ejecutarlos y esperar los resultados (no compartir datos entre el programa y el complemento en el proceso), lo más probable es que pueda salirse con la suya siendo propietarios; de lo contrario, probablemente necesitarían ser GPL. d.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top