Existe uma brecha na GPL que permite que o software proprietário seja vinculado às bibliotecas da GPL?


15

Vamos examinar um cenário hipotético:

A empresa X grava um programa proprietário (A) que se vincula dinamicamente a uma biblioteca proprietária (B). A empresa Y deseja usar uma biblioteca de substituição (C) licenciada sob a GPL e, portanto, grava uma biblioteca de empacotamento (D) que se vincula dinamicamente a A e C e converte as chamadas de API usadas por A nas chamadas de API usadas por C.

Como D se destina a ser usado com C e usa as chamadas de API de C, é um trabalho derivado de C e, portanto, deve ser distribuído sob os termos da GPL *. Como resultado, o trabalho combinado de A e D também deve ser distribuído sob os termos da GPL, o que é impossível, uma vez que a empresa Y não possui o código fonte de A. Dito isto, desde que a empresa Y distribua D por si mesma , não há problema. No entanto, independentemente das ações da Empresa Y, a Empresa X não viola a GPL distribuindo A, mesmo sem B. A mera existência de D não significa que A é subitamente um trabalho derivado de C (a D) que deve ser licenciado sob a GPL também.

Agora, essa é a brecha: não há nada que impeça a Empresa X de escrever sua própria versão de D, distribuí-la separadamente de A e dizer aos usuários finais para usar D em vez de B ao executar A. Parece que uma empresa é capaz de projetar um programa proprietário para usar uma biblioteca GPL sem violar a GPL, desde que um módulo wrapper seja usado para isolar o programa proprietário da biblioteca GPL e esse módulo seja distribuído separadamente.

Estou correto no meu raciocínio? Isso é realmente uma brecha na GPL?

* D também é um trabalho derivado de A, mas, para os propósitos deste cenário, a Empresa X autorizou explicitamente a criação de D e permitiu que ela fosse licenciada sob a GPL.


1
Resposta curta: não.
Whatsisname

2
Sou quase um advogado, mas entendo que vincular dinamicamente a uma biblioteca não faz do seu código um trabalho derivado. Caso contrário, seria impossível distribuir qualquer coisa sob, digamos, uma licença BSD que se vincule dinamicamente a algo que possa estar sob uma licença GPL. A vinculação estática é uma história diferente, e é claro que você não pode redistribuir a própria biblioteca vinculada dinamicamente sob qualquer coisa, menos a GPL.
Tdammers

4
@ tdammers: A ligação AFAIK dinamicamente faz do código um trabalho derivado, e você está correto, provavelmente não é possível distribuir software sob licença BSD quando ele usa bibliotecas GPL. É por isso que muitos autores de bibliotecas de código aberto oferecem suas bibliotecas sob LGPL em vez de GPL.
Doc Brown

2
@ tdammers: Para os propósitos desse cenário, estou adotando a abordagem de Stallman para vincular: tanto a vinculação dinâmica quanto a estática viola a GPL.
Michael Kourlas

3
@mouviciel Houve decisões judiciais indicando que a replicação de uma API para fins de interoperabilidade é legal. Eu acredito que isso foi encontrado de forma independente pelos tribunais de alto nível, tanto os EUA ea UE, assim que o status legal é bastante sólido (a menos que alguém muda ativamente a lei).
Donal Fellows

Respostas:


10

IANAL, mas aqui está minha opinião sobre o que é permitido dentro dos limites da GPL:

  • distribuir o trabalho combinado "A - B" em público: tudo bem, pode ser feito sob qualquer licença proprietária

  • crie uma biblioteca wrapper D para C por Y: tudo bem, isso não implica que A precise ser colocado na GPL

  • use o produto combinado "A - D - C" internamente por Y: também é bom, a GPL não exige a fonte aberta A desde que a combinação não seja distribuída ao público

  • distribuir o trabalho combinado "A - D - C" em público: isso exigirá que A seja de código aberto e seja submetido à GPL (e não importa se X ou Y distribuíram essa combinação; além disso, se Y quiser fazer isso, eles exigiriam uma licença de distribuição para A de X, é claro)

A questão interessante agora é: a D&C pode ser distribuída separadamente como fonte aberta sob a GPL, A&B (ou apenas A sem B) pode ser distribuída sob uma licença proprietária, e o usuário final substitui B pela D&C sozinho?

Aqui, a modificação final para "AB", que torna A dependente das bibliotecas D & C, é feita pelo usuário final - após a distribuição . Portanto, alguém poderia argumentar que a modificação final é feita apenas internamente pelo usuário final. E parece que isso é realmente possível sem violar a GPL - e o que você obtém é uma combinação de "AC&D" em que A está sob licença proprietária e C&D sob a GPL.

Obviamente, um advogado ou juiz pode ter uma opinião diferente sobre isso. Para obter uma resposta final, acho que você deve esperar até que alguém a experimente e uma segunda a processe.

Eu acho que para a maioria dos sistemas, será difícil criar uma constelação sem projetar "A" desde o início, de forma que funcione perfeitamente com B ou C. E, nesse caso, pode-se suspeitar que A foi de alguma forma derivada de C.

EDIT: pensando um pouco sobre isso, uma situação semelhante me veio à mente: escrever e distribuir plug-ins licenciados GPL para aplicativos de código fechado. Vamos usar, por exemplo, o Photoshop. Não acho que alguém tente seriamente impor a Adobe ao Photoshop de código-fonte aberto apenas porque existem alguns plug-ins da GPL de terceiros. Aqui, nem mesmo uma "lib de wrapper" é necessária, pois existe uma interface bem definida. No entanto, isso mudaria a situação se o Photoshop incorporasse algumas de suas funções centrais a partir de um plug-in de terceiros da GPL? Eu acho que, nesse caso, pode ser realmente difícil decidir onde traçar a linha; nesse momento, o produto de código fechado é um trabalho "baseado" na lib da GPL.

EDIT2: Existem bibliotecas de licença dupla disponíveis, com uma licença GPL para uso não comercial e uma licença proprietária para uso comercial como esta, por exemplo. Portanto, sua "brecha" significaria desenvolver um produto com base nessa lib (usando a versão comercial, para que a GPL não se aplique ao seu produto), entregar seu produto como fonte fechada sem a lib ao público e deixar o final O usuário obtém e instala a versão GPLed sozinho. Nesse caso, acho que o fornecedor da lib terá uma boa chance de processá-lo com sucesso por violação de licença (se você não pagar pela lib, é claro). Vale a pena o aborrecimento? Provavelmente não. Especialmente no exemplo ao qual vinculei, você também teria que comprar a lib, pois o preço não depende de quantas vezes você vende seu produto, mas apenas quantos desenvolvedores estão usando a lib durante o desenvolvimento.

Por fim, devido a esses riscos legais, se eu pretender usar bibliotecas de código aberto em um produto de código fechado, evitaria as bibliotecas de GPL, se possível, e não tentaria fazer uso dessa "brecha". LGPL ou GPL com exceção de vinculação é muito mais seguro ou qualquer tipo de licença de sistema operacional não viral.


2
Meu pressentimento me diz que os advogados começarão a cutucar mais se a empresa que produz Atambém começar a anunciar a A - C&Dcombinação.
Bart van Ingen Schenau

1
@BartvanIngenSchenau: Eu concordo. Mas posso imaginar um cenário diferente: X distribui AB e Y apenas distribui (e anuncia) um C&D "complementar" com um instalador que substitui B na pasta de instalação da AB?
Doc Brown

Também posso imaginar esse cenário alternativo, e será muito mais difícil para os advogados abrir um buraco se Ae C&Dprovir de diferentes entidades legais.
Bart van Ingen Schenau

1
@DocBrown: A existência de uma biblioteca proprietária equivalente B importa? A empresa X não poderia vender A sozinha, supondo que o usuário final tivesse que encontrar uma biblioteca de trabalho para usá-la e, então, "convenientemente" fornecer D?
Michael Kourlas

1
@ MichaelKourlas: a existência da lib B tornaria muito mais difícil para o fornecedor de C processar X, uma vez que torna mais fácil para X provar que A não é um "trabalho derivado" de C.
Doc Brown

3

Um exemplo prático são os drivers gráficos proprietários para Linux que o usuário final precisa instalar por conta própria. Importante para o criador do driver proprietário, se o usuário final distribuir o trabalho combinado, isso cria uma obrigação legal para o usuário final (que ele possivelmente não pode cumprir), mas não para o criador do driver.

Outra resposta afirma que "como o programa depende da biblioteca, ainda é um trabalho derivado" - mas se o programa não funcionar de fato porque a biblioteca não existe, não é derivado.

Mas, no final, se você confiar em "brechas", considere que sua abordagem pode não ser a correta em primeiro lugar.


Se o usuário final deve ou não instalar o componente GPL é irrelevante. Módulos proprietários do kernel que incluem wrappers GPL normalmente distribuem o componente GPL apenas no formulário de código-fonte e exigem que o usuário os compile. O DKMS automatiza isso. Isso tira proveito de uma "brecha" GPL diferente, ou seja, você pode fazer o que quiser com uma cópia local de um programa GPL, desde que não a redistribua no formato de código de objeto. Como os usuários finais normalmente não redistribuem o kernel do Linux junto com os módulos proprietários do kernel e os wrappers GPL compilados, eles geralmente são seguros.
Clement Cherlin

1

A vinculação define uma derivada pela GPL. Essa situação específica é para a qual a LGPL foi projetada para lidar: onde você deseja liberar a biblioteca como GPL, mas define o vínculo como o limite explícito da licença aplicada ou, alternativamente, onde você deseja vincular a algum código GPL, mas exige que o seu próprio o trabalho seja liberado sob uma licença que não seja da GPL.

No caso em que o usuário final fará a vinculação (crie seu próprio código a partir de fontes que não sejam da GPL, que podem se vincular a uma biblioteca GPL), o usuário final não criou efetivamente uma versão GPL do produto final, pois ele não tem permissão para alterar a licença da parte não GPL do projeto, porque ele não é o proprietário. Isso geralmente impede a distribuição pelo usuário final de qualquer forma, mas não proíbe o uso.

Dito isto, se um projeto exige que ele seja construído a partir do código-fonte e seja distribuído apenas dessa maneira, é irrelevante a licença da biblioteca vinculada, pois isso está totalmente fora do alcance dos desenvolvedores que não são da GPL. Ou seja, como você pode saber que sua distribuição somente de origem será construída no gcc contra o glibc VS construído em um compilador IBM em relação à sua libc, a menos que você especifique isso sob seus próprios termos de licenciamento? Isso rapidamente leva a um uso justo e a proibições contra condições legais inexequíveis (não que a fantasia não tenha sido escrita em lei em algumas ocasiões recentemente).


0

Não sou advogado, mas, pelo que sei, não está correto, pois o programa depende da biblioteca - ainda é um trabalho derivado. Da mesma maneira que um seqüencial é um trabalho derivativo. No mínimo, é baseado nas APIs definidas na biblioteca.


Não foi possível corrigir o problema da API incluindo um módulo wrapper ao qual você possui os direitos autorais? (veja windyroad.com.au/2006/04/20/... para um exemplo do que estou falando)
Michael Kourlas

Atualizei a pergunta para adicionar o componente wrapper.
Michael Kourlas

@ user92103 Esta FAQ aborda a sua pergunta? gnu.org/licenses/gpl-faq.html Ou esta pergunta do P.SE: programmers.stackexchange.com/questions/50118/…
apsillers

1
@apsillers: a pergunta P.SE lida com a comunicação cliente-servidor em uma rede. Embora essa seja certamente uma maneira possível de contornar a GPL, é sobre isso que estou falando aqui (link dinâmico). Examinei as Perguntas frequentes da GPL, e elas têm uma pergunta sobre um módulo wrapper, mas essa pergunta pressupõe que o distribuidor agrupe a biblioteca GPL com o aplicativo proprietário no ponto de distribuição. Nesse caso, o usuário final está fazendo o agrupamento, o que muda drasticamente as coisas.
Michael Kourlas
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.