Proteggere un software Qt
-
Buonasera a tutti. Sono Davide e sono entrato nel mondo di Qt qualche anno fa per sviluppare una prima applicazione dotata di interfaccia grafica.
Adesso, sto sviluppando indipendentemente un'applicazione cross-platform (principalmente per Raspberry Pi). Ho dato un'occhiata a questo topic cercando di capire qualcosa in più sull'argomento ma mi restano ancora alcune domande in sospeso.
Innanzitutto, ciò che vorrei realizzare è un programma che verrà distribuito a pagamento (magari con un periodo di prova iniziale) ma che allo stesso tempo io non sia obbligato a rilasciare i sorgenti di tale programma. Ho visto, che per fare questo, prima di tutto bisogna avere la licenza a pagamento di Qt (e fin qui tutto ok), ma per tutelare il programma dalla "copia", cioè che nessun altro possa creare un tale programma con la stessa UI ecc cosa dovrei fare? Dovrei tutelarlo dalla SIAE? Brevetto?
Premetto anche che esistono altri programma che risolvono/effettuano le stesse funzioni del mio ma che, appunto, sto cercando di renderlo con un'interfaccia più user friendly ed immediata e che da come mi sono documentato, non esistono altri programmi fatti proprio come il mio, però, ripeto, ne esistono altri che svolgono le stesse funzioni. Inoltre, se tutto dovesse proseguire bene, la distribuzione del programma prevede anche dell'hardware complementare al Raspberry Pi. Non vorrei essere molto esplicito su ciò che sto facendo quindi se magari qualcuno volesse capirne di più è libero di mandarmi un messaggio in privato.Ringrazio anticipatamente chi sarà disposto, in qualsiasi modo, ad aiutarmi.
-
Ciao, puoi tranquillamente vendere il tuo programma in modalità closed source basato su Qt senza acquistare una licenza, basta che le librerie Qt non vengano modificate e che restino linkate dinamicamente (non vanno fuse nell'eseguibile).
Come sistema anticopia puoi rilasciare un file di licenza costruito sul mac address (se il raspberry ha un mac address statico) oppure leggendo un particolare codice scritto nell'hardware legato al software o come preferisci.
Infine ti assicuro che il tuo programma a pagamento potrebbe essere una porcheria rispetto a quelli gratuiti ma potrebbe farti diventare ricco sfondato, ed allo stesso modo un programma gratis e stupendo potrebbe rimanere inusato. Tutto sta nell'impegno e capacità commerciale che ci viene messo sopra quindi:
- Mai dire non scrivo un programma perché ci sono altri prigrammi similari.
- Mai pensare che il proprio programma abbia successo solo perché migliore degli altri.
- Mai sperare che un programma abbia successo "da sé" ma lo avrà solo se si investiranno sopra risorse commerciali importanti, ben maggiori dei costi di sviluppo.
-
@mrdebug
Innanzitutto ti ringrazio.
Nel frattempo, ho proseguito la mia ricerca e praticamente ho trovato questo "plugin/estensione" (quello che è), sul marketplace che dovrebbe fornire un template iniziale per lo sviluppo di applicazioni che rispettino lo standard LGPL v3. L'ho utilizzato ma praticamente ho visto che il progetto che crei lo fa diventare una libreria linkabile staticamente e che quindi qualcun'altra persona può scaricarsi e ricompilare con una versione di Qt differente e aggiungere del codice (ed essendo linkata staticamente dovrebbe copiare la libreria creata da me all'interno dell'eseguibile creato da terzi). Inoltre, il codice scritto da me resta nascosto perché solamente il main viene reso "utilizzabile" da terzi.
Come faccio a capire che la mia applicazione (a questo punto, libreria?) sia linkata dinamicamente con Qt? In realtà penso che stia già linkando dinamicamente le librerie perché se eseguo la mia applicazione su un pc pulito (o al di fuori di QtCreator) ho bisogno prima di eseguire "windeployqt" o "macdeployqt" che copia le librerie all'interno della cartella in cui si trova l'eseguibile.
Il ragionamento è corretto o sto sbagliando qualcosa?
Altra domanda, avere la licenza di Qt serve solo a "non prendersi cura" di tutti questi requisiti? -
Farei prima a spiegarti tutto telefonicamente ma provo lo stesso.
Innanzitutto il programma che scrivi è un normale eseguibile per cui con ldd vedi da che librerie dipende. C'è un equivalente per Windows di cui non ricordo il nome.
Se vedi che dipende da librerie Qt significa che l'eseguibile non le include e le vuole a parte. Se vedi che windeployqt o macdeployqt ti include librerie significa che sono linkate dinamicamente quindi lgpl rispettata. Altrimenti avresti un eseguibile più grosso di quello che hai ora (che ora in pratica contiene solo il tuo codice) ed autosufficiente, senza dll esterne.La licenza serve per avere supporto, necessario quando si devono realizzare applicazioni particolarmente complesse (automotive, embedded etc). Serve inoltre a produrre un eseguibile autosufficiente tutto incluso che non debba essere accompagnato da una enorme mole di librerie, così da rendere la distribuzione più semplice.
Skype quando ero giovane (ora non so) era fatto in Qt e era un eseguibile autosufficiente.Se vai a questa pagina
http://www.denisgottardello.it/QtComPort/index.php
trovi un programma Qt compilato con librerie Qt a parte che potrei distribuire anche come closed source se volessi. -
@mrdebug
Salve a tutti,
rispondo qui perché il tema mi interessa particolarmente. Leggevo in giro che non è necessario avere il linking dinamico. È possibile anche avere linking statico delle librerie Qt, per essere in regola con LGPL v3 basta fornire il modo di re-linkare le librerie Qt di qualsivoglia versione, quindi fornire gli eventuali file .o e spiegare come è possibile ricompilare il programma. Voi sapete qualcosa di più in merito?
Tutto questo per proteggere un po' di più la propria applicazione, perché @Giridhar se qualcuno vuole, riesce sempre a fare reverse engineering su un'applicazione, che sia linkata staticamente e offuscata, prima o poi riusciranno a ricostruire qualcosa, ma almeno si prova a rendere più complicato e dispendioso farlo.
Il linking dinamico mi spaventa solo dal punto di vista del reverse, chi vieta a qualcuno di usare delle versioni di Qt modificate ad hoc per fare reverse engineering? -
Mah, non credo che il link dinamico o meno possa rendere un'applicazione più esposta al rishio di reverse engeeniering.
In base ad esperienze passate ciò che la gente va a cercare negli eseguibili sono eventuali certiticati ssl, password da usare nelle funzionalità di encryption etc, ma non di decompilare un programma. Eventualmente uno se lo rifà.