In breve: no , non puoi includere codice GPL e non GPL nello stesso script.
La risposta lunga: sì , ma solo se sai esattamente cosa stai facendo e non infrangi lo spirito della GPL. La mia comprensione è:
Se si incorporano elementi con licenza GPL nel proprio software, questi pezzi devono rimanere sotto licenza GPL. Il mezzo: devi fornire copie di quei "moduli" a chiunque ne faccia richiesta. Se li hai modificati, devi fornire le copie modificate. Infine, devi includere una copia della GPL per quelle parti della tua applicazione quando distribuisci la tua applicazione. C'è un piccolo malinteso tra alcune persone con cui ho parlato che se si utilizza il software con licenza GPL, l'intera applicazione intera è impostata su una licenza GPL. Questo non è vero.
La GPL fa alcune eccezioni degne di nota. Se si esegue il software in un processo separato costituisce un programma separato. L'implicazione qui è che puoi interfacciare con il software GPL libero dai vincoli della GPL fintanto che lo scambio è limitato al passaggio dei messaggi (IPC) e non al collegamento diretto (aggiornamento del PC e salto in GPL land). Un client per un server che esegue il software GPL non è vincolato dalla GPL. In generale, una licenza di copyright (non EULA) relativa a un lavoro software non può / non può coprire l'output del programma a cui si applica.
Inoltre, la GPL consente di aggregare le opere . I lavori aggregati sono trattati in 5 della GPL-v3 :
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
“aggregate” if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
Si noti che un'opera aggregata non fa riferimento a un software collegato a un componente GPL. Come afferma esplicitamente la GPL, se si verifica un qualsiasi collegamento (a meno che non sia previsto dalla LGPL o esplicitamente come con l'eccezione della libreria di sistema) al software coperto dalla GPL, allora il lavoro del cliente diventa GPL. Quindi se il codice finisce nello stesso binario o viene eseguito nello stesso processo in modo tale che le funzioni esposte vengono richiamate direttamente, generalmente deve seguire la GPL.
È qui che diventa interessante. Non ho idea se questo potrebbe reggere in tribunale, ma sulla base della mia lettura, sembra plausibile che un componente GPL e un componente non GPL possano essere eseguiti all'interno dello stesso processo finché uno non direttamente invoca l'altro . In altre parole, se condividono solo un modello di dati, credo che possano coesistere. In ogni caso, disegnare un confine di processo difficile tra due di questi componenti non è mai una cattiva idea.
Ad esempio, Viscosità è un'applicazione VPN che fornisce un'interfaccia di configurazione per un client OpenVPN aggregato. L'interfaccia utente di viscosità non è coperta dalla GPL in quanto genera semplicemente i dati di configurazione per OpenVPN e non si collega a OpenVPN o fa qualcosa di diverso da (indicare al sistema di) di invocare il binario nella sua interezza. Tuttavia, per rendere l'integrazione più fluida, Viscosity invia anche una versione patch di OpenVPN. Le patch applicate e il lavoro binario risultante derivato da OpenVPN sono coperti dalla GPL.
L'altra rotta è un modello SAAS. Non vendere nemmeno il software ma vendere i servizi che fornisce (e il relativo supporto per tali servizi). Questo è, a mio parere, il modello più popolare al momento. In questo modello, la proprietà intellettuale (spesso il modello di business) non è il software (l'IP è irrilevante). Scrivi il software e poi diventi il miglior fornitore dei suoi servizi per i tuoi clienti. Ecco come funzionano Github, Bitbucket, ecc.