Salta al contenuto principale

GNU Coreutils 9.12: cambiano gli strumenti invisibili che usiamo ogni giorno

Inviato da tuxsa il
GNU

GNU Coreutils 9.12 è disponibile. Il nuovo aggiornamento raccoglie correzioni, miglioramenti delle prestazioni e alcune nuove funzioni per uno dei componenti meno appariscenti ma più importanti di un sistema GNU/Linux.

Probabilmente moltissimi utenti utilizzano Coreutils ogni giorno senza sapere di utilizzarlo.

Quando da terminale eseguiamo comandi come ls per visualizzare i file, cp per copiarli, mv per spostarli, rm per eliminarli, chmod per modificarne i permessi, du per controllare lo spazio occupato o date per visualizzare e manipolare date e orari, stiamo normalmente utilizzando programmi appartenenti alle GNU Core Utilities.

Non costituiscono Linux.

Linux è il kernel, mentre GNU Coreutils è una raccolta di strumenti del progetto GNU che fornisce una parte delle funzioni fondamentali dello spazio utente.

È una distinzione che permette anche di comprendere meglio perché l'espressione GNU/Linux abbia un significato tecnico e storico preciso.

Un normale sistema GNU/Linux non è infatti composto soltanto dal kernel Linux. Intorno al kernel troviamo librerie, shell, compilatori, utility e migliaia di altri programmi provenienti da progetti differenti. Tra questi, gli strumenti GNU hanno avuto fin dall'inizio un ruolo fondamentale.

Coreutils 9.12 arriva circa cinque mesi dopo la versione 9.11. Secondo l'annuncio del progetto, nelle 21 settimane trascorse sono stati realizzati 288 commit da 16 contributori.

Una delle correzioni più curiose riguarda un problema presente praticamente dalle origini.

Alcuni comandi che attraversano ricorsivamente una struttura di directory — tra cui chcon, chgrp, chmod, chown, du e ls — potevano terminare con un errore quando, contemporaneamente alla loro esecuzione, altri processi eliminavano file presenti nella stessa gerarchia.

È una condizione perfettamente possibile su sistemi nei quali molti processi lavorano contemporaneamente sul filesystem.

Coreutils 9.12 modifica questo comportamento rendendo gli strumenti più robusti quando il contenuto delle directory cambia mentre viene analizzato.

È un ottimo esempio di cosa significhi mantenere software maturo.

Non sempre un bug importante è qualcosa introdotto nell'ultima versione. Alcuni comportamenti possono rimanere nel codice per decenni perché emergono soltanto in particolari condizioni, finché qualcuno li individua, prepara una correzione e riesce a integrarla senza compromettere tutti gli altri casi d'uso.

La nuova versione introduce anche l'opzione -A per uname.

uname è il comando utilizzato per ottenere informazioni sul sistema, come nome del kernel, architettura e release. Con la nuova opzione i valori possono essere mostrati insieme alle rispettive etichette, rendendo più semplice capire immediatamente a cosa corrisponde ogni informazione.

Anche stat e tail vengono aggiornati per riconoscere i nuovi filesystem FailFS e NULLFS.

Numerosi interventi riguardano poi le prestazioni.

Alcune operazioni di cp risultano più efficienti quando vengono copiati dati provenienti da pipe, mentre altri strumenti beneficiano di ottimizzazioni mirate destinate soprattutto a situazioni nelle quali devono elaborare grandi quantità di dati.

Sono miglioramenti che difficilmente cambieranno l'esperienza di chi copia occasionalmente un documento da terminale.

Su server, sistemi di build, container, script automatici e infrastrutture che eseguono milioni di operazioni, invece, anche piccole ottimizzazioni possono diventare significative.

Ed è proprio qui che emerge l'importanza di Coreutils.

Questi programmi vengono utilizzati direttamente dalle persone, ma ancora più frequentemente vengono utilizzati da altri programmi.

Uno script può chiamare sort, cut, head, tail, wc o date; un sistema di compilazione può utilizzare mkdir, install e cp; procedure di amministrazione possono concatenare decine di queste utility.

Sono piccoli mattoni sui quali viene costruita una quantità enorme di automazione.

Per questo modificarli richiede una particolare attenzione alla compatibilità.

Un comportamento apparentemente insignificante può essere diventato, nel corso degli anni, una dipendenza implicita per migliaia di script eseguiti su milioni di macchine.

La maturità di un progetto come GNU Coreutils non consiste quindi nell'avere raggiunto uno stato nel quale non esistono più problemi.

Consiste nella capacità di continuare a cambiare senza rompere ciò che nel frattempo è stato costruito sopra di esso.

C'è poi un aspetto storico che merita di essere ricordato.

Molti strumenti oggi raccolti in GNU Coreutils discendono da programmi Unix molto più antichi, ma il progetto GNU ne ha realizzato e mantenuto implementazioni libere, consentendo loro di diventare una parte fondamentale dell'ecosistema GNU/Linux.

Non sono programmi spettacolari.

Non possiedono interfacce grafiche da mostrare in una presentazione, non incorporano necessariamente intelligenza artificiale e raramente diventano protagonisti delle notizie tecnologiche.

Eppure rappresentano perfettamente una delle caratteristiche più importanti del Software Libero.

Un'infrastruttura informatica realmente aperta non nasce soltanto dai grandi programmi visibili all'utente.

Ha bisogno anche dei piccoli strumenti fondamentali che permettono di copiare un file, modificarne i permessi, contare delle righe, ordinare dati o interrogare il filesystem.

E questi strumenti devono essere documentati, verificabili, modificabili e mantenuti nel tempo.

GNU Coreutils 9.12 ci ricorda quindi che una parte enorme del Software Libero lavora senza farsi notare.

Quando apriamo un terminale e scriviamo ls, difficilmente pensiamo alle persone che continuano a mantenere quel comando dopo decenni.

Ma proprio questa continuità è una delle ragioni per cui possiamo costruire sistemi completi utilizzando componenti che non dipendono da un singolo produttore.

A volte il Software Libero più importante è semplicemente quello che utilizziamo ogni giorno senza accorgerci nemmeno che è lì.