Existe uma licença LGPL modificada que permite vinculação estática?

21

A LGPL exige que, se um programa usa a biblioteca LGPL-ed, os usuários devem poder vincular novamente o programa a uma versão diferente da biblioteca:

...

d) Siga um destes procedimentos:

0) Transmitir a Fonte Correspondente Mínima sob os termos desta Licença e o Código do Aplicativo Correspondente de forma adequada e sob os termos que permitem ao usuário recombinar ou vincular novamente o Aplicativo com uma versão modificada da Versão Vinculada para produzir um Trabalho Combinado modificado, da maneira especificada na seção 6 da GNU GPL para o transporte da Fonte Correspondente.

1) Use um mecanismo adequado de biblioteca compartilhada para vincular à Biblioteca. Um mecanismo adequado é aquele que (a) usa em tempo de execução uma cópia da Biblioteca já presente no sistema do computador do usuário e (b) funcionará corretamente com uma versão modificada da Biblioteca que seja compatível com a Versão Vinculada da interface.

...

No entanto, em alguns casos, isso pode representar dificuldades consideráveis. Em particular, os programas Haskell são quase sempre compilados estaticamente. Além disso, o compilador faz otimizações entre módulos, não sendo possível retirar uma parte do código e substituí-lo por outro. Portanto, é muito difícil satisfazer essa condição. (Veja este link no Haskell Wiki.)

A vinculação dinâmica seria uma solução, mas em muitos casos, isso não é possível. Por exemplo:

  • Algumas plataformas podem não ter vínculo dinâmico.
  • Alguns idiomas não têm a possibilidade de vinculação dinâmica. Ou, não é possível criar módulos multiplataforma.
  • Em alguns casos, a vinculação dinâmica impediria otimizações importantes. Embora eu diga que isso raramente é um problema sério, em idiomas como Haskell a perda de desempenho pode ser considerável.

Portanto, estou procurando uma licença padrão do tipo LGPL que não exija a possibilidade de vincular novamente (e entendo que isso remove um pouco de liberdade dada aos usuários). Alguns projetos usam sua própria modificação da LGPL, por exemplo, wxWidgets . Mas eu prefiro usar alguma licença padrão que seja um pouco mais oficial, talvez verificada por alguns especialistas em direito e compatível com (L) GPL. Existe algo assim?

(Também estaria interessado em saber se existem algumas conseqüências imprevistas de uma modificação da LGPL.)

Petr Pudlák
fonte
Você não pode vincular dinamicamente as bibliotecas externas no Haskell? Isso deve ser condenadamente inconveniente.
Robert Harvey
2
Se todo o seu projeto for FOSS, isso pode não ser um problema. Aponte-os para as fontes e deixe- os resolver o problema! :-)
Peter Rowell
2
O que distinguiria essa licença das licenças não copyleft?
2
@ delnan Há muitas outras coisas na LGPL que geralmente são desejáveis. Por exemplo, requer que qualquer modificação seja (L) GPL ou proíbe a tivoização .
Petr Pudlák 11/12/12
A licença do wxWindows é a mais oficial possível, uma vez que é aprovada pelo OSI .
Joachim Sauer

Respostas:

12

wxwidgets é licenciado sob essencialmente = LGPL + static static

... essencialmente a L-GPL (Licença Pública Geral da Biblioteca), com uma exceção que afirma que trabalhos derivados em formato binário podem ser distribuídos nos próprios termos do usuário. Esta é uma solução que satisfaz aqueles que desejam produzir software com GPL usando wxWidgets e também aqueles que produzem software proprietário.

O wxWidgets é um certificado de software de código aberto Os participantes da discussão que levaram a essa decisão incluem o pessoal da Abisource , Robert Roebling, Julian Smart, Markus Fleck, Karsten Ballueder e alguns conselhos de Richard Stallman. Richard confirmou que a nova licença é compatível com aplicativos da GPL. No entanto, não há restrições significativas em aplicativos proprietários.

A licença wxWindows foi aprovada pela Open Source Initiative e você pode encontrar a licença no site aqui ...

Martin Beckett
fonte
0mq também é licenciado sob LGPL com uma exceção explícita de vinculação estática.
Trevor Powell
4

IANAL, mas fui levado a acreditar que uma solução é fornecer arquivos de objeto para peças que não sejam LGPL. Dessa forma, o usuário pode vincular novamente o programa e, portanto, é livre para alterar a parte LGPL, atendendo aos requisitos da LGPL.

Em outras palavras, você precisa ter um pacote de origem, com fontes LGPL e arquivos de objetos compilados com código não LGPL. Obviamente, você precisará fornecer arquivos de objeto para cada arquitetura diferente para a qual liberar os binários, mas não acho que isso seja um problema.

Do ponto de vista do desenvolvimento, o mais simples pode ser apenas fazer o sistema de compilação também compilar o pacote de origem ao mesmo tempo, ao criar o binário para distribuição.

hyde
fonte
você tem algum cenário real em que isso foi feito?
knocte
3

Encontrei um com a licença do Google: OpenScales

O OpenScales é lançado sob a versão 3 da Licença Pública Menor GNU (LGPL, disponível aqui ), com uma exceção relacionada à exceção de link estático (veja abaixo) ...

Além do texto da licença LGPL, a exceção às condições LGPL se aplica ao OpenScales:

Como uma exceção especial à Licença Pública Geral Menor GNU versão 3, você pode transmitir a terceiros um arquivo executável de uma Obra Combinada que vincula, estaticamente ou dinamicamente, partes desta Biblioteca no arquivo executável, transmitindo a Fonte Correspondente Mínima, mas sem a necessidade de transmitir o Código de Aplicativo Correspondente, na seção 4d0 da Licença Pública Geral Menor GNU, desde que você esteja usando uma versão não modificada da Biblioteca de distribuição pública. Esta exceção não invalida outros motivos pelos quais o arquivo executável pode estar coberto pela Licença Pública Geral Menor GNU ou pela Licença Pública Geral GNU.

Não é padrão, porém, e não sei se existe.

Minthos
fonte
1

Como você continuaria a garantir a liberdade do usuário? Acredito que a resposta "correta" é vincular estaticamente um calço que carrega dinamicamente a biblioteca.

pedregoso
fonte
Sim, essa é a melhor solução. Mas, em alguns casos, a vinculação dinâmica não é possível. Alguns idiomas não têm essa possibilidade. Ou algumas plataformas não têm essa possibilidade.
Petr Pudlák
Na verdade, os vinculadores fazem exatamente isso quando você vincula dinamicamente à biblioteca.
Calmarius 23/09/15