EFI

**EFI** (**Extensible Firmware Interface**) ehk laiendatav püsivaraliides on spetsifikatsioon, mis korraldab, kuidas tarkvara suhtleb püsivaraga. EFI on asendus vanemale igas IBM-i tüüpi arvutis olevale BIOS-ile. 
Esimese EFI spetsifikatsiooni töötas välja Intel, kuidas alates 2005. aastast lõppes EFI arendamine. Selle asemel hakati arendama UEFI-t (ühtne laiendatav püsivara liides), mis põhines EFI 1.10-l. UEFI spetsifikatsiooni arendab Unified EFI Foorum, üks tööstusharu hõlmav organisatsioon. UEFI ei ole piiratud ühelegi platvormile ega arhitektuurile ja võib joosta nii traditsioonilise BIOS-i asemel kui ka selle peal. 

## Ajalugu

EFI loomise mõte tekkis Inteli Itaniumi-põhiste süsteemide loomise varases faasis, 1990. aastate keskel. Põhjuseks oli tavapärase BIOS-i piiratus (nt 16-bitine protsessorirežiim, 1 MB adresseeritavat mälu ja olenemine PC AT riistvarast). Sellist olukorda peeti vastuvõetamatuks suuremõõtmeliste serveriplatvormide jaoks, turunišš, mida Itanium sihtis. Nende murede lahendamiseks algatati 1998. aastal Intel Boot Initiative, mis nimetati hiljem ümber EFI-ks.
2005. aasta juulis lõpetas Intel EFI spetsifikatsiooni arendamise versiooni 1.10 juures ja andis selle üle Unified EFI Foorumile. Originaalne EFI spetsifikatsioon kuulub ikka veel Intelile, kuid UEFI kuulub Foorumile. 
UEFI versioon 2.1 avaldati 7. jaanuaril 2007, sellega kaasnes krüptograafia tugi ja kasutajaliidese arhitektuur (User Interface Architecture). 2010. aasta oktoobri seisuga oli uusim UEFI versioon 2.3.

## Sisu
EFI spetsifikatsiooniga paika pandud liides sisaldab andmeid platvormi ja käivitamisel olemasolevate teenuste kohta. 
UEFI püsivaral on mitmeid tehnilisi eeliseid:

* Võimalus käivitada operatsioonisüsteem suuremalt kettalt kui 2 TB
* Kiirem käivitumine
* Protsessorist mitteolenev arhitektuur
* Protsessorist mitteolenevad draiverid
* Paindlik operatsioonisüsteemile eelnev keskkond, sh võrgutugi
* Modulaarne disain

Teatud BIOS-ile omased täiustused, nagu ACPI (progressiivne konfiguratsiooni- ja toiteliides) ja SMBIOS (süsteemihaldus BIOS), on olemas ka EFI-l, kuna nad ei vaja 16-bitist käitusliidest.

### Ketta tugi
Lisaks tavalisele jaotustabelile, mis kasutab peabuutsektorit (MBR), toetab EFI ka GUID partitsioonitabelit (GPT). GPT ei kannata tavaliste MBR piirangute all, näiteks ei piira GPT partitsioonide arvu (MBR ei toeta üle nelja partitsiooni) ja lubab kasutada kuni 9,4 ZB suurust ketast. EFI spetsifikatsioon ei määra millist failisüsteemi kasutama peaks. Ainukesed Windowsi versioonid, mis toetavad GPT-d, on Windows Vista/7, Windows Server 2008 ja uuemad.

### 32/64 bit
BIOS on piiratud 16-bitise protsessori režiimi ja 1 MB adresseeritava mälu peale, kuna disain põhineb IBM 5150-l, mis kasutas 16-bitist Intel 8088 protsessorit. Selle eest võib UEFI töötada nii 32(x86-32) kui ka 64-bitisena (x86-64 ja Itanium). 64-bitine UEFI lubab operatsioonisüsteemile eelneval keskkonnal kasutada 64-bitist mälu adresseerimist.

### Teenused
EFI defineerib kahte sorti teenused: käivitusteenused (*boot services*) ja käitusteenused (*runtime services*). Käivitusteenuste alla käivad teksti ja graafilise konsooli tugi mitmetel seadmetel, siinidel, blokkidel ja failiteenustel. Käitusteenuste hulka kuuluvad teenused nagu kuupäev, aeg ja NVRAM.

### Protokollid
EFI defineerib protokollid kui komplekti tarkvaraliideseid, mida kasutatakse suhtlemiseks kahe binaarse mooduli vahel. Kõik EFI draiverid peavad pakkuma teenuseid teistele draiveritele protokollide kaudu.

### Draiverid
Lisaks standardsete arhitektuuride spetsiifilistele draiveritele lubab EFI kasutada ka protsessori arhitektuurist mitte olenevaid draivereid, mida nimetatakse EFI Byte Code ehk EBC-ks. Süsteemi püsivaralt nõuab UEFI spetsifikatsioon, et tal oleks interpretaator kettal olevate EBC-de lugemiseks. Selles mõttes on EBC sarnane Open Firmware'iga, tuntud mitmele platvormile kirjutatud püsivaraga, mida kasutavad teiste seas ka PowerPC põhised Macintoshid ja Sun Microsystemsi SPARC arvutid.

Osal arhitektuurispetsiifilistest (mitte EBC) EFI draiveritüüpidel võivad olla liideseid, mida kasutatakse operatsioonisüsteemis. See lubab operatsioonisüsteemil lasta EFI-l kuvada lihtsat graafikat, kuni operatsioonisüsteemi draivereid laetakse.

### Buudihaldur
EFI buudihaldurit kasutatakse ka operatsioonisüsteemi valimiseks ja käivitamiseks, kaotades vajaduse eraldi buudihalduri järele. Operatsioonisüsteemi buutija on EFI programm.

### EFI kest
EFI toetab kestakeskkonda. Kesta saab kasutada teiste EFI programmide käivitamiseks.

### Laiendused
EFI-le saab laiendusi laadida sisuliselt igalt mäluseadmelt. Näiteks saavad originaalseadmete tootjad (OEM-d) seadmele lisada EFI partitsiooni, et pakkuda funktsioone lisaks arvuti püsimälus olevale EFI püsivarale.

## Rakendamine ja vastuvõtt

### Inteli EFI
Inteli EFI implementatsioon kannab nime Intel Platform Innovation Framework, kuid on tuntud ka kui Tiano. Tianot käitatakse Inteli Xscale'i, Itaniumi ja IA32 protsessoritel ja on enamuses firmaomane (suletud koodiga). Vaid väike osa Tiano koodist on avaldatud (seda BSD ja EPL litsentsi all) ning kannab nime "TianoCore Project". Phoenix Technologies müüb praegusel ajal UEFI toega Phoenix SecureCore Tiano ja MicroCore Biosi.

### Platvormid, mis kasutavad EFI-t
Inteli esimesed Itaniumil põhinevad tööjaamad ja serverid alates 2000. aastast toetavad EFI 1.02.

Hewlett Packardi esimesed Itanuim 2-l põhinevad arvutid alates 2002. aastast toetavad EFI 1.10-t. Suudavad buutida nii Windowsit, Linuxit, FreeBSD-d kui ka HP-UX-i. OpenVMS-i tugi tuli 2003. aasta juunis.

2006. aasta jaanuarist alates on kõik Apple Inci Inteli põhised Macintosh tüüpi arvutid EFI toega. EFI asendas varasemat Open Firmware'i, millel põhinesid PowerPC tüüpi arvutid. 2006. aasta kevadel lasi Apple välja Boot Campi, mis suudab teha Windowsi draiveritega plaadi ja dünaamiliselt kõvaketast partitsioneerida, et installeerida Windows XP ja Vista, ilma Mac OS X-i uuesti installimata. Hiljem lasti välja püsivara uuendus, mis lisas nende EFI implementatsioonile BIOS-i toe. Kõik hilisemad Macintoshi mudelid tulevad uuema püsivaraga.

2005. aasta jooksul tarniti üle ühe miljoni Inteli arvuti, millel oli kaasas Inteli Platform Innovation Framework. Uuemaid mobiilseid tooteid ning servereid ja lauaarvuteid, mis kasutasid Inteli raamistikku, hakati tarnima 2006. aastal. Näiteks, emaplaadid, mis kasutasid Inteli 945 seeria kiibistikku.

EFI-it on alates 2005. aastast implementeeritud ka mitte-PC-arhitektuuriga toodetesse, näiteks manussüsteemidesse, mis põhinevad XScale'i tuumadel.

Juba 2008. aastal hakkas EFI laiemat kasutust leidma, eriti x64 arhitektuuriga arvutites. Kuigi paljud neist toetavad siiski veel BIOS-ist buutimist kasutades Compatibility Support Module-t, et BIOS-ipõhiseid operatsioonisüsteeme käivitada. Selle tõttu ei saa kasutajad tihti peale aru, et nende arvuti kasutab UEFI-t. Teised süsteemid on hakanud toetama UEFI-põhist buutimist teises operatsioonisüsteemide jaoks. Näiteks IBM x3450 server, MSI emaplaadid, millel on ClickBIOS ja kõik HP EliteBook süle- ja tahvelarvutid.

2009. aastal hakkas IBM tarnima System X arvuteid (x3550 M2, x3650 M2, iDataPlex dx360M2) ja BladeCenter HS22 UEFI toega. Dell hakkas pakkuma PowerEdge T610, R610, R710, M610 ja M710 serverid, mis ka toetasid UEFI-t.

### Operatsioonisüsteemid
(U)EFI spetsifikatsiooni alusel kutsutakse operatsioonisüsteeme, mis toetavad (U)EFI-lt buutmist (U)EFI-st teadlik olevateks operatsioonisüsteemideks. 
Siin tähendab termin "buuditud (U)EFI-lt" seda, et buuditi otse (U)EFI laadurist, mida hoiti mõnel mäluseadmel. Standardkoht operatsioonisüsteemi laaduri jaoks on \EFI\BOOT\[arhitektuuri nimi]\boot[arhitektuuri nimi].efi, kus arhitektuuri nimi võib olla näiteks IA32, x64 või IA64. Teatud operatsioonisüsteemide tootjad võivad kaasa panna oma operatsioonisüsteemi laaduri. See võib muuta ka laaduri asukohta.

* Linux on olnud suuteline EFI-lt buutima juba 2000. aastast alates, kasutades elilo EFI buudilaadurit. Hiljuti on hakatud rokhem kasutama GRUB-i EFI versiooni.
*HP-UX on kasutanud (U)EFI-t oma buudimehhanismina IA64 süsteemides 2002. aastast saati. HP OpenVMS on IA64-l (U)EFI-t kasutanud 2005. aasta algusest, kuid esimest korda kasutati (U)EFI-t hindamiseks toodetud arvutitel juba kaks aastat varem.
* Apple kasutab EFI-t oma Intelil põhinevatel Macintoshidel. Mac OS X v10.4 ja uuemad toetavad EFI 1.10 versiooni 32-bitises režiimis, isegi 64-bitiste protsessoritega. Uuemad Macintosihd aga kasutavad juba 64-bitist EFI-t.
* Itaniumi versioonid Windows 2000-st (Advanced Server Limited Edition ja Datacenter Server Limited Edition) on EFI-t toetanud juba 2002. aastat saati. Windows Server 2003 IA-64-le, Windows XP 64-bitine versioon Windows Server 2000 Advanced Server Edition, mis kõik põhinevad Inteli Itanium protsessori perekonnal, toetavad EFI-t, kuna see on DIG64 platvormi spetsifikatsiooni järgi nõutud.
* Microsoft tõi UEFI toe x64 Windowsitele Windows Server 2008 ja Windows Vista Service Pack 1-ga. Microsoft ei paku tuge 32-bitisele UEFI-le, kuna tootjad ei tundnud selle vastu huvi 64-biti populaarsuse tõusu tõttu.

### Virtualiseerimise tugi

* HP Integrity Virtual Machine toetab UEFI buutimist HP Integrity Serveril. See pakub ka virtualiseeritud UEFI keskkonna külalisoperatsioonisüsteemidele, mis on UEFI-st teadlikud. Intel majutab Open Virtual Machine Firmware'i projekti siin: http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=OVMF
* Vmware Fusion 3 tarkvara Macintoshile toetab Mac OS X Serveri virtuaalarvutites EFI kasutamist.

## Graafilised funktsioonid
EFI toetab graafilisi menüüsid ja funktsioone, näiteks selliseid, mis on implementeeritud Aptios või Great Wall UEFI-s.
EFI spetsifikatsioon defineerib kaks graafikaväljundi protokolli. Esimene neist on UGA (universaalsed graafikaadapterid), mida toetavad vaid EFI 1.1-st vanemad spetsifikatsioonid. Teine on GOP (graafilise väljundi protokoll), mida kasutatakse praegu.
EFI ei paku ega defineeri kasutajaliidest, selle välimus ja implementatsioon oleneb täielikult BIOS-i tootjast. Praegu kasutab enamik EFI-ga arvuteid BIOS-ile omast kasutajaliidest, aga see ei näita, milleks EFI tegelikult on võimeline.

## Kriitika ja riskid
Corebooti (avatud lähtekoodiga alternatiiv BIOS-ile) looja Ronald G. Minnich kritiseeris EFI-t, oletades, et EFI ei ole midagi muud kui katse säilitada intellektuaalset omandit. Põhjuseks tõi ta selle, et EFI ei lahenda BIOS-iga kaasnevat probleemi – vaja on kahte draiverit, ühte püsivarale ja teist operatsioonisüsteemile. Seda vähemalt enamiku riistvara puhul.
Mainida tuleb, et avatud lähtekoodiga projekt TianoCore pakub tasuta tööriistu, millega saab teha täiesti vabu ja tasuta püsivarapõhist UEFI-t, kuid sellel puuduvad spetsiaalsed draiverid, mis kiibistiku käivitavad. Seetõttu on vaja kasutada väikseid juppe kinnise lähtekoodiga draivereid, mille kiibistiku tootjad on teinud.
Kuna UEFI lubab paindlikumalt kaugvõrgubuutimist kui praegused BIOS-i tehnoloogiad, on muret tuntud sellega kaasnevate turvariskide pärast.

## Viited