Guida Linux / Che cos’è Linux? Kernel, distribuzioni e open source

In senso stretto, Linux è un kernel: la parte del sistema operativo che gestisce le risorse tra hardware e programmi. Il «sistema operativo Linux» che si installa è di solito una distribuzione, che unisce al kernel comandi, librerie e strumenti per installare e aggiornare il software. Questa distinzione spiega perché Ubuntu e Rocky Linux siano entrambi sistemi basati su Linux, pur avendo modalità d’uso diverse.

Dopo aver capito che cosa offre una distribuzione, puoi consultare la lezione sui criteri di scelta della distribuzione, in inglese per scegliere una famiglia e la lezione sulla preparazione di una macchina virtuale, in inglese per predisporre installazione e ripristino.

Linux è un kernel o un sistema operativo?

Si usano entrambe le espressioni, ma indicano ambiti diversi. Il kernel Linux è il programma centrale del sistema operativo. Nell’uso comune, un sistema operativo Linux è invece l’intero sistema, completo e utilizzabile, costruito attorno a quel kernel. Per questo «aggiornare il kernel Linux» e «installare Linux» non indicano la stessa operazione.

Il kernel assegna tempo della CPU, cioè dell’unità centrale di elaborazione, e memoria ai programmi in esecuzione. Gestisce inoltre i filesystem, la rete e l’hardware tramite i driver dei dispositivi. I programmi usano le interfacce del kernel invece di controllare direttamente i dispositivi di archiviazione. Anche la documentazione ufficiale del kernel Linux distingue il kernel dalle interfacce utilizzate dai programmi esterni a esso.

I comandi per copiare file, i browser web, i server web e gli ambienti desktop grafici non fanno parte del kernel. Operano nello spazio utente (user space) e richiedono le funzioni del kernel quando servono. Molte distribuzioni Linux includono strumenti del progetto GNU, ma non tutti i programmi dello spazio utente provengono da GNU. Le definizioni del progetto Debian su Linux e GNU approfondiscono questa relazione.

Quali sono le parti principali di un sistema Linux?

Per orientarsi all’inizio, è utile immaginare tre livelli. È una semplificazione: un sistema reale comprende anche una procedura di avvio e numerosi componenti intermedi.

  1. Hardware: i componenti fisici, come CPU, memoria, dispositivi di archiviazione e schede di rete.
  2. Kernel Linux: il software che gestisce le risorse hardware e mette a disposizione dei programmi funzioni comuni.
  3. Spazio utente: l’ambito in cui operano shell, comandi, servizi di sistema, librerie, ambienti grafici e applicazioni. La shell è l’interprete che legge ed esegue i comandi.

Per esempio, quando esegui in un terminale un comando che legge un file, il programma opera nello spazio utente, mentre l’apertura del file passa attraverso il kernel. Sistemi con lo stesso kernel possono apparire molto diversi a seconda del software incluso nello spazio utente, come gli strumenti per server o un ambiente desktop.

Che cosa aggiunge una distribuzione?

Una distribuzione Linux seleziona e combina il kernel Linux con altro software, offrendo un modo per installare, configurare e aggiornare il sistema operativo risultante. Di solito include un gestore di pacchetti, cioè uno strumento per installare e aggiornare il software, e repository da cui ottenere i pacchetti. Comprende inoltre servizi di base, una politica per gli aggiornamenti di sicurezza e documentazione. Anche l’introduzione del progetto Debian presenta la distribuzione come un sistema operativo completo, anziché come il solo kernel.

Ubuntu e Rocky Linux, per esempio, usano entrambi il kernel Linux, ma differiscono per formati dei pacchetti, strumenti di gestione del software, configurazioni predefinite e politiche di supporto. Quando segui una procedura, chiediti se riguarda il kernel Linux, uno strumento comune a molte distribuzioni oppure un metodo specifico di una distribuzione. La scelta della distribuzione è il tema della lezione 02; qui conta capire che condividere un kernel non rende identici due sistemi completi.

Che cosa significa open source?

Open source significa più che poter consultare il codice sorgente. La licenza applicabile deve permettere di usare, modificare e ridistribuire il software alle condizioni previste. La Open Source Definition dell’Open Source Initiative comprende requisiti sulla disponibilità del codice sorgente, sulla ridistribuzione e sulle opere derivate.

Open source non significa neppure semplicemente «disponibile gratis». Un programma può essere scaricabile gratuitamente senza concedere il diritto di modificarlo o ridistribuirlo. Viceversa, il software open source può essere venduto e un’azienda può far pagare l’assistenza. I componenti di una distribuzione non hanno necessariamente tutti la stessa licenza e non sono necessariamente tutti open source: prima di fare affidamento su determinati diritti d’uso, modifica o distribuzione, controlla la licenza del singolo programma.

Che cosa puoi verificare sul tuo sistema?

Se hai un computer o una macchina virtuale con Linux, questo comando mostra la release del kernel attualmente in esecuzione:

uname -r

Il comando non indica la versione della distribuzione e non richiede privilegi di amministratore. Il nome e la versione della distribuzione sono normalmente descritti nel file seguente, che puoi leggere senza modificarlo:

cat /etc/os-release

Nell’output, PRETTY_NAME è un nome leggibile del sistema operativo, ID è l’identificatore della distribuzione e VERSION_ID, se presente, ne identifica la versione. Quest’ultimo campo può mancare, per esempio nelle distribuzioni a rilascio continuo. Il risultato di uname -r e la versione della distribuzione descrivono due elementi diversi, perciò i loro numeri non devono coincidere.

Alcuni sistemi minimi o specializzati possono non avere /etc/os-release o mostrare dettagli differenti. Secondo la specifica di os-release, se quel file manca, un programma può cercare /usr/lib/os-release; i dati dei due file non vanno combinati. Non creare né modificare questi file per far coincidere i numeri con quelli del kernel.

I concetti essenziali da ricordare

  • Kernel: il nucleo del sistema operativo, che gestisce le risorse hardware e fornisce funzioni comuni ai programmi.
  • Spazio utente: l’ambito in cui vengono eseguiti shell, comandi, servizi e applicazioni.
  • Distribuzione: il sistema completo che riunisce il kernel Linux e altro software, con strumenti per installarlo e amministrarlo.
  • Open source: software la cui licenza consente uso, modifica e ridistribuzione alle condizioni stabilite.

Per capire come Linux è nato e si è sviluppato, la storia di Linux, dal progetto del 1991 all’infrastruttura globale ricostruisce la cronologia e i passaggi principali. Questa lezione si concentra invece sui componenti e sulla terminologia di un sistema Linux attuale.