Pergunta

Estou desenvolvendo um aplicativo licenciado pela GPL em Python e preciso saber se a GPL permite que meu programa use plug-ins proprietários.Isso é o que a FSF tem a dizer sobre o assunto:

Se um programa lançado sob a GPL utiliza plug-ins, quais são os requisitos para as licenças de um plug-in?

Depende de como o programa invoca seus plug-ins.Se o programa usar fork e exec para invocar plug-ins, então os plug-ins são programas separados, portanto a licença do programa principal não impõe requisitos para eles.

Se o programa vincula plug-ins dinamicamente, e eles fazem chamadas de função entre si e compartilham estruturas de dados, acreditamos que eles formam um único programa, que deve ser tratado como uma extensão tanto do programa principal quanto dos plug-ins.Isto significa que os plug-ins devem ser lançados sob a GPL ou uma licença de software livre compatível com GPL, e que os termos da GPL devem ser seguidos quando esses plug-ins forem distribuídos.

Se o programa vincula plug-ins dinamicamente, mas a comunicação entre eles se limita a invocar a função ‘principal’ do plug-in com algumas opções e aguardar seu retorno, esse é um caso limítrofe.

A distinção entre fork/exec e ligação dinâmica, além de ser meio artificial, não se aplica às linguagens interpretadas:que tal um plugin Python/Perl/Ruby, que é carregado via import ou execfile?

(editar:Eu entendo por que a distinção entre fork/exec e vinculação dinâmica, mas parece que alguém que queria cumprir a GPL, mas ir contra o "espírito" - eu não - poderia simplesmente usar fork/exec e comunicação entre processos para fazer praticamente qualquer coisa).

A melhor solução seria adicionar uma exceção à minha licença para permitir explicitamente o uso de plugins proprietários, mas não consigo fazer isso porque estou usando Qt/PyQt que é GPL.

Foi útil?

Solução

A distinção entre fork/exec e linkagem dinâmica, além de ser meio artificial,

Não acho que seja nada artificial.Basicamente eles estão apenas fazendo a divisão com base no nível de integração.Se o programa tiver "plugins" que são essencialmente acionados e esquecidos, sem integração no nível da API, é improvável que o trabalho resultante seja considerado um trabalho derivado.De modo geral, um plugin que é meramente bifurcado/executado se enquadraria neste critério, embora possa haver casos em que isso não aconteça.Este caso se aplica especialmente se o código do "plugin" também funcionar independentemente do seu código.

Se, por outro lado, o código for profundamente dependente do trabalho da GPL, como chamadas extensivas de APIs ou integração rígida da estrutura de dados, então é mais provável que as coisas sejam consideradas um trabalho derivado.Ou seja, o "plugin" não pode existir por si só sem o produto GPL, e um produto com este plugin instalado é essencialmente um trabalho derivado do produto GPL.

Então, para deixar um pouco mais claro, os mesmos princípios podem ser aplicados ao seu código interpretado.Se o código interpretado depender muito de suas APIs (ou vice-versa), será considerado um trabalho derivado.Se for apenas um script que é executado sozinho com pouquíssima integração, talvez não.

Isso faz mais sentido?

Outras dicas

@Daniel

A distinção entre fork/exec e ligação dinâmica, além de ser meio artificial, não se aplica às linguagens interpretadas:que tal um plugin Python/Perl/Ruby, que é carregado via import ou execfile?

Não tenho certeza se a distinção é artificial.Após um carregamento dinâmico, o código do plugin compartilha um contexto de execução com o código GPL.Depois de um fork/exec isso não acontece.

De qualquer forma, eu acho que importing faz com que o novo código seja executado no mesmo contexto de execução que o bit GPL, e você deve tratá-lo como o caso de link dinâmico.Não?

Quanta informação você está compartilhando entre os plug-ins e o programa principal?Se você estiver fazendo algo mais do que apenas executá-los e aguardar os resultados (não compartilhando dados entre o programa e o plugin no processo), então você provavelmente poderá se safar com eles sendo proprietários, caso contrário, eles provavelmente precisariam ser GPL ' d.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top