Ligue para o software GPL a partir de software não GPL

30

Posso (legalmente) usar um programa lançado sob a GPL de outro programa que estou escrevendo e não precisar respeitar a GPL (para o programa que estou escrevendo)?

Por exemplo, eu tenho uma GUI que usa um programa (que está sob a GPL), posso ocultar o código na GUI e até vendê-lo?

Valmond
fonte

Respostas:

30

Você pode usar um programa GPLed a partir de seu próprio programa sem que seu programa seja afetado pela GPL, mas não pode vincular o código GPLed a seu próprio programa sem que seu programa fique sujeito aos termos da GPL.

No exemplo fornecido na pergunta, no qual você escreveu um wrapper de GUI em torno de um programa de linha de comando existente, sua GUI não está vinculada aos termos da GPL, desde que seja um programa separado que execute o programa GPL em um separar o processo e se comunicar com ele somente através da (s) interface (s) existente (s) - por exemplo, pela linha de comando e / ou via stdin / stdout.

Alguns bits relevantes da FAQ da GPL :

Onde está a linha entre dois programas separados e um programa com duas partes? Esta é uma questão legal que, em última instância, os juízes decidirão. Acreditamos que um critério adequado depende tanto do mecanismo de comunicação (exec, pipes, rpc, chamadas de função em um espaço de endereço compartilhado, etc.) quanto da semântica da comunicação (que tipos de informações são trocadas).

Se os módulos estiverem incluídos no mesmo arquivo executável, eles definitivamente serão combinados em um programa. Se os módulos são projetados para serem executados vinculados em um espaço de endereço compartilhado, isso quase certamente significa combiná-los em um programa.

Por outro lado, pipes, soquetes e argumentos da linha de comando são mecanismos de comunicação normalmente usados ​​entre dois programas separados. Portanto, quando eles são usados ​​para comunicação, os módulos normalmente são programas separados. Mas se a semântica da comunicação for íntima o suficiente, trocando estruturas de dados internas complexas, isso também poderia ser uma base para considerar as duas partes combinadas em um programa maior.


Posso lançar um programa não-livre projetado para carregar um plug-in coberto pela GPL?

Depende de como o programa chama seus plug-ins. Por exemplo, se o programa usa apenas fork e exec simples para chamar e se comunicar com plug-ins, então os plug-ins são programas separados, portanto, a licença do plug-in não requer requisitos sobre o programa principal.

Se o programa vincular dinamicamente plug-ins e eles fizerem chamadas de função entre si e compartilharem estruturas de dados, acreditamos que eles formarão um único programa, que deve ser tratado como uma extensão do programa principal e dos plug-ins. Para usar os plug-ins cobertos pela GPL, o programa principal deve ser lançado sob a GPL ou uma licença de software livre compatível com GPL, e que os termos da GPL devem ser seguidos quando o programa principal for distribuído para uso com esses plug-ins.

Se o programa vincular dinamicamente plug-ins, mas a comunicação entre eles se limitar a chamar a função 'principal' do plug-in com algumas opções e aguardar o retorno, esse é um caso limítrofe.

Observe que a GPL se aplica integralmente ao programa de linha de comando subjacente em qualquer caso - se você o distribuir (em vez de os usuários obtê-lo de outra fonte), você é responsável por fornecer uma cópia da GPL aos usuários, tornando-a deixe claro para eles que o programa de linha de comando está sob a GPL (mesmo que o wrapper da GUI não esteja) e disponibilize o código-fonte do programa de linha de comando a pedido. No FAQ da GPL novamente:

Se as pessoas distribuírem software coberto pela GPL, chamando-o de "parte de" um sistema que os usuários sabem ser parcialmente proprietário, os usuários podem ter dúvidas sobre seus direitos em relação ao software coberto pela GPL. Mas se eles souberem que receberam um programa gratuito e outro programa lado a lado, seus direitos serão claros.

Isenção de responsabilidade padrão: não sou advogado e, mesmo sendo advogado, não sou seu advogado. Se você precisar de uma resposta definitiva, consulte um profissional jurídico apropriado, licenciado para atuar em sua jurisdição.

Dave Sherohman
fonte
11
Deve-se notar que a posição da FSF na vinculação é a posição minoritária. (E, IMO, não faz qualquer sentido, um processo automatizado não pode criar um novo trabalho..)
David Schwartz
11
No entanto, a FSF escreveu a GPL. Isso torna a opinião deles muito mais relevante. "Quando dizemos X, queremos dizer {...}" geralmente é aceito em tribunal. "Quando você disse X, você quis dizer {...}", não.
MSalters
O que significa "usa apenas fork e exec simples para invocar" - alguém pode esclarecer isso?
quer
Então a GPL pode ser facilmente ignorada simplesmente escrevendo um wrapper para executar o código GPL em um processo separado? Isso parece tornar a GPL irrelevante e impossível de aplicar. E se eu escrever minha própria biblioteca e vincular a ela junto com uma biblioteca GPLed. Minha biblioteca autônoma separada também fica com GPL? E se eu vincular à biblioteca de outra pessoa enquanto estiver usando o código GPL? A biblioteca deles se torna GPL? Se você responder não a alguma dessas perguntas, ele abrirá uma brecha enorme para ignorar facilmente a GPL. Se você responder sim, estará violando a lei de direitos autorais.
Cerin
@Cerin - A GPL realmente se aplica apenas ao código que você distribui. Portanto, enquanto você pode escrever um programa vinculado a licenças GPL e não compatíveis com GPL, não é possível distribuir esse programa a terceiros, pois ele executaria código GPL e não compatível com GPL no mesmo processo. ("Usar sem redistribuição" é visto por muitos como uma brecha na GPL, pois significa que serviços da Web e similares podem contornar a GPL inteiramente porque eles próprios executam o software em vez de dar aos usuários a execução. O GNU AGPL é um tente resolver esse problema.)
Dave Sherohman
0

Depende do que você quer dizer com usá-lo?

  • compile no seu código
  • use uma biblioteca compartilhada
  • executar um executável

Também depende exatamente de qual versão / variante da GPL o outro código está.

  • GPL
  • LGPL
  • AGPL
  • Provavelmente outros

Isenção de responsabilidade legal: não sou advogado.

Martin York
fonte
-2

Isso depende de como exatamente o seu programa está "usando" o programa GPL. O FAQ da GPL tem uma explicação bastante longa , mas ainda deixa muito em aberto para a interpretação:

Você não pode incorporar software coberto pela GPL em um sistema proprietário. (...) No entanto, em muitos casos, você pode distribuir o software coberto pela GPL junto ao seu sistema proprietário. Para fazer isso validamente, você deve se certificar de que os programas gratuitos e não-livres se comuniquem ao alcance de todos, que não sejam combinados de maneira a torná-los efetivamente um único programa. (...) se os dois programas forem combinados para que se tornem efetivamente duas partes de um programa, você não poderá tratá-los como dois programas separados. Então a GPL tem que cobrir a coisa toda.Se os dois programas permanecerem bem separados, como o compilador e o kernel, ou como um editor e um shell, você poderá tratá-los como dois programas separados - mas precisará fazê-lo corretamente. A questão é simplesmente uma das formas: como você descreve o que está fazendo. Por que nos preocupamos com isso? Porque queremos garantir que os usuários entendam claramente o status livre do software coberto pela GPL na coleção.

Eu acho que no seu exemplo de uma GUI que existe principalmente para chamar um programa GPL de linha de comando, os dois formam claramente um único programa, então você teria que liberar seu código sob a GPL.

Michael Borgwardt
fonte
Não, eles "não formam claramente um único programa". Enquanto o programa de linha de comando subjacente permanecer capaz de funcionar na ausência da sobreposição da GUI, eles serão combinados por "mera agregação" e não serão "efetivamente um único programa". Observe os exemplos no texto que você citou - um compilador fica em cima do kernel e não será executado sem ele, mas o kernel será executado felizmente na ausência do compilador.
Dave Sherohman
11
@Dave: se o programa de linha de comando subjacente permanece capaz de funcionar na ausência da sobreposição da GUI pode ser relevante se o status da licença do programa de linha de comando estiver em questão - mas a pergunta é sobre a GUI, que é completamente inútil sem o programa de linha de comando e, portanto, é verdade, sem sombra de dúvida, que eles formam um único programa.
Michael Borgwardt
Vamos substituir um dos exemplos da seção que você citou e ver como isso acontece. "... mas a questão é sobre o compilador, que é completamente inútil sem o kernel, e, portanto, é verdade, sem sombra de dúvida, que eles formam um único programa." Exceto, é claro, que o texto que você citou declara explicitamente "você pode tratá-los como dois programas separados". Se fosse simplesmente uma questão de dependência, você nunca poderia executar um software fechado no Linux, porque esse software seria "completamente inútil" sem o kernel (GPLed).
Dave Sherohman
@Dave: Exceto, é claro, que compiladores e todos os tipos de software fechado NÃO são inúteis sem o kernel do Linux, pois eles podem e são executados em qualquer coisa que implemente os padrões da biblioteca POSIX e / ou C e fornecem funcionalidade significativa por conta própria . Assunto completamente diferente do que um wrapper da GUI que existe apenas para conduzir um programa de linha de comando específico.
Michael Borgwardt
3
Você está errado na parte da GUI, no entanto. Essa mesma interface gráfica irá trabalhar com outros programas CLI, em particular versões posteriores do original. Isso é relevante nesse contexto, porque significa que os direitos originais da GPL no programa subjacente ainda podem ser exercidos. Se eu recompilar 10% mais rápido, a CLI não me impedirá.
MSalters 27/09/11
-3

Não.

O código GPL pode ser usado apenas por outro código GPL.

Citando a primeira linha do artigo da GPL da wikipedia :

A GPL é a primeira licença copyleft para uso geral, o que significa que trabalhos derivados podem ser distribuídos apenas sob os mesmos termos de licença.

Além disso, a GPL tem várias páginas e existe em várias versões.


Aviso, discurso pessoal à frente!

Pessoalmente, não gosto muito da licença GPL devido à sua natureza muito restritiva e semelhante a vírus. Eles o chamam de "grátis", mas, na verdade, é exatamente o contrário, o código GPL não pode ser usado por nada, exceto outro código GPL. Forçando assim outros projetos à GPL ou sendo forçado a reescrever bibliotecas inteiras, independentemente de seu projeto atual ser de código aberto ou não. Havia grandes projetos de código aberto, como o freeBSD, por exemplo, que foram forçados a reescrever centenas de milhares de linhas de código linux porque sua licença era incompatível, era muito "livre" no sentido de "fazer o que você quiser", o que obviamente é não é compatível com a GPL.

Se você deseja uma licença verdadeiramente "gratuita" no sentido de "faça o que quiser", recomendo a licença BSD ou MIT ... na verdade, a maioria das outras licenças está OK. É apenas a GPL que é realmente problemática, porque quão restritiva é e como força outras pessoas a entrar nela. Por fim, é excessivamente complicado.

Ah, sim, também é uma passagem só de ida. A GPL pode usar código / bibliotecas licenciadas na maioria das licenças, mas essas bibliotecas / códigos não podem usar o código GPL por sua vez.

dagnelies
fonte
Diz "trabalhos derivados". Isso inclui software que se vincula dinamicamente ao código GPL?
rightfold
@ WTP: definitivamente sim - o ponto principal da LGPL é ter uma licença diferente que permita isso.
Michael Borgwardt
3
Um shell da GUI envolvido em um programa de linha de comando não é um "trabalho derivado", conforme definido para fins de direitos autorais.
Dave Sherohman
11
@ Dave Sherohman - isso não parece claro. A resposta aceita a esta pergunta diz: "IMHO, em espírito, um invólucro puro que apenas expõe a funcionalidade de um programa GPL deve ser GPL". Não é apenas o aspecto técnico de como eles se comunicam, é a intenção. Por exemplo, traduzir um livro está criando um trabalho derivado. Convertê-lo para o formato Kindle seria um trabalho derivado. Eu pude ver um juiz determinando que a adição de uma GUI está criando um trabalho derivado. Cuidado.
Scott Whitlock