Ho ricevuto una serie di domande relative alla GPL, la più recente è questa:
Sto provando a vedere come funzionerebbe, quindi abbi pazienza con me. Ho una semplice interfaccia grafica per un gioco di scacchi. In sostanza può inviare / ricevere comandi a / da un motore di scacchi esterno (es: Tong, Frutta, ecc.). L'applicazione / GUI è di natura simile a XBoard ( link ), ma è stata progettata in modo indipendente.
Dopo aver esaminato una serie di thread su questo argomento, sembra che la FSF consideri il collegamento dinamico a una libreria GPLv2 come un lavoro derivato, e che così facendo, la GPLv2 si estenda al mio codice proprietario, e devo rilasciare il fonte per il mio intero progetto. Altri precedenti legali indicano il contrario e che il collegamento dinamico non causa l'effetto "virale" della GPL di propagarsi al mio codice proprietario.
Poiché non esiste un consenso ufficiale che possa dare una risposta "dura e veloce" alla domanda di collegamento dinamico, questa sarebbe un'alternativa accettabile:
- Costruisco la mia GUI di scacchi in modo che invii / riceva la logica AI del motore di scacchi come comandi di testo da una libreria di interfacce esterne che scrivo
- La libreria di interfacce che ho scritto da sola viene quindi rilasciata sotto GPL
- La libreria di interfaccia viene utilizzata solo per comunicare tramite una pipe di testo generica a motori di scacchi esterni da riga di comando
- Il motore di scacchi stesso verrebbe creato come utilità da riga di comando anziché come una libreria di qualsiasi tipo e invia semplicemente stringhe nell'interfaccia di scacchi universale di Chess Engine Communication Protocol ( link ) formato.
- L'unico "trucco" è che la libreria di interfacce non dovrebbe essere specifica per un singolo motore di scacchi GPL, altrimenti l'intera GUI sarebbe "interamente dipendente" da esso. Quindi, faccio semplicemente la mia libreria di interfaccia in modo che sia in grado di connettersi a qualsiasi motore di scacchi da linea di comando che utilizza un formato specifico, piuttosto che un unico motore univoco. Potrei quindi includere versioni di app da riga di comando predefinite di qualsiasi motore di scacchi che sto utilizzando.
Questo tipo di approccio mi consentirà di fare quanto segue:
- NON rilascia il sorgente per la mia interfaccia utente
- Rilascia il sorgente della libreria di interfacce che ho creato (se necessario)
- Utilizzare uno o più motori di scacchi e raggrupparli come utilità di riga di comando esterna fornite con una versione binaria dell'interfaccia utente
Grazie.
Modifica: per quello che vale, è così che posso mantenere privato il mio codice, poiché potrei voler riutilizzare parte del mio codice di rendering in altri progetti indipendenti. Questo non è un tentativo commerciale di scrivere semplicemente un'interfaccia utente economica per "avvolgere" il motore di qualcun altro e trarre profitto dal loro duro lavoro. Alla fine, ho scritto il mio semplice motore di scacchi (in realtà poco più di un validatore di mosse legali) invece di usare un componente GPL.