# Unified Extensible Firmware Interface

O Unified Extensible Firmware Interface (UEFI), em português Interface Unificada de Firmware Extensível, é uma especificação que define uma interface de software entre o sistema operacional e o firmware da plataforma. UEFI pretende substituir a interface de firmware do Sistema de Entrada/Saída Básico (BIOS), presente em todos os computadores pessoais compatíveis com o IBM PC. Na prática, a maioria das imagens UEFI fornecem suporte legado para os serviços do BIOS. UEFI pode suportar diagnósticos remotos e reparação de computadores, mesmo sem outro sistema operacional instalado.
A especificação original EFI (Extensible Firmware Interface) foi desenvolvida pela Intel. Algumas de suas práticas e formatos de dados espelham aqueles do Windows. Em 2005, a UEFI tornou a EFI 1.10 (versão final do EFI) obsoleta. A especificação da UEFI é gerenciada pelo Unified EFI Forum.

## História

A motivação original para o EFI veio durante o início do desenvolvimento do primeiro sistema Intel-HP Itanium em meados de 1990. As limitações do PC BIOS (modo 16-bits, espaço de endereçamento de 1MB, dependências de hardware PC AT, etc.) foram vistas como claramente inaceitáveis para a grande plataforma de servidores visada como alvo. Os esforços iniciais para resolver esses problemas foram inicialmente chamados Intel Boot Initiative e foi depois renomeado para Extensible Firmware Interface (EFI).
* A especificação EFI 1.02 foi lançada pela Intel em 12 de dezembro de 2000.
* A especificação EFI 1.10 foi lançada no dia 1 de dezembro de 2002. Ela inclui o modelo de driver como também várias pequenas melhorias para a 1.02.
Em julho de 2005, a Intel cessou o desenvolvimento da especificação EFI quando esta chegou à versão 1.10, e contribuiu para o Unified EFI Forum, que desenvolveu a especificação com o nome Unified Extensible Firmware Interface (UEFI). A especificação EFI original é de propriedade da Intel, que fornece exclusivamente licenças para produtos EFI, mas a especificação UEFI é de propriedade do Fórum.
A versão 2.1 da especificação UEFI foi lançada em 7 de janeiro de 2007. Foi adicionado criptografia, autenticação de rede e a Arquitetura de Interface de Usuário (Infraestrutura de Interface Humana no UEFI). A última especificação UEFI, a versão 2.10, foi aprovada em agosto de 2022.

## Vantagens

A interface definida pela especificação EFI inclui tabelas de dados que contêm informações de plataforma e serviços de inicialização e tempo de execução que estão disponíveis para o carregador do sistema operacional e para o sistema operacional. O firmware UEFI oferece várias vantagens técnicas sobre um sistema tradicional de BIOS:
* Capacidade de usar discos grandes (mais de 2 TB) com uma Tabela de Partição GUID (GPT)
* Arquitetura independente de CPU
* Drivers independentes de CPU
* Ambiente pré-SO flexível, incluindo capacidade de rede
* Design modular
* Compatibilidade reversa e futura

## Recursos

As interfaces definidas pela EFI incluem tabelas de dados que contem informação sobre a plataforma, e serviços de boot e runtime que ficam disponíveis para o carregador do SO e o próprio SO.
Alguns melhoramentos para BIOS PC, como o ACPI e o SMBIOS, também estão presentes no EFI, já que eles não dependem de uma interface em tempo de execução de 16-bit.

### Secure boot

A especificação UEFI 2.3.1 Errata C (ou superior) define um protocolo conhecido como secure boot (em português inicialização segura), que pode tornar o processo de inicialização seguro por meio da prevenção de carregamento de drivers ou carregadores de SO que não são assinados com uma assinatura digital aceitável. Os detalhes mecânicos de como, precisamente estes drivers são assinados não são especificados.

### Compatibility Support Module

O Compatibility Support Module (CSM), em português Módulo de Suporte à Compatibilidade, é um componente do firmware UEFI que fornece compatibilidade legada do BIOS por meio da emulação de um ambiente BIOS, permitindo que sistemas operacionais legados e algumas option ROMs que não suportam UEFI ainda sejam usados.

### Serviços

O EFI define boot services, que incluem suporte a consoles de texto e gráficos em vários dispositivos, barramentos, serviços de bloco e de arquivos, e runtime services, assim como data, hora e serviços NVRAM.

### Drivers de dispositivo

Em adição aos drivers de dispositivos padrões específicos da arquitetura, a especificação EFI provê para um ambiente de drivers de dispositivo independente do processador, chamado EFI Byte Code ou EBC.
Alguns tipos de drivers de dispositivo (não EBC) específicos para a arquitetura podem ter interfaces para uso pelo sistema operacional. Isso permite ao SO confiar ao EFI o suporte básico aos gráficos e à rede enquanto os drivers específicos são carregados.

### Gerenciador de boot

Um Gerenciador de boot EFI é também usado para selecionar e carregar o sistema operacional, removendo a necessidade de um mecanismo de boot loader (o boot loader do SO é uma aplicação EFI).

### Suporte a Disco

Em adição ao esquema de partição do PC padrão, Master boot record (MBR), o EFI adiciona suporte para uma tabela de partição GUID (GPT), que não sofre das mesmas limitações. A especificação EFI não inclui um descrição para um sistema de arquivos; implementações da EFI tipicamente suportam FAT32 como seus sistemas de arquivos

### O Shell EFI

A comunidade EFI criou um Shell open source; ao invés de "bootar" diretamente em um SO completo, em algumas implementações, o usuário pode dar boot no shell EFI. O shell é uma aplicação EFI; ele pode residir diretamente dentro da ROM da plataforma, ou num dispositivo para o qual os drivers estão na ROM.
O Shell pode ser usado para executar outras aplicações EFI, como setup, a instalação do SO, utilitários de diagnóstico ou configuração, e atualizações da flash do sistema; ele pode também ser usado para tocar CDs ou DVDs sem ter que iniciar um sistema operacional completo, contanto que uma aplicação EFI com as características apropriadas seja escrita. Os comandos do shell tornam possível copiar ou mover arquivos e pastas entre os sistemas de arquivos suportado. Drivers podem ser carregados e descarregados, e um stack TCP/IP completo pode ser usado de dentro do shell.
O shell EFI suporta encriptação através de arquivos .nsh, que são análogos aos arquivos batch do DOS
Nomes de comandos do shell são frequentemente herdados do interpretador de comandos do DOS ou o shell Unix. O shell pode ser visto como um substituto funcional para o interpretador de comandos do DOS.

### Extensões

Extensões ao EFI podem ser carregadas de virtualmente qualquer dispositivo de armazenamento não volátil ligado ao computador. Por exemplo, um OEM pode vender sistemas com uma partição EFI em um HD que adicionariam características adicionais para o firmware EFI padrão armazenado na ROM da placa mãe.

## Implementação e adoção
### Intel Platform Innovation Framework para EFI

A Intel Platform Innovation Framework para a EFI (com o nome código original “Tiano”) é uma implementação de firmware completamente livre de legado, que inclui suporte para EFI. Também pode suportar um PC BIOS herdado através do compatibility support module(CSM).
Em particular, o Framework inclui todos os passos necessários para iniciar a plataforma após o ligamento; esse trabalho interno do firmware não são definidos como parte da especificação EFI, mas são parte da Platform Initialization Specification.
A Intel não disponibiliza o framework completo para o usuário final; ele está disponível através de vendedores de BIOS independentes (como a American Megatrends (AMI) e Insyde Software) como parte das suas ofertas de firmware.
Uma parte do framework foi disponibilizada com open source para o projeto TianoCore com EFI Developer Kit (EDK). Essa implementação cobre o EFI e alguns códigos de inicialização de hardware, mas não é o firmware completo. Várias licenças foram usadas para o código, incluindo a Licença BSD e a Licença Pública Eclipse.

### Plataformas que usam EFI ou Framework

Os primeiros servidores e estações de trabalho da Intel, lançados em 2000, suportavam EFI 1.02.
Os primeiros sistemas Itanium 2 da Hewlett-Packard, lançados em 2002, suportavam EFI 1.10; eles eram capazes de iniciar Windows, Linux, FreeBSD e HP-UX.
Todos os sistemas Itanium 2 lançados com firmware compatível com EFI devem também ser complacentes com todas as especificações DIG64.
Em novembro de 2003, Gateway introduziu o Gateway 610 Media Center, o primeiro computador x86 baseado no Windows a utilizar firmware baseada no Framework, o InsydeH2O da Insyde Software. Ele ainda dependia de uma BIOS implementada como um suporte de compatibilidade para iniciar o Windows.
Em janeiro de 2008, a Apple Computer liberou seus primeiros computadores Macintosh baseados em intel. Estes sistemas usam EFI e o Framework ao invés de Open Firmware, que foi usado nos sistemas Power-PC anteriores. Em 5 de abril de 2006 a Apple liberou Boot Camp, que produz discos de Windows XP como uma ferramenta de particionamento não destrutível para ajudar os usuários a instalar o Windows XP mais facilmente. Uma atualização de firmware que adicionou suporte a BIOS legada para implementação do EFI também foi liberada. Modelos Macintosh subsequentes foram entregues já com novo firmware instalado. Agora todos os sistemas machintosh atuais também estão aptos a executar o boot pelos sistemas operacionais de BIOS legada, como o Windows XP.
A grande maioria dos chips de placas-mãe Intel vêm com firmaware baseado neste Framework. Durante o ano de 2005 mais de um milhão de sistemas intel foram entregues com o Framework. Novos produtos Mobile, desktop e Servidores usando o framework começaram a ser entregues em 2006. Por exemplo, todas as placas que usam o chipset da série intel 945 usam o Framework. Contudo, a produção do firmware geralmente não inclui o suporte ao EFI, e está limitado à BIOS legada.
Desde 2005, EFI tem sido implementado também em arquitetura não-PC, como sistemas embarcados baseados em XScale cores.
O EDK inclui um alvo NT32, que aceita o firmware EFI e aplicação EFI rodar dentro de uma aplicação Windows.
Em 2007, a HP liberou uma impressora compatível com o firmware EFI.

### Sistemas Operacionais

O sistema Linux é capaz de usar o EFI em tempo de boot desde do início de 2000, usando o carregador de boot ELILO. O ELILO é o único meio de "bootar" o Linux na plataforma IA-64; ele pode ser usado também nas plataformas IA-32. Até dezembro de 2006, não há versão do ELILO para modo x64.
HP-UX tem usado EFI como mecanismo de boot nos sistemas IA-64 desde 2002. OpenVMS tem usado em produtos comerciais desde janeiro de 2005.
O Microsoft Windows Server 2003 para IA-64, Windows XP 64-bit Edition, e Windows 2000 Advanced Server Limited Edition, todos para a família Intel Itanium de processadores, suportam EFI, um requisito das plataformas pela especificação DIG64. A Apple Computer tinha adotado o EFI para a linha dos Macintosh baseados em Intel. A Microsoft planeja introduzir o suporte ao UEFI para os 64-bit x64 com Windows Server "Longhorn". O EFI tem suporte para x64 nas versões do Windows Vista que poderá ser incluso um service pack. Não será feito um suporte oficial para booting do EFI em computadores 32-bit devido à falta de suporte dos fabricantes e dos vendedores de computadores. A Microsoft liberou um vídeo com Andrew Ritz e Jamie Schwarz que explica o suporte PRE-SO que envolve UEFI no Vista e no Longhorn.

## Criticismo

Numerosos ativistas de direitos digitais tem protestado contra a UEFI. Ronald G. Minnich, um coautor de coreboot, e Cory Doctorow, um ativista de direitos digitais, tem criticado a EFI como uma tentativa de remover a possibilidade do usuário verdadeiramente controlar o computador. Isto levanta preocupações de segurança e, nomeadamente, torna a criação de uma implementação de software livre impossível. EFI pode ser usado para criar uma "BIOS DRM", deixando assim fornecedores construir computadores que limitam o que o utilizador pode fazer.
Em 26 de março de 2013, o grupo espanhol Hispalinux de desenvolvimento de software livre apresentou uma queixa formal à Comissão Europeia, alegando que os requisitos de Secure Boot da Microsoft em sistemas OEM eram "obstrutivas" e anticompetitivas.