Systemd – Cosa Devi Sapere
A meno che tu non abbia vissuto sotto a un sasso, o peggio – non ti importi molto di come funzioni Linux, devi aver sentito parlare di systemd, il (relativamente) nuovo sistema di init che sta sostituendo il vecchio e obsoleto SysV init, recentemente adottato dalla maggior parte delle principali distribuzioni Linux.
Cos’è un sistema di init?
Quando la tua macchina Linux si avvia, eseguirà prima un po’ di codice “integrato”, caricato dal BIOS o UEFI, seguito dal bootloader, che secondo la sua configurazione carica un kernel Linux. Il kernel carica i driver e, come primo lavoro, avvia il processo di init, che essendo il primo riceve il PID (Process ID) 1 assegnato.
Dal punto di vista dell’utente questo sembra come avviare la rete e i database, ecc., ma in realtà c’è un processo piuttosto complesso che avviene in background. I servizi vengono avviati, fermati e riavviati, spesso in parallelo tra loro. Alcuni vengono eseguiti con privilegi diversi dagli altri, i loro stati di servizio vengono segnalati e registrati, e vengono eseguiti molti altri compiti che permetteranno alle diverse parti del sistema di funzionare e di poter interagire con i propri utenti e con l’ambiente.

Come ciò venga implementato, tuttavia, è tutt’altro che uniforme, e questo è davvero il punto in cui tutto smette di essere comune e ben definito.
Il vecchio sistema di init
Il sistema di init utilizzato dalla maggior parte delle distribuzioni Linux mainstream fino a poco tempo fa era System V init (o SysV init in breve), che ha preso il suo nome da UNIX System V (pronunciato “System Five”), il primo sistema UNIX commercialmente disponibile. Il sistema operativo System V ha avuto un modo specifico di eseguire il suo processo di init, e SysV init è rimasto fedele a questo nel corso degli anni.

E sono passati molti anni. UNIX System V è stato originariamente rilasciato nel 1983, rendendo il SysV init un approccio di oltre 30 anni per avviare le macchine Linux.
La necessità di un cambiamento
Come è stato notato, SysV init è obsoleto e da tempo doveva essere sostituito. Alcune delle ragioni per questo includono:
- SysV init utilizza /sbin/init per avviare il processo di init, ma init stesso ha un ruolo molto limitato. init fa poco più che avviare /etc/init.d/rc, secondo la configurazione letta da /etc/inittab, che a sua volta eseguirà script per fare il vero lavoro del processo di init. Questo, a meno che non venga esplicitamente parallelizzato (come con startpar su Debian), avverrà sequenzialmente, uno script che inizia dopo l’altro, rendendo l’intero processo lento poiché ogni script deve attendere il completamento del precedente.
- SysV init non ha accesso ai PID o ai processi che ha avviato (indirettamente). Legge solo i PID e li associa a processi reali in modo circumstanziale e complicato.
- Per gli amministratori di sistema che cercano di modificare l’ambiente sotto il quale un certo processo dovrebbe avviarsi, è piuttosto difficile con SysV init. (Per raggiungere questo obiettivo dovranno modificare lo script di init responsabile dell’avvio del processo dato.)
- Esiste una certa funzionalità comune a ogni servizio che SysV non implementa, ma ogni processo dovrebbe implementarla da solo, come la “demonizzazione” (diventare un demone di sistema), che è un processo elaborato e lungo. Invece di implementare questi passaggi una sola volta, SysV richiede a ogni processo di fare il lavoro da solo.
- SysV lascia anche certe funzionalità a programmi esterni e non sa nulla sui servizi avviati da questi.
Tutto quanto sopra, e molti altri difetti di progettazione, o piuttosto il design obsoleto del sistema di SysV, hanno reso la creazione di un moderno sistema di init molto attesa.
Entra systemd
Ci sono stati molti tentativi di creare un sistema di init alternativo, di cui systemd è solo uno di essi. Ubuntu una volta eseguiva il proprio sistema di init chiamato upstart. Gentoo usa ancora OpenRC. Altri sistemi di init includono initng, busybox-init, runit, Mudur e altri.
Il motivo per cui systemd è un chiaro vincitore è che è stato adottato dalla maggior parte delle principali distribuzioni. RHL e CentOS naturalmente hanno preso la strada di systemd, poiché Fedora è stata la prima distribuzione ad adottare ufficialmente systemd nel 2011. Ma systemd è davvero diventato l’unico sistema di init dominatore, quando Debian 8 è passato ufficialmente a systemd, portando con sé Ubuntu e le sue derivate, superando l’opposizione iniziale di Canonical (o più precisamente di Mark Shuttleworth) verso systemd.
In che modo systemd è diverso?
- Systemd mira a fornire un modo unico e centralizzato per gestire il processo di init dall’inizio alla fine.
- Avvia e ferma processi e servizi, tenendo traccia delle loro dipendenze. Può persino avviare un processo in risposta a un requisito di dipendenza di un altro processo.
- Oltre ad avviare e fermare i processi durante il tempo di avvio, Systemd può anche avviare in qualsiasi momento quando il sistema è attivo in risposta a determinati eventi di attivazione, come quando un dispositivo è collegato.
- Non richiede nemmeno che i processi si demonizzino. A differenza di SysV init, systemd può gestire i servizi in esecuzione senza dover passare attraverso il lungo processo di diventare demoni.
- A differenza di SysV init, systemd conosce e tiene traccia di tutti i processi, compresi i PID, e ottenere informazioni sui processi è molto più semplice per gli amministratori di sistema sotto systemd.
- Systemd supporta i contenitori che sono essenzialmente ambienti di servizio isolati senza la necessità di macchine virtuali. Questo ha un grande potenziale per design di sistema più sicuri e semplici in futuro.

Naturalmente questi sono solo alcuni dei principali vantaggi. Per una discussione completa sui vantaggi di systemd, dovresti leggere la “ Dichiarazione di Posizione di Systemd ” di Debian 8.
Controversia
Certo, systemd non è stato accolto da tutti. Infatti, molti hanno e continuano a storcere il naso su di esso, chiamandolo monolitico e ingombrante, alcuni addirittura accusandolo di seguire la strada “windows” di avere tutto centralizzato. Molti sostengono che non è “la strada di Linux” e certamente systemd non sembra essere conforme agli standard POSIX, e se consideriamo systemd come un toolkit (al di là del solo binario), è decisamente enorme.

Tuttavia, systemd è chiaramente un passo avanti, e sebbene non sia perfetto, gran parte delle critiche che ha ricevuto è stata affrontata dal suo autore e sviluppatore originale Lennart Poettering. È sicuramente un progresso molto necessario e un passo avanti rispetto al vecchio sistema di init. Linus Torvalds, il creatore di Linux, sembra non preoccuparsi eccessivamente di systemd, e chi siamo noi per discutere con “Il Creatore”.
Conclusione
Essendo stato adottato da tutte le principali distribuzioni Linux, systemd è qui per restare. Qualunque cosa dicano alcuni amministratori di sistema per qualsiasi motivo, systemd è il futuro del Linux mainstream, che piaccia o meno agli utenti individuali, il che, alla luce dei suoi vantaggi distintivi, non è necessariamente una cosa negativa.
Per l’utente medio porta tempi di avvio più veloci e probabilmente sistemi più affidabili, mentre in futuro le distribuzioni che lo adottano possono diventare più “compatibili” tra loro. Dal lato degli utenti beneficeremo sicuramente del design di sistema più aggiornato e contemporaneo che porta sui nostri desktop.