Chiama il software GPL da un software non GPL


30

Posso (legalmente) utilizzare un programma rilasciato sotto licenza GPL da un altro programma che sto scrivendo e non devo rispettare la GPL (per il programma che sto scrivendo)?

Ad esempio, ho una GUI che utilizza un programma (che è sotto GPL), posso nascondere il codice nella GUI e persino venderlo?

Risposte:


30

È possibile utilizzare un programma GPL dal proprio programma senza che il programma sia interessato dalla GPL, ma non è possibile collegare il codice GPL al proprio programma senza che il programma diventi soggetto ai termini della GPL.

Nell'esempio fornito nella domanda, in cui è stato scritto un wrapper GUI attorno a un programma da riga di comando esistente, la GUI non è vincolata dai termini della GPL, purché si tratti di un programma separato che esegue il programma GPL in un processo separato e comunica con esso solo tramite le interfacce esistenti, ad esempio tramite la riga di comando e / o tramite stdin / stdout.

Alcuni bit rilevanti dalle FAQ di GPL :

Dov'è la linea tra due programmi separati e un programma con due parti? Questa è una domanda legale, che alla fine i giudici decideranno. Riteniamo che un criterio adeguato dipenda sia dal meccanismo di comunicazione (exec, pipe, rpc, chiamate di funzione all'interno di uno spazio di indirizzi condiviso, ecc.) Sia dalla semantica della comunicazione (che tipo di informazioni vengono scambiate).

Se i moduli sono inclusi nello stesso file eseguibile, vengono sicuramente combinati in un unico programma. Se i moduli sono progettati per funzionare collegati insieme in uno spazio di indirizzi condiviso, ciò significa quasi sicuramente combinarli in un unico programma.

Al contrario, pipe, socket e argomenti della riga di comando sono meccanismi di comunicazione normalmente utilizzati tra due programmi separati. Pertanto, quando vengono utilizzati per la comunicazione, i moduli sono normalmente programmi separati. Ma se la semantica della comunicazione è abbastanza intima, scambiando complesse strutture di dati interni, anche quella potrebbe essere una base per considerare le due parti come combinate in un programma più ampio.


Posso rilasciare un programma non gratuito progettato per caricare un plug-in coperto da GPL?

Dipende da come il programma invoca i suoi plug-in. Ad esempio, se il programma utilizza solo fork e exec semplici per invocare e comunicare con i plug-in, i plug-in sono programmi separati, quindi la licenza del plug-in non richiede requisiti per il programma principale.

Se il programma collega dinamicamente i plug-in e si scambiano chiamate funzionali e condividono strutture di dati, riteniamo che formino un singolo programma, che deve essere trattato come un'estensione sia del programma principale che dei plug-in. Per utilizzare i plug-in coperti da GPL, il programma principale deve essere rilasciato sotto licenza GPL o una licenza di software libero compatibile GPL e che i termini della GPL devono essere seguiti quando il programma principale viene distribuito per l'uso con questi plug-in.

Se il programma collega dinamicamente i plug-in, ma la comunicazione tra loro si limita a invocare la funzione "principale" del plug-in con alcune opzioni e ad attendere che ritorni, questo è un caso limite.

Si noti che la GPL si applica integralmente al programma da riga di comando sottostante in ogni caso - se lo si distribuisce (anziché far sì che gli utenti lo ottengano da un'altra fonte), si è responsabili di fornire una copia della GPL agli utenti, rendendola chiarire loro che il programma da riga di comando è sotto licenza GPL (anche se il wrapper della GUI non lo è) e rendere disponibile il codice sorgente del programma da riga di comando su richiesta. Dalle domande frequenti su GPL:

Se le persone distribuissero il software coperto da GPL definendolo "parte di" un sistema che gli utenti sanno essere parzialmente proprietario, gli utenti potrebbero non essere sicuri dei propri diritti in merito al software coperto da GPL. Ma se sanno che quello che hanno ricevuto è un programma gratuito e un altro programma, fianco a fianco, i loro diritti saranno chiari.

Disclaimer standard: non sono un avvocato e, anche se fossi un avvocato, non sono il tuo avvocato. Se hai bisogno di una risposta definitiva, consulta un professionista legale appropriato che è autorizzato a esercitare nella tua giurisdizione.


1
Va notato che la posizione di FSF sul collegamento è la posizione di minoranza. (E, IMO, non ha alcun senso. Un processo automatizzato non può creare un nuovo lavoro.)
David Schwartz,

1
Tuttavia, la FSF ha scritto la GPL. Questo rende la loro opinione molto più pertinente. "Quando diciamo X, intendiamo {...}" è generalmente accettato in tribunale. "Quando hai detto X, intendevi {...}", non così.
MSalters,

Che cosa significa "usa solo fork e exec per invocare" - qualcuno può chiarire questo?
Krunal,

Quindi la GPL può essere facilmente aggirata semplicemente scrivendo un wrapper per eseguire il codice GPL in un processo separato? Ciò sembrerebbe rendere la GPL irrilevante e impossibile da applicare. Che cosa succede se scrivo la mia libreria e mi collego ad essa insieme a una libreria GPL. La mia libreria autonoma separata diventa anche GPL? Cosa succede se mi collego alla libreria di qualcun altro mentre utilizzo il codice GPL? La loro libreria diventa GPL? Se rispondi no a una di queste domande, si apre una grande scappatoia per aggirare facilmente la GPL. Se rispondi di sì, allora stai violando la legge sul copyright.
Cerin,

@Cerin - La GPL si applica davvero solo al codice che distribuisci. Pertanto, mentre è possibile scrivere un programma che si collega a licenze GPL e non compatibili GPL, non è possibile quindi distribuire tale programma a terzi, poiché eseguirà codice GPL e non compatibile nello stesso processo. ("Usa senza ridistribuzione" è visto da molti come una scappatoia nella GPL, dal momento che significa che i servizi web e simili possono eludere completamente la GPL perché eseguono il software da soli invece di consegnarlo agli utenti. GNU AGPL è un tenta di risolvere questo problema.)
Dave Sherohman,

0

Dipende da cosa intendi usandolo?

  • compilarlo nel tuo codice
  • utilizzare una libreria condivisa
  • eseguire un eseguibile

Dipende anche esattamente da quale versione / variante della GPL è sotto l'altro codice.

  • GPL
  • LGPL
  • AGPL
  • Probabilmente altri

Disclaimer legale: non sono un avvocato.


-2

Dipende da come esattamente il tuo programma sta "usando" il programma GPL. Le FAQ di GPL hanno una spiegazione piuttosto lunga , ma lascia ancora molto aperta all'interpretazione:

Non è possibile incorporare software coperto da GPL in un sistema proprietario. (...) Tuttavia, in molti casi è possibile distribuire il software coperto da GPL insieme al proprio sistema proprietario. Per fare ciò validamente, è necessario assicurarsi che i programmi gratuiti e non liberi comunichino a distanza, che non siano combinati in modo da renderli effettivamente un unico programma. (...) se i due programmi sono combinati in modo da diventare effettivamente due parti di un programma, non puoi trattarli come due programmi separati. Quindi la GPL deve coprire tutto.Se i due programmi rimangono ben separati, come il compilatore e il kernel, o come un editor e una shell, allora puoi trattarli come due programmi separati, ma devi farlo correttamente. Il problema è semplicemente di forma: come descrivi ciò che stai facendo. Perché ci importa di questo? Perché vogliamo assicurarci che gli utenti comprendano chiaramente lo stato libero del software coperto da GPL nella raccolta.

Penso nel tuo esempio di una GUI che esiste principalmente per chiamare un programma GPL a riga di comando, i due formano chiaramente un singolo programma, quindi dovresti rilasciare il tuo codice sotto GPL.


No, non "formano chiaramente un singolo programma". Finché il programma da riga di comando sottostante rimane in grado di funzionare in assenza della sovrapposizione della GUI, vengono combinati per "semplice aggregazione" e non sono "effettivamente un singolo programma". Nota gli esempi nel testo che hai citato: un compilatore si trova in cima al kernel e non funzionerà senza di esso, ma il kernel funzionerà felicemente in assenza del compilatore.
Dave Sherohman,

1
@Dave: se il programma da riga di comando sottostante rimane in grado di funzionare in assenza dell'overlay della GUI potrebbe essere rilevante se lo stato della licenza del programma da riga di comando fosse in questione - ma la domanda riguarda la GUI, che è completamente inutile senza il programma da riga di comando, e quindi è vero, senza ombra di dubbio, che formano un singolo programma.
Michael Borgwardt,

Sostituiamo uno degli esempi dalla sezione che hai citato e vediamo come regge. "... ma la domanda riguarda il compilatore, che è completamente inutile senza il kernel, ed è quindi vero, senza ombra di dubbio, che formano un singolo programma." Tranne, ovviamente, che il testo che hai citato afferma esplicitamente "puoi trattarli come due programmi separati". Se fosse semplicemente una questione di dipendenza, allora non potresti mai eseguire software chiuso su Linux perché quel software sarebbe "completamente inutile" senza il kernel (GPLed).
Dave Sherohman,

@Dave: Tranne, ovviamente, che i compilatori e tutti i tipi di software chiuso NON sono inutili senza il kernel Linux, poiché possono e funzionano su tutto ciò che implementa gli standard delle librerie POSIX e / o C e forniscono funzionalità significative proprie . Questione completamente diversa da un wrapper GUI che esiste esclusivamente per guidare un programma specifico da riga di comando.
Michael Borgwardt,

3
Ti sbagli nella parte della GUI, però. Quella stessa GUI involucro sarà lavorare con altri programmi CLI, in particolare le versioni successive dell'originale. Ciò è rilevante in questo contesto, poiché significa che i diritti GPL originali sul programma sottostante possono ancora essere esercitati. Se lo ricompilo per essere il 10% più veloce, la CLI non mi ostacola.
MSalters,

-3

No.

Il codice GPL può essere utilizzato solo da un altro codice GPL.

Citando la prima riga dell'articolo GPL di Wikipedia :

La GPL è la prima licenza copyleft per uso generale, il che significa che le opere derivate possono essere distribuite solo alle stesse condizioni di licenza.

A parte questo, la GPL è lunga diverse pagine ed esiste in diverse versioni.


Attenzione, avanti personale!

Personalmente non mi piace molto la licenza GPL a causa della sua natura molto restrittiva e simile a un virus. Lo chiamano "gratuito", ma in realtà è esattamente il contrario, il codice GPL non può essere utilizzato da nulla tranne che da altro codice GPL. Costringendo così altri progetti in GPL o costringendo a riscrivere intere librerie, indipendentemente dal fatto che il tuo progetto attuale sia open source. C'erano enormi progetti open source, come ad esempio FreeBSD, che sono stati costretti a riscrivere centinaia di migliaia di righe di codice linux perché la loro licenza era incompatibile, era troppo "libera" nel senso "fai quello che vuoi", il che è ovviamente non compatibile con GPL.

Se vuoi una licenza veramente "libera" nel senso "fai quello che vuoi", raccomando la licenza BSD o MIT ... in realtà, la maggior parte delle altre licenze sono OK. È solo GPL che è davvero problematico perché è restrittivo e come costringe gli altri a farlo. Infine, è eccessivamente complicato.

Ah, sì, è anche un biglietto di sola andata. GPL può utilizzare il codice / le librerie concesse in licenza dalla maggior parte delle licenze, ma queste librerie / codici non possono utilizzare il codice GPL a sua volta.


Dice "opere derivate". Questo include software che si collega dinamicamente al codice GPL?
destra

@WTP: sicuramente sì - il punto centrale della LGPL è avere una licenza diversa che lo consenta.
Michael Borgwardt,

3
Una shell GUI racchiusa in un programma da riga di comando non è un "lavoro derivato" come definito a fini di copyright.
Dave Sherohman,

1
@Dave Sherohman - non sembra chiaro. La risposta accettata a questa domanda dice: "IMHO, nello spirito, un involucro puro che espone semplicemente la funzionalità di un programma GPL dovrebbe essere GPL". Non è solo l'aspetto tecnico di come comunicano, è l'intento. Ad esempio, tradurre un libro sta creando un'opera derivata. La conversione in formato Kindle sarebbe un'opera derivata. Ho potuto vedere un giudice giudicare che l'aggiunta di una GUI sta creando un'opera derivata. Attenzione.
Scott Whitlock,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.