In che modo gli ingegneri software distribuiscono le applicazioni?

3

Interessato a sapere come le persone distribuiscono software ai propri clienti

Ho i seguenti requisiti:

  1. Clienti su vari sistemi operativi. linux e Windows
  2. Impossibile rilasciare il codice sorgente
  3. Idealmente vuoi l'opzione per sviluppare GUI non solo elementi della linea cmd
  4. Non si può supporre che sia preinstallato qualcosa sui computer dei clienti
  5. Desidera utilizzare un linguaggio piacevole e ad alta produttività

Ho usato Python per varie cose ma non sono sicuro di come potresti distribuirlo senza rilasciare il codice sorgente e senza sapere che i tuoi clienti hanno python installato

So che puoi creare ex, ma non è realmente progettato per questo e la tua compilazione efficace nell'interprete ogni volta

Esiste un altro linguaggio di alto livello simile che può essere compilato e distribuito correttamente come un binario, possibilmente con alcune librerie condivise di supporto o qualcosa del genere?

    
posta bph 23.02.2012 - 21:49
fonte

1 risposta

9

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.

    
risposta data 23.02.2012 - 22:13
fonte

Leggi altre domande sui tag