Imballaggio
Probabilmente vorresti giocare alle normali aspettative per ogni piattaforma coinvolta.
Ad esempio, il software Linux viene solitamente distribuito tramite gestori di pacchetti o come pacchetto (file RPM, file DEB) o nella forma più semplice, un archivio come tar o un tar compresso. Nel mondo Linux, tuttavia, poiché ogni distribuzione ha versioni di ambienti / librerie molto diverse, le persone di solito spediscono l'origine e quindi costruiscono per quella specifica piattaforma per garantire la migliore compatibilità.
Il software Mac OSX è normalmente distribuito come DMG o mpkg.
Il software Windows è solitamente distribuito come programma di installazione (MSI o custom-exe), che può essere compilato con software come Inno Setup , Wix , Installer Nullsoft , o se i tuoi utenti sono savvier / vuoi fornire un'app portatile, puoi fornire un file zip o un auto-eseguibile 7-zip.
Mantenere nascosta la fonte
Ignorando il gruppo di utenti che decodificano / decompilano il codice, puoi fornire software ai tuoi clienti con Python. CPython compila i file di codice byte di codice da intermedio a pitone, con l'estensione .pyc
, e puoi spedirli ai tuoi utenti.
Su Windows, puoi usare py2exe per creare un eseguibile. Se non vuoi neanche pensare che i tuoi utenti Linux abbiano installato python (che la maggior parte vorrebbe, ma potrebbero avere versioni con cui non sei compatibile), puoi anche usare freeze , che ti permette di spedire applicazioni python che non si basano su un python preinstallato.
Molto più che semplici app a linea di comando
Se si prendono le informazioni di Python sopra, è ancora possibile creare app GUI con Python. Puoi usare pyqt4 , ad esempio, che è un wrapper Python attorno al framework Qt4.
In generale, sarai in grado di creare GUI o utilizzare wrapper attorno ad altre librerie della GUI, in qualsiasi lingua che utilizzi realisticamente.
Alta produttività
Bene, questo è più vago - tu usi python, e python è di alto livello. Se i file freeze / py2exe / compiled-python funzionano per te, allora non hai davvero bisogno di cambiare.
Potresti usare un linguaggio basato su Java e costruire con qualcosa come Maven per creare un file JAR che potresti rilasciare agli utenti. C'è un'implementazione (obsoleta) di Python su Java (jython), un'implementazione di Ruby ben mantenuta (JRuby), così come altri linguaggi come Scala, Clojure e Groovy. Puoi utilizzare Swing, SWT o qualcosa di simile a Jambi (Qt4 per Java) per creare l'interfaccia utente per le app.
Naturalmente puoi ricorrere all'utilizzo di C o C ++ e quindi utilizzare un sistema di build come cmake per creare e impacchettare il tuo software ( supporta la creazione di archivi di build, oltre a strumenti esterni come Inno), ma quanto sei produttivo in C ++ dipende in realtà dal tuo comfort nell'utilizzo e dalle librerie e di cui hai bisogno.
Mi limiterò a presentare una scelta interessante qui, per divertimento. Haskell (in particolare Glasgow Haskell) può essere compilato in codice nativo e può utilizzare le librerie C attraverso l'FFI (interfaccia per le funzioni estranee). Se sei un mago della lingua funzionale, è un linguaggio produttivo.
Come l'ho fatto
Nell'unico lavoro in cui ho creato un software che richiedeva agli utenti finali di installarlo, ho scritto il codice in C ++ e l'edificio e il packaging sono stati gestiti per Windows e Red Hat Enterprise 4 e Red Hat Enterprise 5. Non abbiamo supportato ufficialmente altre distribuzioni Linux oltre agli accordi contrattuali speciali, a causa del tempo investito e del fatto che nessuno ha usato nient'altro per eseguire questo software.
Il sistema di compilazione usava cmake per compilare tutto il codice e, per le build di Windows, si sarebbe poi impacchettato chiamando a Inno, che abbiamo copiato per copiare tutte le librerie e creare i file necessari per spedire un programma di installazione che avrebbe installato un copia del software.
Per le build di Linux, il sistema utilizzava il meccanismo di pacchettizzazione incorporato di cmake e un file che indicava come confezionare, dove collocare i file, e tale fu creato. Il sistema di compilazione avrebbe impacchettato tutte le librerie necessarie che il target Linux non avrebbe avuto di default (cose come boost, Qt4, ecc. Erano state confezionate da noi), e quindi anche se lo eseguivano su un'installazione di base, le librerie dovevano essere eseguite il codice (a parte elementi di base come libc e libstdc ++) sono stati installati da noi.