Domanda

Sto sviluppando un'applicazione con licenza GPL in Python e ho bisogno di sapere se la GPL consente al mio programma di utilizzare plug-in proprietari.Questo è cosa ha da dire la FSF sulla questione:

Se un programma rilasciato sotto GPL utilizza plug-in, quali sono i requisiti per le licenze di un plug-in?

Dipende da come il programma richiama i suoi plug-in.Se il programma utilizza fork ed exec per richiamare i plug-in, i plug-in sono programmi separati, quindi la licenza per il programma principale non prevede requisiti per essi.

Se il programma collega dinamicamente i plug-in, questi effettuano chiamate di funzioni tra loro e condividono strutture dati, riteniamo che formino un unico programma, che deve essere trattato come un'estensione sia del programma principale che dei plug-in.Ciò significa che i plug-in devono essere rilasciati sotto la GPL o una licenza per software libero compatibile con GPL e che i termini della GPL devono essere seguiti quando tali plug-in vengono distribuiti.

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

La distinzione tra fork/exec e collegamento dinamico, oltre ad essere in qualche modo artificiale, non si applica ai linguaggi interpretati:che ne dici di un plugin Python/Perl/Ruby, che viene caricato tramite import O execfile?

(modificare:Capisco il motivo della distinzione tra fork/exec e collegamento dinamico, ma sembra che qualcuno che volesse conformarsi alla GPL ma andare contro lo "spirito" --io non lo so-- potrebbe semplicemente usare fork/exec e la comunicazione interprocesso per fare praticamente qualsiasi cosa).

La soluzione migliore sarebbe aggiungere un'eccezione alla mia licenza per consentire esplicitamente l'uso di plugin proprietari, ma non riesco a farlo poiché sto utilizzando Qt/PyQt che è GPL.

È stato utile?

Soluzione

La distinzione tra fork/exec e collegamento dinamico, oltre ad essere in qualche modo artificiale,

Non penso affatto che sia artificiale.Fondamentalmente fanno solo la divisione in base al livello di integrazione.Se il programma ha "plugin" che sono essenzialmente "fire and dimentica" senza integrazione a livello API, è improbabile che il lavoro risultante venga considerato un lavoro derivato.In generale, un plugin semplicemente biforcato/eseguito soddisferebbe questi criteri, anche se potrebbero esserci casi in cui non è così.Questo caso si applica soprattutto se il codice del "plugin" funzionerebbe anche indipendentemente dal tuo codice.

Se, d'altra parte, il codice dipende profondamente dal lavoro coperto da GPL, come ad esempio il richiamo estensivo delle API o una stretta integrazione della struttura dei dati, allora è più probabile che le cose siano considerate un lavoro derivato.Cioè, il "plug-in" non può esistere da solo senza il prodotto GPL, e un prodotto con questo plugin installato è essenzialmente un'opera derivata del prodotto coperto da GPL.

Quindi, per renderlo un po' più chiaro, gli stessi principi potrebbero applicarsi al codice interpretato.Se il codice interpretato fa molto affidamento sulle tue API (o viceversa), allora sarebbe considerato un lavoro derivato.Se si tratta solo di uno script che viene eseguito da solo con un'integrazione estremamente ridotta, potrebbe non essere così.

Ha più senso?

Altri suggerimenti

@Daniele

La distinzione tra fork/exec e collegamento dinamico, oltre ad essere in qualche modo artificiale, non si applica ai linguaggi interpretati:che ne dici di un plugin Python/Perl/Ruby, che viene caricato tramite import o execfile?

Non sono sicuro che la distinzione È artificiale.Dopo un caricamento dinamico, il codice del plugin condivide un contesto di esecuzione con il codice GPL.Dopo un fork/exe non lo fa.

In ogni caso lo immaginerei importing fa sì che il nuovo codice venga eseguito nello stesso contesto di esecuzione del bit GPL e dovresti trattarlo come il caso del collegamento dinamico.NO?

Quante informazioni condividi tra i plugin e il programma principale?Se stai facendo qualcosa di più che semplicemente eseguirli e attendere i risultati (senza condividere dati tra il programma e il plugin nel processo), molto probabilmente potresti farla franca considerandoli proprietari, altrimenti probabilmente dovrebbero essere GPL' D.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top