Salta al contenuto principale

coreboot 26.09: liberare il computer prima ancora che parta Linux

Inviato da tuxsa il
coreboot

È disponibile coreboot 26.09, nuova versione del progetto libero che prova a sostituire una delle componenti meno visibili e contemporaneamente più profonde dei nostri computer: il firmware utilizzato per inizializzare l'hardware prima dell'avvio del sistema operativo. La release porta oltre 1.300 modifiche realizzate da 120 autori e concentra gran parte del lavoro sulla sicurezza e sull'affidabilità del codice, ma offre soprattutto l'occasione per porre una domanda che spesso dimentichiamo quando parliamo di Software Libero: quanto è realmente libero un computer sul quale abbiamo installato GNU/Linux?

Quando accendiamo una macchina Linux siamo portati a pensare che il primo software eseguito sia il sistema operativo, ma in realtà Linux arriva molto più tardi. Prima che il kernel possa prendere il controllo devono essere inizializzati processore, memoria, bus, dispositivi e numerose altre componenti hardware; deve essere individuato il dispositivo dal quale effettuare l'avvio e deve infine essere caricato il programma che permetterà al sistema operativo di partire.

Gran parte di questo lavoro viene normalmente svolta dal firmware della scheda madre, oggi generalmente attraverso UEFI, erede del tradizionale BIOS.

È software a tutti gli effetti, ma per moltissimi computer rimane software proprietario, difficilmente ispezionabile e strettamente legato al produttore dell'hardware.

coreboot cerca da molti anni di costruire un'alternativa libera a questo modello.

Il progetto non è un sistema operativo e non sostituisce Linux. Il suo compito consiste principalmente nell'inizializzare l'hardware e portare la macchina nel più breve tempo possibile a uno stato nel quale possa essere eseguito un payload, cioè un altro programma incaricato di proseguire il processo di avvio.

Quel payload può essere, per esempio, SeaBIOS, Tianocore oppure direttamente un bootloader o un'altra componente appropriata allo scenario nel quale coreboot viene utilizzato.

Questa architettura rende evidente qualcosa che normalmente rimane nascosto: l'avvio di un computer non è un singolo evento, ma una catena di software che progressivamente assume il controllo della macchina.

Possiamo quindi installare Debian, Fedora, Arch Linux o qualsiasi altra distribuzione completamente libera dal punto di vista del sistema operativo e continuare comunque ad avere, alcuni livelli più in basso, firmware proprietario necessario affinché la macchina possa arrivare al punto nel quale Linux viene finalmente eseguito.

coreboot prova a ridurre questa zona opaca.

La nuova versione 26.09 arriva dopo circa tre mesi di sviluppo e il progetto segnala oltre 1.300 commit realizzati da 120 autori, tra i quali 29 persone che hanno contribuito per la prima volta.

Questa volta il lavoro non è concentrato prevalentemente sull'aggiunta di nuovo hardware supportato, ma soprattutto sul consolidamento dell'infrastruttura esistente, con numerosi interventi dedicati alla validazione dei dati e alla robustezza del codice.

È un orientamento particolarmente importante quando parliamo di firmware.

Un errore in una normale applicazione può provocare il crash del programma; un errore nel software eseguito nelle primissime fasi dell'avvio opera invece in un ambiente estremamente privilegiato, prima che molte delle protezioni offerte dal sistema operativo siano disponibili.

Per questo coreboot 26.09 ha sottoposto a revisione diversi parser utilizzati per elaborare dati provenienti dall'esterno.

Il parser EDID, utilizzato per interpretare le informazioni fornite dai display, verifica ora con maggiore attenzione la lunghezza dei dati ed evita di leggere blocchi oltre i limiti disponibili; vengono effettuati nuovi controlli anche sui Device Tree, mentre il renderer BMP verifica dimensioni delle immagini, offset e geometria del framebuffer prima di procedere con la visualizzazione.

Sono stati rafforzati anche i controlli relativi a CBFS, il filesystem utilizzato da coreboot per organizzare diversi componenti all'interno dell'immagine firmware, e a FMAP, mentre le risposte provenienti dal TPM2 vengono sottoposte a nuove verifiche sulla dimensione dei dati.

Presi singolarmente, interventi simili possono apparire estremamente tecnici e poco interessanti per un normale utente, ma esprimono uno dei principi fondamentali della sicurezza: non fidarsi automaticamente dei dati ricevuti e verificarne struttura, dimensioni e coerenza prima di utilizzarli.

È particolarmente significativo che questo lavoro venga svolto proprio nel firmware, perché ci troviamo in una fase nella quale il sistema operativo non ha ancora assunto il controllo completo della macchina.

coreboot 26.09 introduce inoltre un cambiamento importante nel processo di compilazione, passando allo standard C23 del linguaggio C. Il progetto può così utilizzare caratteristiche più moderne del linguaggio e del compilatore per individuare errori e rendere progressivamente più rigorosa la base di codice.

Prosegue anche il lavoro relativo alle piattaforme AMD Turin, mentre vengono introdotti miglioramenti nella generazione ACPI per le fotocamere Intel MIPI quando vengono utilizzati sistemi diversi da ChromeOS.

Un'altra novità riguarda i menu di configurazione CFR, che possono ora essere condivisi tra più schede invece di richiedere definizioni duplicate. Anche in questo caso il vantaggio non consiste soltanto nel ridurre qualche riga di codice, perché diminuire la duplicazione significa rendere più semplice mantenere configurazioni coerenti e ridurre la possibilità che due implementazioni quasi identiche comincino progressivamente a divergere.

La release interviene inoltre sulle cosiddette LPC decode windows, facendo in modo che il compilatore possa validare determinate configurazioni già durante la costruzione del firmware. Spostare alcuni controlli dal momento dell'esecuzione al momento della compilazione significa cercare di individuare un errore prima ancora che il firmware venga installato sulla macchina.

Sono tutti cambiamenti che raccontano una release apparentemente poco spettacolare ma probabilmente molto importante per la salute a lungo termine del progetto.

Il firmware, del resto, è uno di quei settori nei quali la ricerca della novità a tutti i costi avrebbe poco senso. La qualità principale richiesta a un componente che deve inizializzare correttamente un computer ogni volta che viene acceso è soprattutto quella di essere prevedibile, verificabile e affidabile.

Ma la nuova versione permette soprattutto di affrontare un problema più generale.

Quando parliamo di libertà informatica tendiamo infatti a fermarci al sistema operativo e alle applicazioni: sostituiamo Windows con GNU/Linux, Microsoft Office con LibreOffice, Photoshop con GIMP o Krita e consideriamo progressivamente liberata la nostra macchina.

È certamente un passaggio fondamentale, ma sotto il sistema operativo continua a esistere altro software.

Firmware della scheda madre, firmware dei dispositivi, microcodice della CPU, controller di rete, GPU, SSD e numerose altre componenti possono incorporare programmi che l'utente non vede e sui quali possiede un controllo estremamente limitato.

coreboot non risolve completamente questo problema.

Ed è importante dirlo chiaramente.

Su numerose piattaforme moderne continuano a essere necessari binary blob proprietari, perché alcuni produttori non pubblicano la documentazione necessaria oppure richiedono firmware e componenti firmati che non possono essere sostituiti da implementazioni libere.

In altri casi l'inizializzazione di parti particolarmente complesse dell'hardware dipende da codice fornito direttamente dal produttore del processore.

Per questo installare coreboot non significa automaticamente ottenere un computer completamente libero.

Significa però spostare il confine.

Una parte del codice che normalmente sarebbe una scatola nera può diventare disponibile, verificabile, modificabile e compilabile indipendentemente.

E questo cambia profondamente il rapporto con la macchina.

Se il codice sorgente del firmware è disponibile, un ricercatore può analizzarlo alla ricerca di vulnerabilità, un produttore può adattarlo al proprio hardware, una comunità può continuare a mantenerlo anche quando il dispositivo non rappresenta più una priorità commerciale e un utente tecnicamente competente può sapere almeno in parte cosa accade prima che il proprio sistema operativo venga avviato.

Il problema diventa ancora più interessante se lo osserviamo dal punto di vista della durata dell'hardware.

Un produttore commerciale ha inevitabilmente un ciclo di vita dei propri prodotti. Dopo alcuni anni una scheda madre o un portatile possono non ricevere più aggiornamenti del firmware, anche quando l'hardware continua a essere perfettamente funzionante.

Con il Software Libero esiste almeno la possibilità che la manutenzione continui indipendentemente dal produttore originario, naturalmente a condizione che esista una comunità interessata e che l'hardware sia sufficientemente documentato.

Non è una garanzia, ma è una possibilità che il software proprietario normalmente non offre.

Ed è anche una questione ambientale.

Prolungare la vita utile dei computer significa ridurre la necessità di sostituire hardware ancora funzionante soltanto perché una componente software non viene più mantenuta. La sostenibilità digitale non riguarda quindi soltanto il consumo energetico dei programmi, ma anche la possibilità di continuare a controllare e aggiornare le macchine che già possediamo.

coreboot mostra contemporaneamente quanto sia difficile raggiungere questo obiettivo quando l'hardware nasce senza essere progettato per l'apertura.

Non possiamo scrivere un firmware libero per un dispositivo se non sappiamo come inizializzarlo e non possiamo sostituire un componente quando il produttore impedisce tecnicamente l'esecuzione di alternative.

Per questo hardware aperto e Software Libero sono problemi strettamente collegati.

La libertà del sistema operativo può arrivare soltanto fino al punto nel quale l'hardware permette al software di arrivare.

È una questione che diventa ancora più importante quando il computer non è semplicemente il nostro portatile personale, ma una macchina utilizzata all'interno di un'azienda, una scuola, una Pubblica Amministrazione o un'infrastruttura critica.

Se parliamo seriamente di autonomia digitale non possiamo limitarci a domandare quale sistema operativo venga mostrato sullo schermo. Dobbiamo chiederci anche quale software venga eseguito prima, chi può controllarlo, chi può aggiornarlo e cosa accade quando il produttore decide di non mantenerlo più.

Da questo punto di vista coreboot rappresenta uno dei progetti più radicali del Software Libero, non perché proponga qualcosa di particolarmente appariscente, ma perché interviene prima ancora che l'utente possa vedere qualcosa sullo schermo.

La libertà digitale comincia infatti molto prima del desktop.

Comincia nel momento in cui premiamo il pulsante di accensione e una sequenza di programmi, normalmente invisibile, decide come inizializzare la macchina che abbiamo acquistato.

coreboot 26.09 ci ricorda che installare GNU/Linux è un passo fondamentale verso il controllo del nostro computer, ma non è necessariamente il primo passo compiuto dal computer stesso. Prima di Linux c'è il firmware, e anche lì la possibilità di leggere, studiare, modificare e mantenere il codice continua a fare la differenza.