Dat verklaart niet waarom UEFI zoveel complexer moet zijn dan BIOS.
Het verklaart het deels. Een ander deel wordt verklaard met dezelfde verklaring als waarom windows 10 zoveel complexer is dan windows 3.11, dat weer zoveel complexer is dat MS-DOS.
Je kan heel goed een casus maken dat minder complex een beter idee is
Minder complex betekent in ieder geval minder kans op fouten. Aan de andere kant minder complex betekent ook minder mogelijkheden. En mensen willen mogelijkheden. De meesten hoeven geheugentimings niet te configureren, maar een aantal wel, en die willen er genoeg voor betalen dat de feature erin gestopt wordt. Zelfde voor booten van netwerk, booten van USB device, etc. etc. etc.
en dat er dus niet meer gedaan zou moeten worden dan een boot device vinden, initialiseren, genoeg daarvandaan laden dat het OS het verder zelf wel kan, en het is wel goed.
Boot device vinden betekent voor jou (1e SATA harddisk vinden) iets anders dan voor de technische dienst van de PC-winkel (1e externe USB drive vinden), of voor een server operator (1e of 2e helft vinden van de gemirrorde SAS disk), of voor een eigenaar van een clouddienst die 1000 nieuwe machines moet uitrollen (boot-server vinden op het netwerk).
Okee, het is ook wel handig iets van invoer en uitvoer te hebben, wat vroeger op servers en nog steeds wel op embedded apparaten met een serieel poortje gedaan wordt.
...en de meesten hebben geen seriële terminal, of terminal server, maar enkel een toetsenbord en monitor. Dus: die moeten voor invoer en uitvoer gebruikt kunnen worden.
Al het andere kun je wel doen maar doet het OS eigenlijk toch nog wel een keertje over, dus waarom die moeite doen? Dat is de eigenlijke vraag, en zeggen "er moet vanalles", nou eigenlijk is dat op de keper beschouwd lang niet zo belangrijk als het lijkt.
Even een lijstje van wat er moet:
- Initialiseren CPU
- Initialiseren chipset
- Detecteren en initialiseren werkgeheugen (anders is het werkgeheugen niet toegankelijk!)
- Detecteren en initialiseren PCIe controllers. Toekennen van IO ranges aan elk.
- Detecteren van alle devices op de PCIe bus.
- Een device op een PCIe bus kan een andere PCIe controller zijn (of een PCI controller). Ga twee stappen terug voor die PCI(e) controller.
- Toekennen van IO ranges en eventueel geheugen-ranges aan minimaal de IO devices die we nodig hebben. Zoals: SATA controllers, SAS controllers, USB controllers: elk daarvan kan het boot-device bevatten. En dan heb ik het nog niet eens over SAN controllers. (maar als we toch bezig zijn, kunnen we net zo goed IO-ranges en geheugen ranges toekennen aan alle PCI(e) devices die we vinden)
- Initialiseren van eventuele SATA controllers. Detecteren van alle sata disks
- Initialiseren van eventuele SAS controllers. Detecteren van alle sas disks
- Initialiseren van alle USB controllers. Sommige controllers doen zowel USB1, USB2 als USB3. Die functies moeten waarschijnlijk afzonderlijk geïnitialiseerd worden.
- Detecteren van alle USB devices op het systeem (o.a. disks, toetsenbord)
- (Eventueel) Initialiseren van grafische kaart voor feedback naar gebruiker. De USB devices hebben we al, dus een toestenbord kunnen we dan ook gebruiken.
- Nu we weten welke disks er zijn, weten we ook welke daarvan we moeten hebben om van te booten. Dat kunnen we dan eindelijk doen.
Natuurlijk kun je dit alles vereenvoudigen, door een eenvoudig, vast boot-device te gebruiken (geen PCIe, etc). Daar moet je er dan wel twee van hebben (voor mensen voor wie redundancy belangrijk is), en tevens de mogelijkheid om een alternatief OS te selecteren (voor als een OS update misloopt). Daarmee wordt het al complexer.
Als je het dan zo eenvoudig mogelijk gemaakt hebt, dan zijn de mensen niet tevreden, omdat ze hun OS op een zelf-gekozen flash-drive, sata-disk, etc. willen zetten. Of ze willen SAN boot, of netwerk boot. En ze willen dit en dat etc. etc. etc. Dus weet je zeker dat er een mini-OS geschreven wordt, voor op het eenvoudige boot-device, dat al die features die niet meer in de BIOS zitten bevat. Dat mini-OS zorgt dan dat het eigenlijke OS geladen wordt, op de manier zoals de gebruiker dat wil.
Et voilà: wat vroeger jouw complexe UEFI BIOS was, is nu jouw complexe mini-OS, met dezelfde features. De volgende stap is natuurlijk dat dat mini-OS direkt in de flash-ROM gebakken wordt, en dan zijn we weer terug bij af: een complexe BIOS.
In het geval van UEFI was het heel belangrijk dat fabrikanten vooral extra features konden toevoegen en dat de muis ook gebruikt kon worden om op de menuutjes te klikken en dat ze er dan mooi gelikt en grafisch uitzagen.
Dat is wat de gebruikers uiteindelijk willen. De fabrikanten gaan echt geen gelikte grafische interface bouwen als niemand dat nodig heeft, en niemand daarvoor wil betalen. Dat kost geld, en dat geld kunnen ze wel beter gebruiken. Dat jij zoiets niet nodig hebt, betekent niet dat andere mensen dat ook niet willen, en er niet voor willen betalen.
Ondertussen is de boot-interface tussen OS en UEFI ook een stuk ingewikkelder: In plaats van "hier is je disk, veel plezier ermee" is het "oh ja je moet ook eerst een fat32-filesystem kunnen lezen." En zo zijn er nog wel meer details die mij sterk aan het second system effect doen denken.
Ingewikkelder, maar tevens eenvoudiger. De software in complexer, maar het is bijvoorbeeld een stuk eenvoudiger om van een ander soort device (externe USB drive, SAN, netwerk) te booten. Ook is het een stuk makkelijker om meerdere verschillende OSen te installeren zonder dat ze elkaar in de weg zitten. dat was in de oude BIOS-tijden wel anders...
Ik zou dan dus ook zeggen dat UEFI een stukje complexer is dan strikt noodzakelijk voor het simpele doel "een OS starten".
Net zoals Windows, of Linux, etc., een stuk complexer is dan strikt noodzakelijk voor het gebruik wat ieder individueel persoon er van maakt. Als je het OS echter eenvoudiger zou maken, precies goed voor jouw gebruik bijvoorbeeld, dan zouden er wellicht 1000en versies zijn, zoniet meer, een voor elk soort gebruik, en dat zou véél duurder zijn, en al met al juist een stuk complexer om te maken en te onderhouden dan één versie van dat OS die voor de meeste mensen bruikbaar is.
Het is dan ook niet raar dat er regelmatig problemen mee opduiken zoals wat we nu hier zien. Hoe meer complexiteit, hoe meer gaten. En dat maakt misbruik ook weer makkelijker.
Inderdaad. En dat is jammer. Maar dat is onvermijdelijk En dat geldt ook voor het OS, en voor heel veel dingen: de complexiteit neemt toe, waardoor de problemen ook toenemen. Maar nogmaals: het zou een stuk duurder zijn om het anders te doen (zie uitleg boven).