EFI Sucks (2012)
plus.google.com
plus.google.com
When I got my first UEFI-using notebook in 2012 (same year as the submission), things were a bit rough because the Arch wiki did not quite know what it was talking about, and the Arch ISO was not UEFI-bootable, so you had to use some trickery to install an UEFI bootloader, but even then, it only took me two hours to figure out partitioning and install the bootloader.
Since then, stuff has gotten much better. Just recently, I switched my VirtualBox VMs to use UEFI emulation instead of BIOS emulation because it allows me to use the well-designed systemd-boot (previously known as gummiboot) instead of that absurd abomination called Grub 2.
This doesn't read like a success story to me.
I boot UEFI, but it's just so bloody cumbersome and fragile. The entire concept of having boot configuration in NVRAM is terrible.
(Except for that one Gigabyte mainboard which I returned upon finding out that its v1 firmware will only boot Windows 8.1. Not even Windows 8.0. There was a firmware update that fixed the issue, but without a bootable OS, applying it is a chicken-and-egg problem.)
And that has to be the strangest "feature" I've ever heard of from a hardware firm. Was it maybe purpose-built for a bulk order of machines that were going to be pre-loaded with Win8?
That's nice
With the old BIOS-based boot process, the computer (the hardware/motherboard; not the operating system you ran on it) would, when it started up, look around for installed operating systems to boot. It wouldn't look too hard: on each hard disk, it would look in one (or, if you were lucky, four) places for a specially-prepared segment outside of the data installed by the operating system. This segment isn't a file or something that you can browse to normally on the drive (though some things shimmed it so it appeared thus); it's a non-file special segment outside of the OS's normal data/files. That segment (well, segments, but still) had to be set up just so otherwise the computer (BIOS) wouldn't find your OS to boot it. Doing this was often tricky, even more so when you needed multiple operating systems to be bootable. Doing this was also pretty inelegant, since if you wanted to stick an operating system on a sub-partition of a disk, as part of the installation process you had to mess with data that affected everything on that disk, not just what was in the sub-partition. It worked, and was simple, but it was the equivalent of being forced to modify a single central global variable in a software project every time one sub-part (file, function, whatever) of that project wanted to use a new library. For an excellent writeup of the gritty details of the BIOS/MBR startup process, see this document: https://neosmart.net/wiki/mbr-boot-process/
UEFI, put most simply, looks around for installed operating systems a lot harder than the BIOS method did. It does a lot more than that, but the benefit GP was describing accrues from UEFI being much more capable in terms of discovery: instead of checking a single global prepared location for bootable OSes, UEFI can look in the files on the drive and do the intuitive thing: "looks like these files are part of an operating system; I'll give the user an option to boot from it".
This doesn't always work perfectly, and there's a lot of complexity (and criticism) I'm hand-waving away here, but that's the gist of the difference.
Sorry, turned out to be a not-so-short version.
You don't need a seperate bootloader, or a multi-bootloader on any system. They only exists as a convenience. People still use GRUB on EFI for exactly that reason.
Default boot into OS #1. If I want any other OS, I manipulate efi bootnext (efibootmgr -n #### && reboot).
So much simpler and more efficient.
The biggest suck on EFI is that it uses PE fileformats. I would have liked it more if it would have just loaded a raw PIC binary or ELF. And not used Windows Calling Conventions.
(Security has nothing to do with it, the module can be crypto signed by user installed key.)
Plus the critical hardware setup documentation is not being released at all.
Another is the use of SMI to communicate with the thing which just does not play well with a preemptible OS.
Memory map handling is additional badness on top.
http://yarchive.net/comp/linux/efi.html
And here he is on ACPI:
If only more people kept that in mind. ;-)
I'm not so sure about the ACPI standard, it certainly has some warts but the main issue seems to be manufacturers who ship the thing once their hardware manages to boot Windows. Once. And note I said boot, not run.
Sigh, they had one job, and they managed to screw it up, so we do still have to put up with this.
Is he talking about the system that has replaced grub on most of my machines with a more reliable one that's built into the hardware?
In 2012, EFI/UEFI was pretty unreliable because the implementations were bad and the software support was terrible. Nowadays, I find it preferable.
Additionally the specific EFI FAT32 implementation grants various patent rights which means you can implement EFI FAT32 (atleast, last time I checked by the situation)
The other restrictions of the FS barely matter since 99.9% of the time it's used as /boot it will be read from and has barely any activity. The data integrity can be insured by setting up secureboot (MS or User/Setup mode)
[0]: https://en.wikipedia.org/wiki/File_Allocation_Table#Patents
In the pure form of the file system, yes, but with VFAT (which also adds long file names, creation time stamps, and access time stamps), the precision is exactly 1 second increments.
(I don't know, I just have some vague memory of some Tomtom/Microsoft conflict due to FAT)
edit: user 'xxs' managed to type up the same issue before me (while I was typing mine).
The only other option I'm aware of that is cross-OS would be UDF, which back then wasn't popular outside DVDs and even today people continue to ignore. Though it would have been patent free.
Did Linus also criticize the complexity and untested nature of systemd?
I suppose it could also be argued that the kernel is also unnecessarily complex as well?
I would like to offer, as a counter example, every micro kernel ever.
The closest relative is NT and that is a hybrid, not purely micro. Modular and hybrid kernels (Linux and NT respectively) offer better external vs internal complexity tradeoffs; Linux and NT are internally complex since they do all the hard stuff, micorkernels are externally complex since someone else needs to do the hard work.
Microkernels will shove this exact complexity elsewhere not make it go away.
Keep in mind that at one point he was so fed up with Kay Sievers that he announced he would not accept any kernel patches that originated from that person.
I think it related to Sievers unilaterally deciding that the kernel, and not udev, should be responsible for loading firmwares, leading to the kernel devs scrambling to implement the required functionality. In the aftermath some kernel devs even pondered forking udev and bundling it with the kernel code as part of its userspace toolkit.
And this was from before udev was merged with systemd (iirc).
(IIRC, they claimed it offered better performance, Linus ran some benchmarks and claimed the kernel-dbus implementation performed worse than the regular dbus daemon. My memory on the subject is fairly vague, though, so don't take my word on it.)
Let alone the concerns that secure boot and other OSes.
Super simple steps to install an Arch Linux guest on VirtualBox with pure EFISTUB. No bootloader! Fill in the blanks with https://wiki.archlinux.org/index.php/installation_guide
timedatectl set-ntp true
gdisk /dev/sda
# 256 MB partition type EF00
mkfs.fat -F32 /dev/sda1
mkfs.btrfs /dev/sda2
mount -o discard,compress-force=lzo /dev/sda2 /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
pacstrap /mnt base base-devel btrfs-progs vim openssh
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime
timedatectl set-ntp true
vim /etc/locale.gen
locale-gen
vim /etc/hostname
vim /etc/hosts
systemctl enable dhcpcd
systemctl enable sshd
passwd root
useradd -m user
passwd user
# /boot/startup.nsh
fs0:\vmlinuz-linux rw root=/dev/sda2 initrd=\initramfs-linux.img
exit
umount -R /mnt
poweroff
Wrote about the process: “The 2007 plastic MacBook lives again with Mint-y Linux awesomeness” @harijay https://medium.com/@harijay/the-2007-plastic-macbook-lives-a...