Etusivu


3. 3. 2025

    UEFI-hype ja Microsoftin valheet


Reilu vuosi sitten kirjoitin "UEFI fact sheet" -nimisen dokumentin 
( http://sininenankka.dy.fi/~sami/uefi_fact_sheet.php ). Tarkoituksena oli
luoda todenmukaisempi vastine samannimiselle dokumentille, jota UEFI Forum
levittää internetissä. Kirjoittamani dokumentti oli hakukoneiden hakutuloksissa
pitkään ensimmäisenä, jos teki haun sanoilla "UEFI fact sheet". Nyt Microsoftin
ylläpitämä Bing -hakukone oli kuitenkin siirtänyt sen hakutuloksissa vasta
toiselle sivulle ja laittanut ensimmäiseksi tulokseksi UEFI Forumin julkaiseman
disinformaatiodokumentin. ( https://uefi.org/sites/default/files/resources/UEFI_Drive_Partition_Limits_Fact_Sheet.pdf )

Jostain syystä UEFI-tyyppistä laiteohjelmistoa on advokoitu esittämällä suoranaisia
valheita sekä UEFIsta että BIOSista, joka UEFIn on tarkoitus kokonaan korvata.
Vaikka nämä valheet eivät teknisesti ottaen pidäkään paikkansa, niin ne ovat silti
saavuttaneet siinä määrin "virallisen totuuden" aseman, että ne tulevat nykyään
vastaan joka puolella ja internetistä on varsin helppoa löytää niitä tukevia
lähteitä. Näitä valheita levitetään varsin päättäväisin ottein ja esimerkiksi Wikipediassa
niiden oikominen johtaa muutosten välittömään kumoamiseen ja päälle saa vielä 
käyttäjäsivullensa vittuilua muutokset kumonneelta käyttäjältä.

Yleisesti ottaen ahkerimmat UEFI-advokaatit näyttävät olevan ihmisiä, jotka eivät
koskaan asenna itse käyttöjärjestelmiä eivätkä varsinkaan kirjoita minkäänlaista
matalan tason tietokonekoodia, joka olisi jollain tavalla tekemisissä emolevyn
laiteohjelmiston tai oheislaitteiden rajapintojen kanssa.

UEFI-tyyppisen laiteohjelmiston tarvetta on perusteltu pääasiassa seitsemällä
syyllä: 

- BIOS ei tue yli kahden teratavun (2 TB) kokoisia kiintolevyjä.
- BIOS tukee vain 512 tavun sektoreita.
- BIOS tukee vain MS-DOS-tyyppistä osiotaulua, eikä GPT-osiotaulun käyttö ole mahdollista.
- BIOS tukee vain neljää osiota.
- BIOS on tietoturvaton.
- BIOS on 16-bittinen. UEFI on joko 32- tai 64-bittinen, joten se on parempi.
- UEFI on laajennettava, toisin kuin BIOS.

Mikään noista väitteistä ei kestä lähempää tarkastelua. Käydäänpä nyt
kuitenkin ne kaikki läpi yksityiskohtaisesti.


  "BIOS ei tue yli kahden teratavun (2 TB) kokoisia kiintolevyjä."

Kun Microsoft propagandassaan väittää BIOSin olevan rajoitettu kahden teratavun
kokoisiin kiintolevyihin, tarkoittaa se itse asiassa sitä, että Windows on rajoitettu
sen kokoisiin kiintolevyihin, kun se on asennettu tietokoneeseen, jossa on BIOS. 
Jostain syystä Microsoft on aina kovakoodannut kaikki käyttöjärjestelmänsä jollekin 
tietyntyyppiselle osiotaululle: MS-DOSissa on oma osiotaulunsa, jota myös kaikki 
Windowsit käyttävät, jos tietokoneessa on BIOS. Jos tietokoneessa on UEFI-tyyppinen
laiteohjelmisto, niin silloin Windows 8 ja uudemmat Windowsit käyttävät GPT-osiotaulua.
Vanhemmat Windowsit eivät toimi UEFIn kanssa ollenkaan. Microsoftin käyttöjärjestelmät
eivät tue muita osiotauluja kuin noita kahta. MS-DOSin osiotaulu ei tue yli kahden (2)
teratavun kokoisia osioita.

Alkuperäisen IBM PC:n BIOS tukee 512 tavun sektorikoolla korkeintaan 8,4 gigatavun
kokoisia kiintolevyjä, mikä on sen aikakauden tietokoneiden mittakaavassa enemmän
kuin riittävästi. 90-luvulla raja alkoi kuitenkin häämöttämään ja asialle piti
tehdä jotain. BIOS-spesifikaatioon lisättiin vuonna 1995 "Enhanced Disk Drive
Specification" ( https://archive.org/details/specs-edd30 ), jonka myötä BIOS alkoi
tukea ainoastaan pyöriville levyille soveltuvan CHS*-osoituksen lisäksi myös
64-bittisiä kokonaislukuja käyttävää loogista sektoriosoitusta. Se tarkoittaa,
että levyllä pystyi nyt olemaan 2^64 sektoria, eli 512 tavun sektorikoolla levyn
suurimmaksi mahdolliseksi kooksi tuli 8'589'934'592 teratavua. Vielä toistaiseksi
kiintolevyt käyttävät fyysisesti sektorien osoittamiseen vasta 48 bittiä, joten
BIOS-rajapinnan rajat eivät ihan heti ole tulossa vastaan.

Tämä väite tulee usein myös toisessa muodossa: "BIOS ei voi bootata yli 2 TB osiolta".
Sekään ei tietenkään pidä paikkaansa, koska BIOS ei välitä yhtään mitään siitä, miten
levy on osioitu - BIOS vain lukee levyn ensimmäisen sektorin ja suorittaa sen
tietokonekoodina, jos se sisältää ns. "boot sector signaturen".

Itse asiassa UEFI on noista kahdesta se rajoittuneempi, koska UEFI vaatii EFI-osiolle
FAT32-tiedostojärjestelmän, mikä tekee boottaamisesta muilta kuin random access -medioilta
käytännössä mahdotonta.

*cylinders, heads, sectors


  "BIOS tukee vain 512 tavun sektoreita."

Alkuperäinen IBM PC:n BIOS tukee periaatteessa mitä tahansa sektorikokoja 128 tavusta
64 kilotavuun. Ainoa rajoitus on, että sektorin koon pitää olla jokin kahden potenssi,
tai muuten "Disk Base Table" ( https://stanislavs.org/helppc/dbt.html ) ei pysty
kertomaan tarkkaa sektorikokoa.

Edellisessä kappaleessa mainitussa Enhanced Disk Drive -spesifikaatiossa tähänkin
asiaan tuli kuitenkin parannus. BIOSiin tuli "Get Drive Parameters" -niminen
funktio, joka kertoo levyn sektorikoon yhden tavun tarkkuudella. Väite BIOSin
rajoittuneisuudesta ainoastaan 512 tavun kokoisiin sektoreihin ei siis millään
tavoin pidä paikkaansa.


  "BIOS tukee vain MS-DOS-tyyppistä osiotaulua, eikä GPT-osiotaulun käyttö ole mahdollista."

Tämäkin on valhe. BIOS ei varsinaisesti "tue" yhtään mitään osiotaulua - se ei oikeastaan
välitä levyllä olevasta osiotaulusta tuon taivaallista. Sen sijaan BIOS jättää levyn
osioinnin (tai osioimattomuuden) kokonaan käyttöjärjestelmän huoleksi. Siispä GPT-osiotaulun
käyttäminen BIOSin kanssa on aivan hyvin mahdollista, ja suurin osa käyttöjärjestelmistä
tukee sitä.

Itse asiassa UEFI on tässäkin se rajoittuneempi järjestelmä. UEFI nimittäin tukee spesifikaationsa
mukaan käynnistämistä vain levyiltä, joilla on joko GPT- tai MS-DOS-tyylinen osiotaulu.
Suurin osa UEFI-toteutuksista tukee vain GPT-osiotaulua. BIOS sen sijaan sallii myös
muuntyyppisten osiotaulujen käytön. Kirjoittamani ST-DOS-käyttöjärjestelmä käyttää kokonaan
omanlaistaan osiotaulua, jonka erikoisuus on, että sitä käyttäen koko kiintolevyn sisällön
siirto levyltä entistä isommalle levylle on mahdollista mitään muuttamatta. GPT-osiotaulun
kanssa sellainen ei ole mahdollista.

ST-DOSin osiotaulu myös tukee rajatonta määrää osioita, ja osion maksimikoko on
(2^16)*(2^64)*(2^8) tavua eli 281'474'976'710'656 teratavua. Valitettavasti UEFI ei rajoitteidensa
vuoksi toimi ST-DOSin osiotaulun kanssa.


  "BIOS tukee vain neljää osiota."

Tämä väite perustuu edelliseen väitteeseen, jonka mukaan BIOS olisi jotenkin kovakoodattu
käyttämään ainoastaan MS-DOSin osiotaulua, joka tukee levyn jakamista korkeintaan neljään
osioon. Väite ei siis pidä paikkaansa.


  "BIOS on tietoturvaton."

Väite perustunee oletukselle, että tietoturvaa voidaan paikassa kuin paikassa parantaa
kryptografiaa lisäämällä. Sen vuoksi UEFIin on lisätty ns. "Secure Boot" -toiminnallisuus,
joka tarkistaa käynnistettävän ohjelmabinäärin (käytännössä siis käyttöjärjestelmän alkulataajan)
digitaalisen allekirjoituksen ennen sen suorittamista. Käytännössä oikeasti toimivan
Secure Boot -toteutuksen tekeminen on osoittautunut mahdottomaksi ja UEFI-laiteohjelmistoista
on löytynyt toinen toistaan naurettavampia tietoturva-aukkoja, jotka ovat tehneet koko
Secure Boot -toiminnosta toimimattoman. 

Secure Boot tarkistaa ainoastaan EFI-osiolta ladattavan EFI-binäärin, eikä se havaitse
sellaista paljon todennäköisempää uhkaa, että jokin haittaohjelma onkin tehnyt muutoksia itse
käyttöjärjestelmän sisältävään tiedostojärjestelmään käynnistyäkseen käyttöjärjestelmän
mukana pääkäyttäjän oikeuksin. Lisäksi useimmissa emolevyissä on mahdollista muuttaa
laiteohjelmiston CMOS-asetuksia ohjelmallisesti myös käyttöjärjestelmästä käsin, joten
mikä tahansa haittaohjelma voi helposti ottaa koko Secure Boot -toiminnon pois päältä.

Käytännössä ainoa varmasti toimiva keino varmistaa tietokoneen käynnistystietoturva on
kirjoitussuojata fyysisesti sekä käynnistysmedia että emolevyn laiteohjelmiston sisältävä
ROM-piiri ja sen asetukset sisältävä CMOS-piiri. Sillä tavoin se oikeastaan tehtiinkin ennen
UEFI-pöhinän valtavirtaistumista.


  "BIOS on 16-bittinen. UEFI on joko 32- tai 64-bittinen, joten se on parempi."

Intelin x86-prosessoreilla on useita eri toimintatiloja. Ne käynnistyvät ns.
reaaliosoitustilassa, jossa operandikoko on 16 bittiä. Ohjelmoija voi sen jälkeen
vaihtaa prosessoritilaa mieleisekseen. Suurin osa nykyaikaisista käyttöjärjestelmistä
käyttää joko 32- tai 64-bittistä prosessoritilaa. x86-suorittimissa on myös ns.
"operand size prefix", jota käyttäen on mahdollista käyttää 32-bittisiä kokorekistereitä
myös 16-bittisessä prosessoritilassa.

Turing-vahvassa järjestelmässä bittisyys ei kuitenkaan millään tavalla rajoita sitä,
mitä kaikkea koneella voi tehdä. http://paste.dy.fi/ylV/plainSen kummemmin BIOS kuin UEFIkaan ei tee mitään
sellaista, jossa prosessorin suuremmasta bittileveydestä olisi jotain hyötyä.
BIOS-rajapinta on täytynyt koodata jollekin tietylle prosessoritilalle, ja
historiallisista syistä siihen on valikoitunut 16-bittinen reaaliosoitustila. Se
mahdollistaa BIOSin ajonaikaisten palvelujen kutsumisen sekä 16-, 32- että 64-bittisistä
käyttöjärjestelmistä, joten IBM PC-yhteensopivien koneiden BIOS-rajapinnan 16-bittisyys
käy järkeen. Osa BIOS-kutsuista käyttää prosessoria 32-bittisessä tilassa.

UEFIn markkinointimateriaaleissa usein väitetään sen olevan jollakin tavalla UEFIn
etu, että prosessori on käyttöjärjestelmää ladattaessa jo "valmiiksi 32-bittisessä
tilassa". Prosessoritilan vaihtaminen on kuitenkin sen verran pieni osa käyttöjärjestelmän
itseinitialisointia, että asialla ei käytännössä ole mitään merkitystä. Korkeintaan
UEFI tekee tällä tavoin 16-bittisten käyttöjärjestelmien lataamisen hankalammaksi.


  "UEFI on laajennettava, toisin kuin BIOS."

Valhe. BIOSin spesifikaatiossa on myös alusta asti määritelty laajennettavuus.
Käytännössä jokaisen näytönohjaimen ROM-piirillä on BIOS-laajennus, kuten myös
erillisenä lisäkorttina myytävissä levyohjaimissa ja käyttöjärjestelmän latausta
verkosta tukevissa verkkokorteissa. IBM on julkaissut ohjeet BIOS-laajennoksien
tekemiseen kirjassaan "IBM Personal System/2 and Personal Computer BIOS Interface
Technical Reference" ( https://archive.org/details/bitsavers_ibmpcps2PSTechnicalReferenceApr87_5816663 )
 kohdassa 4-12 Adapter ROM.


  Miksi kaikella tällä on väliä?

UEFIn markkinointivalheita levittävien tahojen toiminta on epäeettistä monestakin syystä.
Ensinnäkin, valehtelu on rumaa. Erityisen rumaa se on silloin, kun sillä tavoitellaan
taloudellista hyötyä. Microsoft on luonut käyttöjärjestelmäänsä keinotekoisen rajoitteen,
jolla on saatu aikaan yhteensopivuusongelma vanhojen BIOS-laiteohjelmistolla olevien
tietokoneiden ja uudempien UEFI-laiteohjelmistolla olevien tietokoneiden välille.
Samat käyttöjärjestelmät eivät enää toimi molemmissa. Näin pakotetaan ihmiset ostamaan
uusia tietokoneita, vaikka vanhassa ei ole mitään vikaa.

Väärien käsityksien levittäminen teknologiasta on haitallista. IT-ala on jo valmiiksi
kriisissä osaajapulan takia. Uudet ohjelmoijat eivät enää osaa koodata
( https://nmn.gl/blog/ai-and-learning ) koska eivät tiedä, mitä ovat tekemässä. Myöskään
koulumaailmassa ei joko opeteta konsepteja ollenkaan ( http://techrights.org/n/2025/02/25/Sami_Tikkanen_Explains_What_Happened_to_Computer_Science_Educat.shtml ) tai ne opetetaan
jollain kieroutuneella tavalla väärin.

UEFIn markkinointivalheet ovat omiaan aiheuttamaan lisää sekaannusta ja väärinkäsityksiä
alalle ammattilaiseksi pyrkiville ihmisille. Näistä väärinkäsityksistä joutuu erikseen
opettelemaan pois, mikä on yleensä hankalampaa sen jälkeen, kun väärän tiedon on
kerran oppinut. Erityisesti kernelien, ajurien ja muiden matalan tason ohjelmakomponenttien
kehittäjistä on pulaa, eikä uusia enää juurikaan edes valmistu alalle. Kehitys on
kestämättömällä tiellä ja teknisesti valheellisia väitteitä sisältävä markkinointipöhinä
pahentaa tilannetta.

Lisäksi siirtymä emolevyjen laiteohjelmistoissa BIOSista UEFIin on tehnyt muiden
käyttöjärjestelmien ja ohjelmien kuin Windowsin käynnistämisestä hankalaa ja monessa
tapauksessa jopa mahdotonta. BIOSin kanssa minkä tahansa käyttöjärjestelmän käynnistäminen
onnistuu ilman mitään erityisiä kikkailuja - ei tarvitse tehdä muuta kuin laittaa
käyttöjärjestelmän sisältävä levy johonkin asemaan ja tietokone käynnistää käyttöjärjestelmän
riippumatta siitä, minkälaista osiotaulua tai tiedostojärjestelmää käynnistettävä
käyttöjärjestelmä käyttää. UEFI-koneiden kanssa jo pelkästään Secure Bootin saaminen pois
päältä tuottaa usein hankaluuksia ja varsinkin teknisesti vähemmän edistyneempien käyttäjien
tapauksessa yleensä estää Linuxin tai muun vaihtoehtoisen käyttöjärjestelmän asentamisen
kokonaan.

BIOS on lyhenne sanoista "Basic Input/Output System". Käytännössä se tarkoittaa
laiteohjelmistoa, joka tarjoaa ajonaikaiset palvelut, joita käyttöjärjestelmä voi
käyttää perusasioihin kuten näytölle kirjoittamiseen, näppäimistön lukemiseen ja
kiintolevyn lukemiseen ja kirjoittamiseen. IBM PC ei ole ainoa tietokonealusta,
jossa on BIOSin tapaiset ajonaikaiset palvelut ROM-piirillä. BIOS on mahdollistanut
omien käyttöjärjestelmien tekemisen melko matalalla kynnyksellä pelkältä
harrastelijapohjalta, koska ohjelmoijan ei ole tarvinnut koodata erikseen ajureita
kaikille olemassa oleville näytönohjaimille, levyohjaimille ja
näppäimistörajapinnoille - itse ajurikoodi on ollut osa emolevyn ROM-piirillä
olevaa laiteohjelmistoa ja abstraktoitu BIOS-kutsujen taakse. Sen sijaan UEFI
ei tarjoa minkäänlaisia ajonaikaisia palveluita, joten sen yleistyminen tulee
tekemään myös harrastelijapohjalta tehdystä käyttöjärjestelmäkehityksestä niin työlästä,
että käytännössä sitä ei enää juurikaan tehdä. Sekin pahentaa entisestään
ohjelmointialan osaajakriisiä.