Tradizionalmente, i sistemi operativi sono basati su un approccio di tipo imperativo: per apportare modifiche alla propria configurazione (che comprende le impostazioni di base del sistema operativo stesso, le applicazioni installate o i pacchetti nel caso delle distribuzioni Linux, le impostazioni delle applicazioni, ecc.), si eseguono istruzioni o si effettuano operazioni “manuali” che, una dopo l’altra, ne alterano lo stato.
Definizione: sistema operativo imperativo
Un sistema operativo si dice imperativo quando la sua configurazione viene determinata da una sequenza di azioni che l’utente effettua sul sistema operativo stesso, come l’installazione di applicazioni o la modifica di file.
Esistono, però, sistemi operativi usa un approccio di tipo dichiarativo: la configurazione del sistema operativo è tutta contenuta (dichiarata) in uno o più file di codice e, a ogni avvio, il sistema viene letteralmente costruito esattamente come dichiarato nei file. Ciò permette di tenere traccia facilmente di tutto ciò che contribuisce alla configurazione del sistema, proprio perché è tutto scritto in dei semplici file testuali.
Definizione: sistema operativo dichiarativo
Un sistema operativo si dice dichiarativo quando la sua configurazione e il suo comportamento vengono descritti, sotto forma di codice, dichiarando lo stato desiderato, invece di specificare passo per passo come ottenerlo.
I sistemi operativi dichiarativi godono della proprietà di essere riproducibili e indistruttibili.
Esempi di sistemi operativi dichiarativi
L’esempio più noto di sistema operativo dichiarativo è NixOS, una distribuzione Linux basata sul package manager Nix, nonché il sistema operativo che attualmente uso (ti consiglio di dargli un’occhiata!).
Un altro importante esempio è Guix System, basato su GNU Guix.
Proprietà di riproducibilità dei sistemi operativi dichiarativi
I sistemi operativi dichiarativi godono della caratteristica di essere riproducibili, ossia ogni configurazione di questi sistemi si può facilmente riprodurre su altri computer senza doverla replicare “a mano” (per esempio non c’è bisogno di installare manualmente le applicazioni), semplicemente clonando i file contenenti la dichiarazione della configurazione desiderata.
Proprietà di indistruttibilità dei sistemi operativi dichiarativi
I sistemi operativi dichiarativi godono della caratteristica di essere indistruttibili, ossia è praticamente impossibile ritrovarsi nella condizione di avere un sistema operativo non funzionante perché ogni configurazione è determinata da una descrizione dello stato del sistema sotto forma di file di codice, quindi basterebbe recuperare file di codice precedenti che generano una configurazione funzionante per risolvere il problema (questo processo può essere facilitato dall’uso del controllo di versione per tenere traccia dell’evoluzione della configurazione).
Vantaggi dei sistemi operativi dichiarativi
Nei sistemi operativi dichiarativi, oltre al vantaggio di essere indistruttibili e riproducibili, quest’ultima proprietà offre ulteriori vantaggi:
- Proprio perché tutta la configurazione del sistema è salvata in file, basta semplicemente copiare questi file su altri computer su cui è installato lo stesso sistema operativo per riprodurre perfettamente la stessa identica configurazione; ovviamente, tutto ciò che non è parte della configurazione del sistema, quindi tutti quei dati come documenti, salvataggi di giochi, ecc., non saranno automaticamente trasferiti e, per farlo, bisogna usare altri metodi.
- Nel caso in cui ci sia bisogno di configurare multipli computer nello stesso modo, per esempio in un ufficio o in un laboratorio universitario in cui tutti i computer devono essere configurati allo stesso modo con gli stessi programmi installati, grazie ai sistemi operativi dichiarativi basta lavorare su un solo computer per effettuare delle nuove modifiche al sistema (come l’installazione di un nuovo programma) e, in automatico, propagarle a tutte le altre macchine, senza dover mettere mani su ognuna di esse.
- Ogni utente può facilmente condividere la propria configurazione a chiunque possa essere interessato ad avercela: per esempio io uso NixOS e puoi trovare la mia configurazione sul rispettivo repository sul mio account Forgejo.it.