# Unified Extensible Firmware Interface

La interfaz de firmware extensible unificada o UEFI (del inglés unified extensible firmware interface) es una especificación que define una interfaz entre el sistema operativo y el firmware. UEFI reemplaza la antigua interfaz del sistema básico de entrada y salida (BIOS) estándar presentado en los PC IBM como ROM BIOS de PC IBM.
La interfaz de firmware ampliable (del inglés extensible firmware interface) fue desarrollada inicialmente por Intel en 2002. La UEFI puede proporcionar menús gráficos adicionales e incluso proporcionar acceso remoto para la solución de problemas o mantenimiento.

## Historia

La primera iniciativa se produjo durante las primeras fases de desarrollo del Intel Itanium de HP a mediados de los 90. Debido a que estos procesadores apuntaban alto, las especificaciones del BIOS resultaban muy limitadas, por ello Intel desarrolló inicialmente lo que sería la IBI, del acrónimo inglés Intel Boot Initiative, que posteriormente fue renombrado a EFI.
El 25 de julio de 2005 se creó la fundación UEFI cuya labor consistía en desarrollar y promocionar la plataforma EFI. El sistema ha sido administrado y desarrollado desde entonces por un grupo de trabajo transversal en la industria incluyendo a Intel, AMD, Apple, Dell, Lenovo y Microsoft.
A principios de 2007, la versión 2.1 de la especificación UEFI vio la luz y, meses después, trajo consigo mejoras como: cifrado, autenticación de red y la destacable Interfaz gráfica de usuario. La especificación UEFI, versión 2.8, se aprobó en marzo de 2019.
En marzo de 2021 se anunció la versión 2.9

## Ventajas

La interfaz UEFI incluye bases de datos con información de la plataforma, inicio y tiempo de ejecución de los servicios disponibles listos para cargar el sistema operativo. UEFI destaca principalmente por:
* Compatibilidad y emulación del BIOS para los sistemas operativos solo compatibles con esta última.
* Soporte completo para la Tabla de particiones GUID (GPT), se pueden crear hasta 128 particiones por disco, con una capacidad total de 8 ZB.
* Capacidad de arranque desde unidades de almacenamiento grandes, dado que no sufren de las limitaciones del MBR.
* Independiente de la arquitectura y controladores de la CPU.
* Entorno amigable y flexible Pre-Sistema Operativo, incluyendo capacidades de red.
* Diseño modular.
La EFI hereda las nuevas características avanzadas del BIOS como ACPI (Interfaz Avanzada de Configuración y Energía) y el SMBIOS (Sistema de Gestión de BIOS), y se le pueden añadir muchas otras, ya que el entorno se ejecuta en 64 bits y no en 16 bits, como su predecesora.

## Compatibilidad
### Soporte de dispositivos de almacenamiento

La EFI comunica el arranque además de con el ya clásico MBR, con el sistema GPT que solventa las limitaciones técnicas del MBR, a saber:
* Solo los procesadores little-endian pueden ser soportados.
* MBR soporta hasta 4 particiones Primarias por unidad física ( si se desea realizar más particiones se tiene que convertir una o varias de esas particiones primarias a una o varias "particiones extendidas").Todas las particiones independientemente de "su tipo" tienen un límite de 2,2 TB, es decir, un disco duro u otro dispositivo de almacenamiento de más de 2,2 TB no se podría aprovechar su capacidad al 100% mediante el uso de una única partición (sigue siendo posible particionar ese HDD/Dispositivo de almacenamiento en varias particiones de 2,2 TB).
* GPT soporta teóricamente hasta 9,4 ZB y no exige un sistema de archivos concreto para funcionar.
Microsoft Windows soporta GPT a partir de las versiones de 64 bits de Windows Vista y posteriores.
Algunos sistemas basados en Unix utilizan un híbrido entre MBR y GPT para arrancar.

### 32 y 64 bits

Los BIOS hacen uso de modos de 16 bits para funcionar, diseño heredado del Intel 8088, pero a diferencia de esto, la EFI funciona directamente con modos de 32 bits y 64 bits, permitiendo que las aplicaciones de la EFI tengan acceso completo al direccionamiento de 64 bits.

## Características
### Servicios

La UEFI emplea 2 tipos de servicios, denominados servicios de arranque y servicios de ejecución.
* Los servicios de arranque incluyen funcionalidad requerida por un gestor de arranque o durante el inicio de un kernel, como texto e interfaz gráfica orientado a una consola, gestión de dispositivos, buses, dispositivos de bloque y sistemas de archivos.
* Los servicios de ejecución incluyen la fecha y la hora, NVRAM y las variables EFI.

### Protocolos

La UEFI define un conjunto de protocolos de interfaz de software utilizados para la comunicación entre dos módulos binarios. Todos los controladores de la UEFI deben proveer servicios a los demás a través de dichos protocolos.

### Controladores

Las especificaciones de la UEFI permiten ofrecer un controlador (driver) de dispositivo independiente del procesador denominado UEFI Byte Code o simplemente UBC. Gracias a esto, se permite soporte para la carga de gráficos, red, sonido y opciones avanzadas del sistema, sin haber precargado el sistema operativo en cuestión. Esto era totalmente imposible en el BIOS, ya que cargaba funciones muy limitadas y necesarias, como el soporte de periféricos, por ejemplo, teclado y ratón.

### Gestor de arranque

Un gestor de arranque propio de la UEFI permite también la selección y carga directa de los sistemas operativos, eliminando la necesidad de recurrir a gestores de arranque.

### Interfaz

La UEFI trae consigo una interfaz interactiva, que además permite ejecutar otras aplicaciones externas a la propia UEFI, siempre y cuando sean compatibles con la especificación.

### Extensiones

Toda extensión de la UEFI puede cargarse desde cualquier dispositivo no volátil que esté enchufado al ordenador. Un fabricante OEM puede distribuir su sistema con una partición UEFI instalada en un disco duro o una Unidad de estado sólido.

## Adopción
### Intel EFI

El Framework de Intel recibe el nombre de Tiano. Tiano se ejecuta en procesadores XScale, Itanium e IA32 bajo licencia privativa, aunque parte del código ha sido liberado bajo licencia BSD recibiendo el nombre de Proyecto TianoCore. Phoenix Tecnologies comercializa actualmente BIOS "Phoenix SecureCore Tiano" y "Phoenix MicroCore" compatibles con la interfaz UEFI

### Plataformas que utilizan UEFI

El primer microprocesador Intel Itanium dirigido a estaciones de trabajo y lanzado en el año 2000 ya soportaba la especificación EFI 1.02.
En el 2002, el Intel Itanium 2 ya soportaba EFI 1.10, capaz de arrancar Microsoft Windows, GNU/Linux, FreeBSD, HP-UX y OpenVMS.
Desde el 2005, se ha tratado de implementar EFI en arquitecturas extrapolables a las de PC, como las basadas en Intel XScale o sistemas embebidos.
En 2006 Apple montó sus ordenadores basados en la arquitectura x86 de Intel, y, por ello, comenzaron a utilizar sistemas EFI en lugar de Open Firmware como se hacía en los anteriores sistemas basados en PowerPC; posteriormente Apple lanzó Bootcamp, que permite un particionado no destructivo y soporte de drivers para la instalación de sistemas operativos Microsoft sin necesidad de reinstalar Mac OS X. Se añadió compatibilidad de BIOS a la EFI.
En el 2008, bastantes sistemas basados en 64 bits han adoptado la EFI, si bien muchos de estos sistemas solamente soportan el arranque mediante BIOS, gracias al Módulo de soporte de compatibilidad; muchos otros, en cambio, comienzan a arrancar en sistemas UEFI, por ejemplo, servidores IBM, ciertas placas base MSI de soporte ClickBIOS, portátiles HP Elitebook y algunas Tabletas PC HP.
En 2009, sistemas x de IBM (x3550 M2, x3650 M2, iDataPlex dx360 M2) y Bladecenter HS22. Dell PowerEdge T610; servidores R610, R710, M610, M710.

### Sistemas operativos

* GNU/Linux ha sido capaz de utilizar EFI en el arranque desde principios de 2000 mediante el gestor de arranque LiLo o las más recientes versiones de GRUB.
* HP-UX ha usado (U)EFI como mecanismo de arranque en sistemas IA_64 desde el 2002. HP OpenVMS ha usado (U)EFI en IA-64 desde su lanzamiento inicial en diciembre de 2003, y para las versiones de producción desde enero de 2005.
* Apple escogió el EFI original para sus ordenadores basados en Intel 32/64 bits (2006), y es el utilizado actualmente en sus computadoras.
* Itanium para Windows 2000 (Advanced Server Limited Edition y Datacenter Server Limited Edition) soporta EFI 1.10 en 2002. Windows Server 2003 para IA-64, Windows XP 64 Bits y Windows 2000 Advanced Server Limited Edition, todos los cuales son para la familia de procesadores Intel Itanium.
* Soporte para EFI fue introducido en los sistemas operativos x64 de Microsoft Windows, como Windows Server 2008, Windows 7 y Windows Vista Service Pack 1. Microsoft solo ofrece soporte para UEFI de 32 bits desde Windows 8 en adelante.
* Windows 8 y superiores requieren UEFI, y en especial arranque seguro, para certificar dispositivos de OEMs.