moduli proprietari all'interno GPL e kernel BSD [chiuso]
Domanda
Dato che il kernel di Linux è GPL e LGPL non suppongo che è illegale per collegare codice proprietario ad esso. Come funziona l'elude settore questo? Mi aspetto che la licenza GPL costringerà a qualsiasi sviluppatore di rilasciare sotto licenza GPL conducente e / o modulo del kernel.
Forse sono confuso e l'attuazione di un nuovo modulo non è in realtà che collega contro il codice del kernel ??? Come fanno le aziende affrontare questo? Forse che collega l'altro intorno strada (da kernel per i loro binari)?
D'altra parte v'è il kernel BSD. Dove si è liberi di collegamento protetto IP. Si può ottenere una migliore progettazione attuare i driver all'interno di un kernel BSD? C'è qualche limitazione di progettazione in sede di attuazione driver per GPL kernel?
Soluzione
Come ha detto la licenza BSD come quello usato dal kernel BSD è molto più liberale in modo che non è un problema di collegamento qualunque sia concesso in licenza i moduli lì.
Per il caso Linux è vero che la GPL per sé proibisce il collegamento di codice non GPL compatibile-che potrebbe non consentire il collegamento a moduli proprietari o moduli LGPL addirittura.
Tuttavia, i titolari di diritti d'autore linux concedono di collegare il modulo "LGPL" con qualsiasi codice proprietario. Un esempio di questo è il driver nvidia:
/------------.-\
| Kernel |
| |
| /--------\ |
| | Module | | /-------------------\
| | (LGPL) <========> proprietary code |
| \--------/ | \-------------------/
\--------------/
Questo sarebbe ancora illegale sotto licenza GPL, in generale, ma è esplicitamente consentito per il kernel Linux Come riferimento, vedere ciò che Linus Torvalds ha da dire sulla questione qui:.
http://linuxmafia.com/faq/Kernel/proprietary-kernel- modules.html
P.S. Il collegamento è un'operazione simmetrica in termini di GPL.
Altri suggerimenti
Non è l'atto di collegare sé che attiva le restrizioni GPL.
È distribuzione di un "lavoro derivato" del lavoro GPL che attiva le restrizioni - si deve dare a nessuno hai dato il "lavoro derivato" al codice sorgente necessario per ricreare il " opera derivata".
Ora, la domanda diventa uno dei cui viene disegnata la linea "lavoro derivato" - (! Ed è probabile che sia diversa in diverse giurisdizioni), che è tutt'altro che cristallino. Ad esempio, se si distribuisce un compilato kernel Linux binario con il codice staticamente collegati in una parte di questo, è abbastanza chiaro che l'intero binario è un "lavoro derivato". D'altra parte, se si distribuisce solo il modulo che utilizza solo "interfacce pubblicate" del kernel, allora probabilmente non è un "lavoro derivato".
C'è un sacco di spazio in tra queste due posizioni, però. Per esempio, chi distribuisce un dispositivo che contiene la memoria flash che contengono il kernel Linux e un driver binario compilato, è l'intero contenuto della memoria flash "un derivato di lavoro"? Di certo sembra che a me - ma le opinioni differiscono, e solo risposta definitiva arriverà quando è testato in tribunale (e anche allora, solo per la competenza di tale tribunale)
.Non posso dire dalla tua domanda, ma si può pensare su questo indietro. Se si sta tentando di utilizzare un driver proprietari su Linux, allora sì, questo dovrebbe essere consentito.
E 'vero che qualsiasi codice che i collegamenti contro codice GPL-ed deve essere di per sé GPL-ed. Tuttavia, il codice GPL-ed possono collegamento con le librerie closed-source, senza alterare la licenza di quelle librerie (in caso contrario, potremmo fare ogni biblioteca esistente open-source semplicemente scrivendo un programma GPL e collegandolo contro la Biblioteca). Pertanto, il GPL-ed Linux kernel possono Link contro il driver closed-source, senza alcun problema.
Detto questo, questo richiede che il driver è scritto in modo tale che questa sia completamente autonomo o collegamenti solo con le librerie che consentono il collegamento senza restrizioni (LGPL, MIT, ecc). Che significa anche che il driver dovrebbe essere un modulo del kernel caricabile e non compilato staticamente nel kernel.