Informatica per script kiddies 4 – Linux

Di nuovo il terzo mercoledí, ed eccoci qui a parlare di informatica a chi ci si avvicina baldanzosamente. Trovate qui tutti gli articoli della rubrica.

Oggi si parla di Linux. Per chi già ne sa: è un argomento con altissima probabilità di guerra a colpi di lanciafiamme, quindi vi chiedo di fare un bel respiro prima di andare avanti e cercare di fare commenti il piú costruttivi possibile. Non stiamo qui a presentare la lunghezza del nostro stack sistemistico, ma a far capire qualcosa a chi si avvicina a questo mondo.

Di che stiamo parlando, intanto

Linux è un kernel, uscito nel 1991 e diventato relativamente popolare poco dopo, con un bel logo a pinguino e uno sviluppatore finlandese (un po’ a pinguino anche lui).

Un kernel è una componente fondamentale (la piú importante, probabilmente) di un sistema operativo: si tratta di un software che sa “parlare” direttamente all’hardware del computer, fornendo ai programmi che girano su quel computer un insieme di funzioni (le “primitive”) un po’ piú comode da utilizzare rispetto al dialogo diretto con l’hardware. I kernel avanzati, inoltre, forniscono una serie di comode funzionalità, tra cui soprattutto stabilire come distribuire le risorse (di tempo, soprattutto) ai vari programmi che girano contemporaneamente sulla macchina.

Il kernel Linux ha due interessanti particolarità. La prima è che è libero (ovvero si può partecipare al suo sviluppo e, entro certi ben definiti limiti, lo si può copiare per fare tutt’altro) e Open Source (ovvero si sa come sia fatto). La seconda è che nasce per essere un “clone” di UNIX, popolare e robustissimo kernel, e ne supporta quindi ampiamente lo standard di “primitive”, chiamato POSIX. Tendenzialmente, quindi, un software pensato per parlare con UNIX è in grado di parlare anche con Linux.

Quando parliamo di Linux, però, di solito ci riferiamo a una famiglia di sistemi operativi completi (ovvero del kernel piú tutti gli strumenti che rendono il kernel utilizzabile da un utente, oltre che dai software), che hanno la caratteristica comune di utilizzare il kernel Linux, e solitamente (ma non sempre, Android è – grossomodo – una diffusissima eccezione) anche l’insieme di strumenti forniti dal progetto GNU (per cui si parla spesso di GNU/Linux).

Le distribuzioni

Quelli che spesso chiamiamo “sistemi Linux”, a rigore, sono “distribuzioni software”. Una distribuzione è una collezione di programmi, solitamente pensata con una particolare finalità d’uso in mente, e le distribuzioni Linux sono esattamente questo.

In genere una distribuzione contiene il kernel Linux, il software di sistema operativo a corredo (GNU, Busybox e/o altro), un insieme di applicativi utili all’utente (l’interfaccia grafica, i browser, i word processor, i programmi di grafica…) e, di solito, un gestore di pacchetti, ovvero un software utile a installare i programmi che si vogliono dall’insieme di quelli forniti dalla distribuzione.

Ovviamente, una volta installata una distribuzione, nulla vieta di installare sul sistema programmi che non ne fanno parte. Se si sa quello che si sta facendo, può anche essere molto opportuno farlo. Installare solo programmi che sono parte della distribuzione, però, ha alcuni vantaggi:

  • In genere il gestore pacchetti della distribuzione è in grado di tenere aggiornati tutti i software della distribuzione stessa. Quelli che non ne fanno parte, generalmente, a meno di non utilizzare appositi sistemi di distribuzione dei singoli software, non vengono aggiornati.
  • Una distribuzione, con alcune eccezioni, è pensata per essere coerente e per evitare incompatibilità tra i software forniti. Se due software, ad esempio, utilizzano una medesima componente, questa verrà installata una sola volta e sarà in una versione adatta ad entrambi i software. Installare un terzo software che utilizza quella stessa componente in una versione diversa può creare problemi.
  • I software presenti in una distribuzione sono in genere abbastanza testati e sufficientemente sicuri. Molti dicono che “su Linux non ci sono virus”, ed è assolutamente falso. Se ci si limita a installare software dalla distribuzione, però, si è sicuramente molto piú al sicuro dai virus che se si installa roba da Internet senza troppo ragionarci.

Di contro, non sempre le distribuzioni contengono le ultimissime versioni di software ad aggiornamento frequente, proprio perché questi vanno testati e resi compatibili col resto dei programmi disponibili.

Perché Linux è bello

Come ogni singolo sistema operativo esistente, Linux non è a priori “migliore” di altri. I sistemi operativi servono a usare un PC per fare cose. A seconda delle cose che devi fare, ci sono scelte di sistema migliori, peggiori, o sostanzialmente identiche (scelte filosofiche a parte). Vediamo un po’ quali sono i grandi punti di forza di Linux.

Linux è Open Source e Software Libero

Questo è il grandissimo punto di forza, che si tira dietro di tutto. Al netto delle cose di cui parlerò poi, il fatto che Linux sia Open Source lo rende un po’ piú affidabile di altri sistemi (si è ad esempio abbastanza sicuri che non ci siano parti malfatte “tanto nessuno se ne accorge”), e il fatto che sia libero rende molto veloce la correzione di gravi errori.

Inoltre, cosa vera soprattutto per alcune importanti componenti, il fatto che Linux sia Open e libero permette a una quantità davvero molto grande di sviluppatori, con interessi molto diversi fra loro, di far evolvere le funzionalità del sistema. Questo porta anche, però, persone con interessi molto particolari (caso famoso: Google per Android) a dare direzioni specifiche all’evoluzione del sistema, non sempre utili agli altri.

Linux è molto flessibile

Diversamente dagli altri due sistemi a grandissima diffusione, Microsoft Windows e Apple macOS, che vengono forniti con possibilità di personalizzazione assai limitate, le distribuzioni Linux in genere sono veramente molto flessibili. Spesso una distribuzione rende disponibili diverse alternative per uno stesso tipo di software: quasi sempre, ad esempio, è possibile scegliere sistemi di interfaccia grafica radicalmente diversi, o non utilizzarne affatto uno. Attorno a un kernel e a una collezione di sistemi a basso livello grossomodo sempre identica o con poche variazioni, insomma, le distribuzioni Linux permettono all’utente che abbia voglia di farlo di costruirsi l’ambiente come lo preferisce.

Esiste una grande varietà di distribuzioni

Anche togliendo la quantità non indifferente di immondizia, esiste un’ottima varietà di distribuzioni Linux ben mantenute. Abbiamo detto che una distribuzione è un insieme di software pensato per una particolare finalità: la grande varietà permette a utenti con problemi e fini completamente diversi di avere una collezione di software già pronta per ciò che deve e può fare.

Esistono le distribuzioni

Tempo fa tutti trovavano abbastanza stupida questa cosa quando la facevo notare. Sulle distribuzioni Linux in genere c’è un gestore pacchetti, da cui installare tutta la roba distribuita. Niente dover cercare il sito, niente wizard di setup, niente avanti avanti avanti ok, niente “vediamo se c’è una nuova versione”. “Sí vabbè, ma a che serve?”.

Poi è uscito l’iPhone. “Oh figo ma è come l’app store.”

Esiste una community

Il fatto che Linux sia Open permette a molti di conoscerlo molto a fondo. Se si fanno domande intelligenti, quindi, spesso (non sempre, purtroppo) si otterranno risposte intelligenti. Ogni distribuzione ha la sua (o le sue) community di utenti, alcuni molto esperti, e alcune di queste community sono ottimi posti. Alcune altre no, ma cosí va il mondo.

È comodo per sviluppare

In nessun sistema che ho provato si programma comodamente come su Linux. Qualsiasi distribuzione contiene compilatori e interpreti per qualunque cosa, librerie di ogni genere, ed è tutto facile da installare e utilizzare. Il fatto che il sistema sia aperto, poi, permette di andarne a toccare le parti funzionali, rompendolo malissimo e imparando un sacco di cose a ogni rottura. Se siete programmatori o se vi piace pasticciare (ovvero siete programmatori, ma non lo sapete), è il sistema dei sogni.

Perché Linux è meno bello

Linux ha anche alcuni “svantaggi”, che riassumo un po’ piú rapidamente dei vantaggi, con la somma speranza che chi mi legge sia ragionevole nel flammare.

Su tutti, forse incolpevolmente, c’è il fatto che non arrivando preinstallato sui PC, richiede un po’ piú di fatica prima di utilizzarlo. La varietà e la personalizzabilità, tra l’altro, rendono ancora piú complessa l’operazione: non si sa che distribuzione scegliere, quando la si è scelta non si sa che configurazione scegliere. Insomma, bisogna capirci un po’ prima di installarselo.

L’altro svantaggio è il suo essere considerevolmente piú evoluto per essere utilizzato come sistema per server che come sistema per il PC di casa. Questa cosa è forse sempre meno vera, ma nessuna delle sue interfacce grafiche, purtroppo, raggiunge la semplicità d’uso dei sistemi piú diffusi. Ci sono senz’altro ottime idee qua e là che fanno dire “oh, questo è molto meglio di Windows” o “oh, questo è molto meglio di Mac”, ma nella percezione di molti l’esperienza generale non è la stessa. Poi ok, finché Windows non mi mette i tab nelle finestre delle cartelle sarà sempre assai inferiore, ma questa è un’altra storia.

Le distribuzioni, ok, ma quali sono?

E parliamone, di ‘ste distribuzioni. Io, e sottolineo “io”, tendo a dividerle in tre grandi gruppi.

Il primo è il gruppo delle distribuzioni per utenti “agli inizi”, che in realtà sono spesso molto buone per qualsiasi utente PC (raramente lo sono per gestire server), ma che per molti dopo un po’ sono strettine.

Il secondo è il gruppo delle distribuzioni un po’ piú “pro”, che sono ottime per gli utenti esperti e per l’uso server, ma che talvolta peccano un po’ di praticità nell’uso su PC.

Il terzo è il gruppo delle distribuzioni per usi particolari, che fanno bene una sola cosa o un set molto limitato di cose, e per quelle vanno utilizzate.

Vediamoli uno per volta.

Le distribuzioni semplici

Del primo gruppo fanno parte le distribuzioni con cui, secondo il mio modestissimo parere, è bene iniziare per chi non sa dove stia di casa un sistema diverso da quello non-Linux che ha sempre usato. A titolo di esempio, senza alcuna pretesa di esaustività, metto in questo gruppo la classicissima Ubuntu, ma anche Fedora e Manjaro.

Si tratta di distribuzioni con un ambiente desktop già molto ben configurato, che forniscono molti strumenti per gestire le configurazioni che in genere ci si aspetta di poter personalizzare nell’aspetto del sistema, che spesso somigliano in alcuni aspetti a Windows o Mac.

Talvolta in nome della semplicità d’uso fanno cose estremamente discutibili (di flatpak e snap ho già avuto modo di parlare qui), motivo per cui spesso se le si consiglia si ricevono insulti, ma fa parte anche questo della bellezza della varietà di Linux.

In genere, questa famiglia di distribuzioni contiene molte versioni “snellite” di distribuzioni piú grandi e complete, che vengono mantenute aggiornate a cadenza piú frequente di quelle da cui derivano

Le distribuzioni grosse

Del secondo gruppo fanno parte le distribuzioni ragionate per un uso soprattutto server. Elencando i genitori di quelle elencate nel precedente gruppo, troviamo qui Debian, Red Hat e Arch. È in realtà un gruppo numerosissimo e composto da roba veramente molto bella.

Sono in genere distribuzioni molto grandi e molto complete, installabili in configurazioni ridotte all’osso da completare scegliendo nella vastissima collezione di software disponibili. Alcune di queste distribuzioni hanno costruito un loro set di standard per l’utilizzo e la configurazione dei software in esse distribuiti, e per l’organizzazione del filesystem (esiste uno standard generale, ma viene generalmente esteso e modificato da questi giganti). Un utente avanzato di una di queste distribuzioni tende a sentirsi a casa solo in quella, e ad essere efficientissimo nell’utilizzarla.

La grandissima varietà di software disponibile le porta ad essere molto piú soggette alle scelte dell’utente rispetto a quelle presenti nel gruppo precedente, e a richiedere quindi un po’ piú di consapevolezza nell’uso.

Pur essendo di solito adatte a un uso PC, in modi molto diversi tra loro, in genere queste distribuzioni hanno un ciclo di aggiornamento principale abbastanza lento da poter essere usate per i server (oggetti che non vuoi aggiornare settimanalmente).

Le distribuzioni dedicate

Infine, le distribuzioni pensate per uno scopo. Sono infinite, ma ne elencherò solo una, perché è quella con cui in genere lo script kiddie si trova ad avere a che fare sbattendoci malissimo la testa contro e abbandonando Linux per sempre: Kali.

Queste distribuzioni, pur essendo frequentemente (è il caso di Kali) sistemi molto completi, non sono pensate con in testa né l’uso PC ne l’uso server. Sono pensate per uno specifico e particolarissimo compito, diverso per ognuna. Quello di Kali, per esempio, è il penetration testing, una forma particolare di test sulla sicurezza dei sistemi in rete, che fa sentire piú hacker della maggior parte delle attività informatiche in questa epoca storica.

Si tratta di distribuzioni ottime nel proprio campo di utilizzo, che però per essere ottime vengono preconfigurate in modi assolutamente controintuitivi (ad esempio potrebbero non avere una configurazione di rete pensata per navigare in Internet) e spesso pericolosissimi (potrebbero essere configurate per non rompere le scatole di continuo all’utente chiedendo conferma per operazioni rischiose, o chiedendo la password).

L’esperienza tipica del principiante è installarsi una di queste distribuzioni perché fanno molto utente pro, e trovarsi nella migliore delle ipotesi con un sistema inservibile e nella peggiore delle ipotesi con un sistema apparentemente utilizzabile ma pericolosissimo per la sicurezza della propria macchina. Se siete principianti, fatevi un favore: usatele solo quando capite cosa c’è scritto nel manuale.

Concludendo

Se siete indecisi se provare Linux o no, provatelo. Non costa letteralmente nulla e scoprirete un bel mondo, in cui forse vi troverete anche bene. Provatelo, però, tenendo presente che non si tratta di un oggetto che rende le persone sviluppatori professionisti o hacker. Si tratta semplicissimamente di un sistema operativo, come Windows, come macOS. Usatelo come tale. Poi, se vi va, pian piano, c’è un sacco di roba utile dentro e potrete romperlo in tanti modi diversi, imparando molto piú che con gli altri sistemi.

Buon divertimento!