# UEFI

Unified Extensible Firmware Interface (UEFI) è un'interfaccia informatica tra il firmware e il sistema operativo di un PC progettata per sostituire il BIOS a partire dal 2010.
È un brevetto di Intel, che ha importato formati e funzionalità di Microsoft Windows: scritto in linguaggio C, supporta funzioni di telecontrollo, diagnostica da remoto, installazione di sistemi operativi, o di aggiornamento software anche se nessun sistema operativo risiede nel PC, disponibile su piattaforme Itanium (IA-64), x86 (a 32 e a 64 bit), e ARM.
La Unified EFI Forum è l'associazione di imprese che decide la specifica tecnica di UEFI e di UEFI 2.0 a partire dal 2006.

## Storia

La tecnologia originaria venne creata da Intel nel 2003 al momento della presentazione della propria architettura IA-64 del processore Itanium e poi ripresentata in maniera decisamente più consistente insieme a Microsoft a fine 2003. A partire dal 2005 venne poi ripresa e sviluppata dal consorzio UEFI (Unified EFI Forum).
Dopo un debutto sul mercato agli inizi del 2006 grazie ai primi iMac Intel Core Duo di Apple, è stata introdotta in volumi con i processori Intel Core con architettura Sandy Bridge, dopo esser stata affiancata a un'altra tecnologia Intel arrivata a fine 2005, iAMT per la gestione remota dei sistemi. Il primo chipset di Intel a supportare l'UEFI è arrivato all'inizio del 2007 grazie alla piattaforma mobile Santa Rosa basata sul chipset Crestine e il processore Merom, ma all'incirca dal 2010 i nuovi PC - e anche le workstation e i server - hanno cominciato progressivamente a essere corredati dall'UEFI o comunque con firmware della scheda madre avente almeno come opzione la funzione di efi-boot del sistema operativo. Oltre Apple anche MSI ha finora proposto schede madri dotate di firmware UEFI. Dal 2011 tutte le nuove schede madri di ASUS e ASRock implementano firmware UEFI, in vista della sostituzione totale del BIOS a partire dal 2020.
È errata l'opinione che l'UEFI sia una tecnologia voluta da o di Microsoft: i fondatori del consorzio (a parte Intel che ha il brevetto) sono i grandi produttori mondiali dell'informatica (tra cui Apple) e tra i membri (tra cui un big come IBM) ci sono anche le grandi società internazionali del mondo Linux e open source. Tutti i principali produttori di componenti (sia HW che SW) fanno parte del forum.
Il consorzio (UEFI forum) revisiona periodicamente la specifica UEFI che, quindi, è identificata con una versione. I produttori devono recepire le modifiche nei firmware da essi sviluppati. Sul sito web del forum sono disponibili anche le versioni superate della specifica tecnica.

## Descrizione generale

Sostanzialmente e per precisione, UEFI ha inglobato, come specifico componente, il BIOS, non lo ha sostituito. Il BIOS continua a essere il firmware incorporato nella scheda madre ma l'UEFI, come nuova interfaccia grafica con l'utente, ne sovrintende l'esecuzione. Inoltre, l'ambiente UEFI, permette di avere molte funzioni aggiuntive rispetto al solo BIOS.
Consente ai produttori di integrare nel firmware della scheda madre applicazioni e nuove funzionalità, fra cui strumenti per la diagnostica e il ripristino dei dati, servizi di crittografia e funzionalità per la gestione dei consumi, presentando un'interfaccia grafica che consente anche di adoperare un mouse. Ciò è dovuto al fatto che è stata superata la limitazione di comandi a 16 bit e con 1 MB appena di memoria caricata. Inoltre, mediante l'interfaccia UEFI del firmware è possibile eseguire molte operazioni di gestione e amministrazione prima impossibili con BIOS, in aggiunta, le applicazioni e i driver UEFI, essendo indipendenti dal sistema operativo, facilitano la procedura di avvio e offrono flessibilità amministrativa. Con sistemi Windows (si pensi alle versioni server) l'unico sistema per partizionare dischi con capacità maggiore di 2 terabytes (per le limitazioni del MBR) è quello di avere una scheda madre dotata di firmware UEFI, utilizzando sistemi operativi a 64 bit per i volumi avviabili.
È in grado di rendere più semplice la gestione remota di PC e server, aiutando così le aziende a ridurre i costi di manutenzione e supporto, e può gestire direttamente le connessioni di rete per connettersi a una LAN o a internet. A tal proposito i firmware basati sullo standard UEFI sono dotati di alcune funzionalità specifiche per la gestione delle reti ed eventualmente anche di un browser Web. Inoltre, superando il MBR e sostituendolo con lo standard GPT, si può partizionare il disco con sole partizioni primarie senza più la necessità di partizioni estese e logiche, può ridurre i tempi di caricamento del sistema operativo e può supportare, similmente a quanto succede con i computer palmari, forme di avvio istantaneo. L'UEFI ha anche il compito di dotare il firmware del PC di un'interfaccia grafica efficace, facile da usare e in grado di supportare le risoluzioni video permesse dalle moderne schede grafiche. In aggiunta a questo, l'UEFI fornisce un ambiente per il boot multipiattaforma capace di fornire i servizi base richiesti dai sistemi operativi. Infatti, i programmi UEFI sono scritti in linguaggi molto più moderni di quelli utilizzati per sviluppare i BIOS.
Può anche eseguire applicazioni di alto livello scritte attraverso strumenti di programmazione standard. Ciò è reso possibile dal fatto che le interfacce di UEFI si appoggiano su codice in linguaggio C++, evitando così l'utilizzo di codice assembly utilizzato nei vecchi BIOS.
Secondo Microsoft (che fa parte del consorzio UEFI composto da oltre 140 aziende), il firmware UEFI, oltre a "migliorare l'interoperabilità del software e risolvere le limitazioni del BIOS", presenta i seguenti vantaggi:
* miglioramento della sicurezza grazie alla protezione del processo prima dell'avvio da attacchi di tipo bootkit.
* maggiore velocità dei tempi di avvio e di ripresa dallo stato di ibernazione.
* supporto di unità maggiori di 2,2 terabyte (TB).
* supporto di driver di dispositivi firmware a 64 bit che il sistema può utilizzare per indirizzare più di 17,2 miliardi di byte (GiB) di memoria durante l'avvio.
* possibilità di utilizzare hardware UEFI.
Qualsiasi sistema operativo sia installato su un computer dotato di tecnologia UEFI installerà (a meno che la partizione EFI non sia già presente, nel qual caso aggiungerà nella partizione la propria cartella EFI) sul disco una partizione che funge da interfaccia tra il firmware e il sistema operativo stesso: questa partizione è in formato FAT32 ed è collocata all'inizio del disco ed è necessaria per l'avvio dei sistemi operativi installati, o su memorie di massa avviabili su periferiche esterne; non va confusa, però, né con la partizione di sistema riservata (ad esempio quella di Windows) né con quella di ripristino (recovery). Il menù UEFI di impostazione dell'avvio (boot setup) permette solitamente l'avvio di volumi non EFI e/o il partizionamento MBR: occorre agire sui comandi disponibili che abilitano la modalità Bios legacy, supportata però solo nelle prime versioni, e disabilitando il secure boot.
Come è accaduto per il Bios, è errato assimilare superficialmente l'UEFI al firmware (della scheda madre del computer): sono due componenti logicamente e fisicamente contigui ma diversi.

## Caratteristiche principali
### Interfaccia grafica

Come detto sopra, la novità più appariscente è l'interfaccia utente che è di tipo grafico (che, tra l'altro, supporta anche il mouse/touchpad). Inoltre consente l'esecuzione di operazioni che l'ambiente BIOS non permetteva (esportare, copiare, eliminare, caricare, accedere alla rete, etichettare, ecc.). Supporta comandi e funzioni di scansione dell'idoneità dei componenti hardware della macchina. Presenta tutte le caratteristiche HW e SW della piattaforma. Dispone di un proprio boot manager, prescindendo da quello del sistema operativo.
L'esistenza della partizione EFI consente di installare strumenti specifici, caricati direttamente dal firmware, a cominciare da utilità di diagnostica e aggiornamento.

### Licenza sistema operativo

Una delle funzioni innovative dell'UEFI è la funzione di registrazione della licenza digitale del sistema operativo in un'area di memorizzazione specifica del chip che ha a bordo il firmware. Questa registrazione (a livello di firmware) integra quella incorporata nel sistema operativo e/o nell'account on line dell'utente (quando previsto dal produttore del sistema operativo).
La registrazione della licenza digitale nell'Uefi consente di certificare la genuità del prodotto, evitare o semplificare l'attivazione del sistema operativo, agevolare il censimento delle licenze, eliminare il ricorso a informazioni "materiali" (es. etichette), non obbligare a digitare gli estremi della chiave (product key o seriale), impedire la pirateria e altro.
Le licenze digitali possono essere caricate dal produttore del dispositivo (system integrator) in sede di preinstallazione del sistema operativo (factory setup) oppure registrate quando l'utente acquista una licenza digitale di un sistema operativo. Una scheda madre nuova (acquistata come articolo a sé stante) non contiene alcuna licenza digitale di sistema operativo. Si noti che una licenza digitale potrebbe anche essere impiegata indipendentemente dall'onerosità del prodotto (ad esempio sistemi operativi freeware).

### Gestore di avvio

UEFI ha un proprio gestore di avvio (boot manager) che identifica, memorizza ed elenca qualsiasi sistema avviabile (quindi non solo sistemi operativi ma anche ambienti di ripristino e simili). Nel caso di sistemi permanenti (in pratica installati nella memoria di massa) la voce (entry) EFI di ciascun caricatore di avvio (boot loader) presente è registrata nella sezione OS boot manager nell'elenco delle periferiche di avvio della macchina. Queste voci sono scritte nel menù del gestore di avvio Uefi da parte dei (boot manager) dei sistemi operativi in fase di installazione. Non vanno però confuse le due cose: il gestore di avvio UEFI appartiene al firmware (ambiente pre-sistema operativo, archiviato in un chip montato sulla scheda madre della macchina); un gestore di avvio (di un sistema operativo qualsiasi) appartiene al sistema operativo stesso (archiviato su una unità locale o accessibile da un percorso di rete).
Ambienti UEFI un po' più avanzati di quelli basici hanno dei comandi incorporati per manipolare (spostare, eliminare, copiare, ecc.) le voci nella schermata di avvio della sezione delle unità locali fisse.

### Avvio protetto

Avvio protetto (secure boot) è la tecnologia UEFI che consente di bloccare caricatori di avvio (boot loader), kernel e driver non certificati dal consorzio o, più precisamente, non firmati con una chiave crittografica autorizzata, contenuta in un archivio del firmware. Lo scopo è principalmente la sicurezza: impedire che malware o altre minacce (ad esempio modifiche ai certificati non validate) possano essere avviati all'accensione/riavvio della macchina costituendo così un grave rischio per il sistema (inteso come intera macchina, dato che il firmware è a monte del sistema operativo).
La tecnologia si basa su una catena di trust (autenticità, fidatezza): una serie di chiavi (pubbliche e private) e di certificati (digitali), tra cui il componente fondamentale è la chiave di piattaforma (Platform Key - PK anche Machine-Owner Key - MOK) generata, firmata, caricata e registrata (enrolled) dal produttore del dispositivo in fabbrica (setup mode) oppure successivamente dall'utilizzatore utilizzando chiavi di fondazioni Open Source o proprietarie. La funzione esamina le chiavi e i certificati archiviati in una memoria fisica montata sulla scheda madre (secure boot database), sottoposti ad aggiornamento da parte del produttore della macchina/scheda madre quando distribuisce una nuova versione EFI, eliminabili (clear), a volte esportabili su chiavetta USB, personalizzabili (user mode) e ricaricabili (load cioè reset) tramite copia di riserva predefinita di fabbrica (questa operazione esegue il rinnovo della chiave che diventa "registrata", riportando lo stato di avvio protetto in "attivato"). Avvio protetto può essere abilitato quando il sistema è in modalità utente e tale modalità è impostabile solo quando si è registrata la chiave di piattaforma (PK). Se si elimina dal sistema la chiave PK si porta in stato disabilitato (cioè grigio, non impostabile) avvio sicuro e occorrerà successivamente registrare nuovamente una chiave di piattaforma (solitamente quella del produttore OEM, predefinita di fabbrica) per poter abilitare e, di conseguenza attivare, avvio sicuro.
Per poter eseguire componenti privi di chiave certificata oppure sistemi legacy (modalità BIOS) o consentire la configurazione MBR occorre disabilitare l'avvio protetto e/o abilitare il modulo di compatibilità (CSM-Compatibility Support Module). Un altro metodo è quello di operare nella sezione "autorizzati" (signature database) caricando certificati personalizzati.

### Garanzia produttore

La piattaforma permette al produttore della macchina di memorizzare i termini dell'eventuale garanzia fornita, in primis la data di scadenza. In questo modo l'utente può monitorare lo stato della garanzia sia attraverso il menù del firmware che attraverso strumenti del costruttore (applicazione o sito web).

### La compatibilità col BIOS

Rispetto a quanto temuto durante lo sviluppo della tecnologia, qualsiasi sistema UEFI, di qualunque produttore, permette di avviare qualsiasi sistema operativo, sia in modalità EFI (se supportata) che legacy. Questo è possibile grazie al Compatibility Support Module (CSM) ovvero disattivando il "secure boot" ed, eventualmente, attivando il legacy support solo per le versioni class 0.

### Utilizzo nei sistemi operativi

* IBM impiega UEFI come tecnologia abilitante sulle sue macchine server sin dalla uscita della prima versione.
* HP-UX usa UEFI come sistema di boot sui sistemiIA-64.
* HP OpenVMS usa UEFI dal 2010.
* Apple impiega UEFI per la sua linea di Mac basata su chipset Intel. Mac OS X Tiger per Intel e Mac OS X Leopard supportano UEFI v1.10 in modalità 32-bit anche su CPU a 64-bit.
* La versione Itanium di Windows 2000 supporta UEFI 1.10. Windows Server 2003 per IA-64, Windows XP 64-bit Edition e Windows 2000 Advanced Server Limited Edition, tutte versioni per la famiglia di processori Intel Itanium, supportano UEFI, un requisito della piattaforma dovuto alla specifica DIG64.
* Microsoft ha introdotto il supporto UEFI per il sistema operativo Windows x64 con Windows Server 2008 e Windows Vista Service Pack 1. Anche le versioni a 64-bit di Windows 7 sono compatibili con UEFI. Microsoft non offriva allora un supporto per UEFI a 32-bit mentre a partire da Windows 8 tutte le altre edizioni di Windows (32 e 64 bit) sono ovviamente compatibili con UEFI, anzi sono specificamente sviluppate avendo il nuovo standard di firmware come base.
* Linux è stato in grado di utilizzare UEFI all'avvio usando il boot loader UEFI elilo o, successivamente, una versione UEFI di GRUB.

## Aggiornamento

Uefi, per sua natura, richiede periodici aggiornamenti della piattaforma da parte dei produttori. Questi aggiornamenti non sono limitati a nuove funzioni, miglioramento delle prestazioni, correzione dei difetti ma, spesso, contengono riparazioni a vulnerabilità di sicurezza. È importante eseguire gli aggiornamenti perché gli antimalware dei sistemi operativi non agiscono sulle vulnerabilità Uefi (si diffondono agenti maligni specifici per l'Uefi rispetto ai quali, una volta che hanno infettato l'ambiente, anche la completa formattazione dell'unità non serve a nulla).
Rispetto al Bios, l'aggiornamento Uefi è più affidabile in relazione alle anomalie del processo di flashing (la scrittura istantanea del firmware archiviato nel chip relativo). Solitamente esiste una procedura di emergenza che ripristina il firmware nel caso di danni cagionati dal processo di aggiornamento (il più grave è il mancato avvio e/o accensione). Comunque, la procedura va sempre eseguita con cautela e perizia, con macchina connessa all'alimentazione elettrica e, per i notebook, con dispositivo a piena carica. Questa riscrittura potrebbe anche sanare un firmware infettato da malware Uefi.

## La politica di Microsoft

Il requisito che i dispositivi certificati per Windows RT devono essere venduti con l'avvio protetto non disattivabile incontrò le critiche soprattutto degli sviluppatori di software libero, che sentivano che Microsoft stava tentando di esercitare il vendor lock-in impedendo agli utenti di installare sistemi operativi alternativi come Linux.
Il 20 settembre 2011 Matthew Garrett, uno sviluppatore di Red Hat, segnalò il possibile rischio che Microsoft avrebbe potuto escludere i sistemi operativi alternativi dai dispositivi certificati per Windows 8, dando origine ad un'ampia copertura mediatica sull'argomento. Secondo Garrett, se gli OEM si fossero limitati a includere nei loro dispositivi la sola chiave privata di Microsoft, all'utente non sarebbe stato permesso di avviare né Linux né alcun altro sistema operativo all'infuori di Windows 8. L'adozione di versioni firmate di Linux in sistemi regolarmente dotati delle relative chiavi UEFI avrebbe per giunta fatto sorgere delle ulteriori problematiche: per esempio, non si sarebbe potuto utilizzare il boot loader GRUB perché la versione 3 della licenza GPL con cui è concesso richiede che il distributore fornisca all'utente tutte le chiavi di autorizzazione necessarie per installare il software.
Il team di sviluppo di Windows 8 assicurò in seguito nel blog ufficiale Building Windows 8 che gli OEM sarebbero stati liberi di personalizzare il loro firmware, per esempio offrendo un'opzione per disattivare l'avvio protetto.
Il 28 ottobre 2011 Canonical e Red Hat, due delle maggiori società coinvolte in Linux, pubblicarono un libro bianco sulla questione, esortando i produttori ad includere nei PC un'interfaccia utente per attivare o disattivare facilmente l'avvio protetto.
Nel gennaio 2012 suscitò nuove preoccupazioni, in particolare nella comunità Linux, un documento in cui Microsoft stabiliva che, a differenza dei PC basati sulle architetture IA-32 e x86-64, i dispositivi basati su architettura ARM sarebbero stati esclusi dal programma di certificazione per Windows RT se avessero consentito la disattivazione dell'avvio protetto. Adrian Kingsley-Hughes di ZDNet suggerì tra le altre ipotesi che Microsoft stesse escludendo gli altri sistemi per motivi di vendor lock-in. Matthew Garrett intanto evidenziò le difficoltà nell'implementazione dell'avvio protetto in Linux, tra cui la complicazione del processo di installazione di un sistema operativo alternativo e la difficoltà nel persuadere gli OEM a vendere computer con la chiave alternativa insieme alla chiave Microsoft.
I requisiti contrattuali Microsoft, al contrario di quanto previsto dalle specifiche UEFI, impongono che il kernel e i suoi moduli debbano essere firmati; Microsoft si riserva il diritto di revocare qualsiasi certificato usato per firmare del codice che può essere usato per compromettere la sicurezza del sistema. Nel febbraio 2013, uno sviluppatore di Red Hat ha tentato di applicare una patch al kernel di Linux che consentirebbe ad esso di analizzare la firma Authenticode di Microsoft usando una chiave X.509 master incorporata in file PE firmati da Microsoft, ma la scelta è stata criticata da Linus Torvalds, il creatore di Linux.
Il 26 marzo 2013 il gruppo spagnolo di sviluppo di software libero Hispalinux ha depositato una lamentela formale presso la Commissione europea, contestando il fatto che i requisiti per l'avvio protetto imposti da Microsoft sui sistemi OEM sono ostruttivi e anti-competitivi.
A maggio 2021 la guida di Debian, al paragrafo Uefi-Avvio protetto, chiarisce che tale protocollo di sicurezza "non è un tentativo di Microsoft di tenere fuori dal mercato Linux" ma uno strumento per evitare l'esecuzione di codice maligno nell'ambiente pre-sistema operativo. Pertanto, i timori diffusisi a inizio anni 2010 non si sono concretizzati, atteso che del consorzio Uefi fanno parte centinaia di operatori, non solo Microsoft. Inoltre, anche altri grandi produttori di sistemi operativi per apparecchiature fisse (ad esempio Apple o IBM) impiegano il secure boot con chiavi proprietarie.

## Soluzioni adottate da sistemi operativi alternativi

Per i sistemi operativi alternativi a Windows sono state trovate varie soluzioni: ad esempio alcune importanti distribuzioni GNU/Linux hanno sviluppato dei workaround per aggirare le restrizioni imposte da Microsoft. Lo stesso Matthew Garrett ha sviluppato un boot loader minimo noto come "shim"; un software precompilato e firmato che consente all'utente di considerare attendibili le chiavi fornite dai distributori.
Sistemi proprietari (hardware e software integrati e marchiati) come quelli Apple o IBM preinstallano chiavi specifiche.

### Fedora Linux

Siccome Microsoft non ha stabilito alcuna imposizione riguardo alla possibilità di installare certificati di terze parti che permetterebbero l'esecuzione di software alternativo, gli sviluppatori di Fedora Linux hanno scelto di acquistare per la versione 18 di Fedora una chiave di sicurezza, da VeriSign al prezzo scontato di 99 $ tramite il Centro per sviluppatori Windows, sollevando alcune critiche nella comunità Linux.
La chiave acquistata è stata impiegata per firmare il boot loader shim, che serve per svolgere un unico compito: si limita infatti a verificare l'integrità di GRUB e a caricarlo, poiché anche GRUB e il kernel (a sua volta caricato da GRUB) sono firmati, anche se con chiavi generate dal progetto Fedora.

### Ubuntu

Per assicurarsi di non violare la licenza di GRUB, Ubuntu ha adottato a partire dalla versione 12.04 il boot loader efilinux, firmato con una chiave generata da Canonical, che secondo la Free Software Foundation, sarebbe preoccupazione infondata.
Efilinux ha poi il compito di avviare un'immagine del kernel non firmata (al contrario di Fedora), ritenendo che la firma del solo boot loader sia una soluzione più fattibile, poiché un kernel fidato renderebbe sicuro solo lo spazio dell'utente e non lo stato pre-avvio del sistema (che l'avvio protetto è progettato per proteggere), e inoltre vogliono permettere agli utenti di creare e utilizzare i propri moduli di kernel personalizzati.
L'avvio delle installazioni da chiavetta USB (o da DVD) di Ubuntu al contrario si basa su una soluzione analoga a quella scelta da Fedora: queste immagini d'installazione di Ubuntu fanno uso del boot loader shim, lo stesso di Fedora, firmato con una delle chiavi esistenti certificate da Microsoft.
Canonical ha dichiarato di non offrire la propria chiave privata per firmare i boot loader di altri distributori e venditori, ma di imporre agli OEM accreditati di offrire anche la chiave privata Microsoft oltre a quella di Canonical per evitare di escludere dalle macchine con Ubuntu preinstallato i sistemi operativi che si appoggiano ad una chiave Microsoft, come Fedora e Windows 8.
Ubuntu ha aggiunto il supporto all'avvio protetto UEFI a partire dalla versione 12.10.
Nell'ottobre 2012, prima della pubblicazione di Windows 8, la Linux Foundation ha annunciato di stare sviluppando un boot loader UEFI minimo firmato con una chiave Microsoft che servirà per avviare il boot loader principale. Tuttavia, per mantenere la sicurezza e per impedire che il boot loader venga utilizzato per caricare silenziosamente del malware, l'avvio richiederà l'input dell'utente.

## Strumenti gestione EFI

Sono disponibili applicazioni, sia a pagamento che gratuite, che manipolano l'ambiente UEFI (aggiungere, modificare o eliminare voci nel gestore di avvio, agire sulla partizione EFI, caricare o modificare certificati, eliminare le eventuali licenze software registrate e tante altre). Queste applicazioni (sostanzialmente di tipo shell) sono utili soprattutto quando i comandi nativi del produttore della macchina sono scarsi o poco amichevoli. Ovviamente, essendo strumenti eseguiti sul firmware (ambiente pre sistema operativo), agiscono a prescindere dal numero e tipologia di installazioni esistenti. Possono essere usate anche attraverso sessioni live.
Tra le altre si citano:
* efibootmgr e rEFInd (Linux);
* EasyUEFI e DiskGenius (Windows).

## Le revisioni

La specifica è periodicamente revisionata; ogni revisione è identificata dall'indice di modifica unitamente alla relativa data. Da quando è stato distribuito la prima volta il protocollo è cambiato sostanzialmente numerose volte e pertanto i produttori hanno dovuto applicare questi cambiamenti. Sul sito del consorzio è disponibile l'archivio delle specifiche tecniche.

### Versione corrente

L'ultima versione della specifica UEFI è la 2.11 (dicembre 2024).