Cos’è Linux: kernel, GNU, distribuzioni e software libero

Linux non è una singola distribuzione: è il kernel attorno a cui distribuzioni come Debian, Ubuntu, Fedora, Arch e openSUSE costruiscono sistemi completi con user space, package manager, servizi e desktop.

Dire “uso Linux” è comodo, ma tecnicamente può significare cose diverse. Linux è prima di tutto un kernel: il componente che gestisce CPU, memoria, processi, dispositivi, filesystem, networking e il confine tra applicazioni e hardware. Il sistema che usiamo ogni giorno nasce invece dall’unione del kernel con moltissimi programmi, librerie e strumenti provenienti da GNU e da altri progetti.

Per questo si incontra spesso il termine GNU/Linux. È corretto quando vogliamo sottolineare il ruolo dello user space GNU, anche se molte distribuzioni moderne includono componenti provenienti da numerosi progetti differenti e alcuni sistemi basati sul kernel Linux non usano affatto un tradizionale user space GNU.

Il kernel non è l’intero sistema operativo

Un sistema Linux completo contiene almeno:

  • kernel Linux;
  • librerie di base;
  • shell e utility;
  • sistema di init e gestione servizi;
  • package manager e repository;
  • strumenti di rete e amministrazione;
  • eventualmente server grafico, desktop environment e applicazioni.
# Versione del kernel
uname -r

# Informazioni sulla distribuzione
cat /etc/os-release

# Architettura
uname -m

Due macchine possono eseguire kernel Linux simili e comportarsi in modo molto diverso perché usano distribuzioni, librerie, sistemi di packaging e configurazioni differenti.

Cosa fa il kernel

Il kernel gira con privilegi più elevati delle normali applicazioni e offre servizi attraverso le system call. Quando un programma apre un file, crea un processo, alloca memoria o invia un pacchetto di rete, non parla direttamente al controller del disco o alla scheda Ethernet: chiede al kernel di farlo.

# Informazioni CPU viste dal kernel
lscpu

# Memoria
free -h

# Dispositivi a blocchi
lsblk

# Interfacce di rete
ip link

User space

Tutto ciò che gira fuori dal kernel appartiene allo user space: shell, web server, database, desktop, demoni e applicazioni. I processi sono isolati dal kernel attraverso memoria virtuale, identità Unix, capabilities e altri meccanismi.

Storicamente moltissimi strumenti fondamentali provengono dal progetto GNU: Bash, coreutils, GCC, glibc e altri. Ma una distribuzione contemporanea include anche systemd, OpenSSH, Python, nginx, KDE/GNOME e migliaia di pacchetti sviluppati altrove.

Software libero e open source

Il kernel Linux è distribuito sotto GNU GPLv2. Questo non significa che ogni programma eseguito su Linux debba avere la stessa licenza. Una distribuzione può contenere software GPL, BSD, MIT, Apache, firmware con licenze differenti e anche software proprietario installato dall’utente.

Il modello open source rende possibile studiare il codice, modificarlo e redistribuirlo secondo le condizioni della relativa licenza. È una delle ragioni per cui possono esistere molte distribuzioni costruite attorno allo stesso kernel.

Linux è multiutente e multitasking

Il sistema gestisce contemporaneamente processi appartenenti a utenti differenti. Ogni processo possiede identità, memoria virtuale, file descriptor e privilegi propri.

ps aux | head

id

who

loginctl list-sessions

Questa architettura è alla base della sicurezza Unix: un’applicazione normale non dovrebbe poter leggere arbitrariamente la memoria di un altro processo o scrivere file per cui non possiede autorizzazione.

Server, desktop, embedded, cloud

Linux non è legato a un solo tipo di macchina. È usato su server, workstation, notebook, dispositivi embedded, router, appliance di rete, sistemi HPC, cloud e container host. Android utilizza anch’esso il kernel Linux, pur avendo uno user space molto diverso da quello di una distribuzione GNU/Linux classica.

Perché esistono tante distribuzioni?

Il kernel da solo non decide quali pacchetti installare, quanto spesso aggiornarli, quale desktop usare, come organizzare i repository o quale politica di supporto adottare. È qui che entra in gioco la distribuzione.

Debian, Ubuntu, Fedora, Arch, openSUSE e le altre distribuzioni partono da obiettivi differenti: stabilità, software molto recente, supporto commerciale, semplicità desktop, personalizzazione o ambiti specialistici.

Il passo successivo è Il sistema Linux: kernel, processi, filesystem e servizi. Per capire invece come vengono assemblati questi componenti, vedi Come funzionano le distribuzioni Linux.

Riferimenti

The Linux Kernel Archives · GNU Project.