Quando colleghi la tua applicazione a una libreria, stai facendo un lavoro derivato di quella libreria. Pertanto, ai sensi della GPL (con la licenza della biblioteca), è necessario distribuire il codice sorgente dell'applicazione con l'applicazione (se la si distribuisce). Ed è un lavoro derivato se ci si collega solo ad esso o se si modifica anche il codice sorgente.
Dove questo diventa sfocato è con le librerie collegate dinamicamente. Se il tuo software può collegare dinamicamente una libreria GPL (ad esempio .dll o .so), ma potrebbe anche funzionare senza quella libreria, allora potresti distribuire il software senza la libreria, ma poi dire al distributore come eseguire il software con biblioteca. Poiché il software può essere eseguito senza la libreria, è possibile distribuire software funzionante senza la libreria GPL e senza il codice sorgente dell'applicazione e non violare la GPL. Ma è ancora sfocato.
Un trucco che ho visto usare una grande azienda qualche anno fa era quello di aggiungere uno spessore tra l'applicazione proprietaria e la libreria GPLed. Lo shim era un wrapper funzionalmente equivalente attorno alla libreria GPLed ed era esso stesso implementato come una libreria dinamica (.so). Lo shim è stato concesso in licenza con LGPLv2, quindi se l'applicazione è collegata allo shim, il codice sorgente dell'applicazione non deve essere distribuito. Il codice sorgente dello shim "funzionava" anche senza la libreria GPLed, quindi poteva essere distribuito sotto qualsiasi licenza, quindi erano in grado di scegliere LGPLv2 invece di GPL. Ancora sfocato.
Aparentemente, il caricamento dinamico è il modo in cui i driver proprietari possono funzionare su Linux.
La chiave di tutto questo è che se l'entità che ha ricevuto l'applicazione funzionante è in grado di riassemblare un'applicazione funzionante per utilizzare una libreria GPLed acquisita, allora il proprietario del copyright dell'applicazione funzionante non deve distribuire la fonte codice perché il lavoro derivativo è stato fatto dopo la distribuzione dell'applicazione, e non prima.
Ancora confusa ... ma ti ho dato più modi di esaminare il problema.