Homepage > Archivio > Reperire software su Linux: repository e compilazione
Reperire software su Linux: repository e compilazione
18/01/24 | ~ 7 minuti
Bene ma non benissimo
Partiamo dalle note dolenti: uno dei problemi reali delle distribuizioni GNU/Linux è l'impossibilità di procurarsi software settoriali realizzati unicamente per Windows e/o macOS.
Inutile illudersi di rimediare con emulazioni, virtualizzazioni o layer di compatibilità; non funziona così, e nemmeno tutte le alternative possono essere paragonabili ad alcune soluzioni commerciali o "monopiattaforma".
A parte questo però, su Linux è decisamente più facile reperire ed installare software. Vediamo come.
Repository e package manager
Se venite da anni di Windows o macOS, dove anche gli app store sono solo timidi tentativi di scimmiottare ciò che accade sugli smartphone, probabilmente siete abituati ad una tediosa quanto consueta procedura per installare nuovi programmi: motore di ricerca, sito dello sviluppatore (se va bene), download del file exe o dmg ed installazione con "next, next, next", evitando accuratamente la lettura di ogni termine di servizio.
Tale paradigma è, almeno in parte, estreaneo alla filosofia Unix. La fonte principale di approvvigionamento software nei sistemi operativi GNU/Linux era, ed è ancora oggi, quella dei repository.
Per gli amici una repo (non è ben chiaro se la forma più corretta sia maschile o femminile), è un archivio di pacchetti software, liberamente consultabile online e tendenzialmente sicuro.
Attraverso uno strumento apposito detto package manager (o gestore di pacchetti) è possibile cercare, installare, aggiornare ed eliminare in modo automatizzato gli applicativi e le loro dipendenze.
Insieme al file binario precompilato, infatti, un pacchetto si porta dietro altri componenti standard (generalmente delle librerie) che può condividere anche con differenti programmi.
Sarà compito del gestore di pacchetti individuare le dipendenze da aggiungere o rimuovere dal sistema.
I package manager nascono e sono intesi come strumenti da riga di comando, ma negli anni sono nati tanti frontend grafici (di fatto il concetto è molto simile a quello del Play Store di Google e l'App Store di Apple, seppur in modo decisamente più trasparente). Non chiedetemi di usarli, però.
PRO
Installazione ed aggiornamenti ultra rapidi
La gestione dei pacchetti diventa estremamente più semplice se tutto passa da un'unica fonte. Aggiornare tutti i programmi (e sovente anche l'intero sistema operativo) richiede spesso un unico comando o click, tempi relativamente brevi e (quasi) mai un riavvio obbligatorio.
Sicurezza
I repo sono solitamente gestiti dagli sviluppatori di una distribuzione, e i pacchetti al loro interno dovrebbero seguire un iter di controllo rigoroso. Il condizionale è comunque d'obbligo.
CONTRO
Frammentazione I repository non sono universali, ne esistono a decine e ognuno integra versioni differenti degli stessi pacchetti. Questo implica che non sempre un software sia disponibile all'interno della repo della distro scelta, oppure che determinate librerie possano creare dei conflitti a seconda della loro versione.
Se due pacchetti hanno bisogno entrambi della stessa libreria, ma solo uno è compatibile con la versione di essa presente nel repository, allora uno dei due avrà problemi o non funzionerà affatto.
No repo, no party La mancanza di eseguibili pronti per l'installazione (come gli exe di Windows di cui parlavamo sopra) può essere un problema.
È piuttosto facile reperire file deb o rpm, rispettivamente per Debian, RedHat e derivate; non altrettanto semplice è trovare eseguibili pronti all'uso per Arch, Void, Alpine od altre distribuzioni più "esotiche".
Prima dell'avvento di sistemi di pacchettizzazione alternativi, questo significava che qualsiasi programma non presente nel repository desiderato dovesse essere compilato a mano.
Compilazione
In cosa consiste, dunque, la compilazione? Si tratta di convertire codice sorgente (scritto in un linguaggio di programmazione cosiddetto "compilato") attraverso un programma compilatore, per trasformarlo in file binari eseguibili dal sistema operativo.
Per portare a termine correttamente una compilazione (o almeno provarci), abbiamo bisogno di:
Compilatore
Dipendenze per la compilazione
Dipendenze del pacchetto
Il requisito principale, neanche a dirlo, rimane il codice sorgente pubblico.
PRO
Portabilità La compilazione è pressoché universale; con l'open source si potrebbe potenzialmente installare software ottimizzato su qualsiasi tipo di macchina.
Personalizzazione
Con le dovute competenze, è possibile modificare a proprio piacimento un programma prima di installarlo.
CONTRO
Complessità Compilare non è per tutti; difficilmente le cose vanno per il verso giusto e capita abbastanza spesso che per risolvere dei problemi che inevitabilmente sorgeranno si debba ricorrere alla propria esperienza in campo Unix.
Prestazioni
La compilazione è una delle attività che richiedono maggior sforzo alla CPU. Su dispositivi poco performanti i tempi di attesa possono diventare biblici a fronte di un incremento prestazionale (rispetto ad un binario generico che non viene compilato su una macchina specifica) quasi irrisorio.
Aggiornamenti manuali
L'assenza di un gestore di pacchetti implica un controllo manuale degli aggiornamenti. Se un programma riceve degli update, prima di tutto bisogna accorgersene, poi riprocedere alla compilazione.