
Nell’articolo di oggi voglio parlare di Nixos, che non è solo una distribuzione Linux, ma è un sistema diverso di usare Linux e che a mio parere porta alcuni vantaggi estremamente importanti. Nixos è un sistema operativo Linux che ha alcune peculiarità che lo rendono particolarmente differente da ciò che già conosciamo ed usiamo.
Nei sistemi operativi Linux, definiamoli “standard” intendendo quelle versioni che esistono da decenni e che si sono fatte una reputazione, come Debian, Ubuntu, Fedora etc… , tendiamo ad avere un sistema operativo nel quale possiamo installare applicazioni usando dei comandi da terminale. Su Linux i packet manager, quindi la parte del sistema dedicata a gestire i pacchetti e le applicazioni, più utilizzati sono Apt, Yum, Pacman etc.
Quindi noi per esempio per installare un’app tenderemo ad utilizzare il comando :
# sudo apt install brave
(comando tipico per tutte le versioni Debian derivate per installare per esempio un browser)
Nixos invece funziona in maniera molto diversa. Infatti c’è un sistema operativo di base inalterabile, modificabile solo e soltanto tramite l’uso dell’utenza amministrativa nota come ROOT, senza la quale non potete andare direttamente ad agire sul sistema, tutto viene svolto dalle utenze normali che invece di passare comandi sulla shell possono dire al sistema che cosa installare tramite l’uso di un file di configurazione testuale. Riassumendo (repetita iuvant) noi non andiamo ad installare direttamente delle app dando dei complicati comandi nel terminale, ma abbiamo un file di testo che viene chiamato configuration.nix ; all’interno di questo file di configurazione andiamo a installare applicazioni, andiamo a personalizzare parti del sistema, installare servizi, eccetera eccetera. Detto questo facciamo una piccola overview di cosa è Nixos e perché si distingue dagli altri sistemi operativi in 3 punti principali:
- Il punto numero Uno è l’astrazione; abbiamo detto che tutti i pacchetti vengono astratti al posto che utilizzare tantissimi comandi dal terminale li definiamo in un file di configurazione, quindi nel sistema i pacchetti sono gestiti, con un file di linguaggio Nix. Es: vogliamo installare Brave, Tor e Telegram, non dobbiamo dare un sacco di comandi a terminale, ci basta aprire semplicemente il file di configurazione, aggiungere una linea con scritto Tor, una linea con scritto Brave, una linea con scritto Telegram, salvarlo, dire “aggiorna” al sistema e quando questo avrà caricato tutti i pacchetti ci troveremo all’interno del nostro sistema operativo tutte queste applicazioni installate. Il sistema inoltre è riproducibile. Cos’è? Cosa significa questo? Vuol dire che se io ho un computer con Nixos e voglio per esempio copiarlo uno a uno su un altro PC, mi basta copiare il file di configurazione da un PC all’altro, dare il comando per fare il build di un nuovo sistema operativo ed otterremo due sistemi operativi di base che sono, tra virgolette, identici e immutabili.
[Per chiarezza diciamo, cosa che i più esperti e navigati già avranno capito, che NixOS non ha inventato nulla, sistemi per “clonare” i pacchetti già installati su una macchina anche su altre erano già possibili, ma è stato reso più facile e più fruibile l’uso di un metodo di configurazione esportabile che può assomigliare anche ai concetti di Ansible, che rende la gestione di un sistema Linux più accessibile a tante persone che non amano dover continuamente imparare “linguaggi” di programmazione/configurazione di sistemi, che in questo modo diventano solo un’interfaccia di replicazione velocizzando notevolmente i tempi di installazione e configurazione di una nuova macchina, sia essa fisica o virtuale…].
Tutte le personalizzazioni sono dunque integrate all’interno del file di configurazione di Nix. Se io lo copio da un computer all’altro, i due PC diventano praticamente identici, quindi installano gli stessi pacchetti, le stesse personalizzazioni dunque diventa molto facile andare a copiare per esempio il nostro computer sul nostro portatile, sul nostro server. Diventa estremamente più semplice fare due macchine identiche e con le stesse proprietà. Nix supporta gli Atomic Upgrade, per dirlo in parole facili, quando voi aggiornate il vostro sistema operativo non si potrà più bloccare con facilità. In poche parole, può capitare, in generale (capita sempre meno , ma può succedere) che quando si fanno importanti aggiornamenti di sistema o si aggiorna il Kernel del sistema operativo…, questo facendo l’upgrade di interi blocchi di librerie, possa andare in conflitto con parti della gestione hardware (molto spesso si hanno problemi con la gestione dei componenti delle schede video a causa di librerie parzialmente open source o proprietarie) dando come esito finale o che il sistema non riesce ad avviarsi o che non riesca a far partire l’interfaccia grafica, perda il punto di accesso dei permessi dell’utente con cui state cercando di collegarvi etc etc…; con gli aggiornamenti atomici invece se c’è qualsiasi tipo di problema, tipo il computer non si avvia, non parte, si corrompono delle funzioni fondamentali di esso; questo torna automaticamente alla versione precedentemente funzionante. - La parte successiva interessante di NixOS è l’immutabilità. Come detto prima, il sistema non può essere modificato e quindi nemmeno, per esempio, potreste fare dei casini accidentalmente oppure a causa di software malevoli. Tranne nei casi in cui DECIDIATE di operare con l’utente ROOT, il sistema è sempre in protezione, fermo e immutabile. Quindi è molto più difficile fare casini all’interno di esso, sia in maniera involontaria che, per esempio, in maniera malevola.
- L’ultima parte su cui ci concentriamo è proprio il pacchetto Nix ossia il packet manager di NixOS, quindi l’equivalente di APT su Debian/Ubuntu, il quale ha delle funzionalità in più rispetto agli altri sistemi operativi, a mio parere, molto interessanti. Nix offre aggiornamenti e rollback atomici, più versioni dell’installazione dei pacchetti, gestione dei pacchetti multiutente e configurazione semplice degli ambienti di compilazione per un pacchetto, indipendentemente dai linguaggi di programmazione e dagli strumenti utilizzati dallo sviluppatore.
Sotto Nix, i pacchetti sono costruiti da un linguaggio di pacchettizzazione, il linguaggio Nix è progettato per creare e comporre comodamente derivazioni : descrizioni precise di come i contenuti dei file esistenti vengono utilizzati per derivare nuovi file. Questo approccio funzionale alla gestione dei pacchetti garantisce che l’installazione o l’aggiornamento di un pacchetto non possa danneggiare altri pacchetti. Nix ha anche il supporto multiutente, il che implica che gli utenti di sistema normali (o non privilegiati) possono installare i pacchetti in modo sicuro e ogni utente è identificato da un profilo (una raccolta di pacchetti nello store Nix che appare nel PERCORSO dell’utente). Nel caso in cui un utente abbia installato un pacchetto, se un altro utente tenta di installare lo stesso pacchetto, il pacchetto non verrà compilato o scaricato una seconda volta.
In più è possibile eventualmente anche utilizzare software e applicazioni senza doverli direttamente installare. Questo, a mio parere, è un vantaggio comodissimo perché, per esempio, se voi state utilizzando Ubuntu e volete provare Electrum, perché non l’avete mai utilizzato, su NixOS potete semplicemente testare, utilizzare un software in maniera temporanea. Quindi lo provo, sia che mi piaccia, non mi piaccia, una volta che chiudo la shell, chiudo il programma, è tutto scomparso. Utilissimo per, per esempio, scoprire un software che non funziona. Invece se dovete utilizzare software che utilizzate soltanto occasionalmente, tipo, non so, balena Hatcher per creare chiavette, un wallet Bitcoin, non dovete per forza tenere tutto installato sul PC, potete anche avviare un programma una sola volta e nel momento in cui lo chiudete tutto dimenticato, tutto pulito.
NIX-BITCOIN
(https://github.com/fort-nix/nix-bitcoin)
Alcuni sviluppatori di Bitcoin Core, esperti di sicurezza privacy e conoscenze in ambito bitcoin hanno sviluppato questo pacchetto per nixos che si chiama nix-bitcoin ; nix-bitcoin è dunque una raccolta di pacchetti Nix e moduli NixOS per installare facilmente nodi Bitcoin completi, con particolare attenzione alla sicurezza.
nix-bitcoin può essere utilizzato per portafogli personali o commerciali, per infrastrutture pubbliche o per backend di applicazioni Bitcoin. In tutti i casi, l’obiettivo è quello di fornire sicurezza e privacy per impostazione predefinita. Tuttavia, sebbene nix-bitcoin sia oggi già utilizzato in produzione, è ancora considerato sperimentale.
I nodi nix-bitcoin possono essere distribuiti su hardware dedicato, macchine virtuali o container. I pacchetti Nix e i moduli NixOS possono essere utilizzati indipendentemente e combinati liberamente.
nix-bitcoin è costruito sulla base del linguaggio Nix e NixOS, che forniscono potenti astrazioni per mantenerlo altamente personalizzabile e manutenibile. Ne sono testimonianza le robuste funzioni di sicurezza di nix-bitcoin e il suo potente framework di test; inoltre l’esecuzione di nix-bitcoin non richiede alcuna esperienza precedente con l’ecosistema Nix.
Considerando dunque in fine tutti punti trattati a favore di NixOS + NixBitcoin, vale certamente la pena per chi è sempre interessato a nuove possibilità e funzioni di accrescimento delle proprie libertà lavorative e tecnologiche, di fare almeno un test, uno studio a riguardo, per cercare di comprendere i tanti vantaggi che un sistema come NixOS ed il suo linguaggio di programmazione/configurazione, possono dare al miglioramento del tempo di lavoro, sicurezza e scalabilità dei sistemi.





