Matthew Garrett ([personal profile] mjg59) wrote2011-11-03 01:47 pm
Entry tags:

Understanding the current state of UEFI

This story has been floating around for a week or so. The summary is that someone bought a system that has UEFI and is having trouble installing Linux on it. In itself, not a problem. But various people have either conflated this with the secure boot issue or suggested that UEFI is a fundamentally anti-Linux technology.

Right now there are no machines shipping to the public with secure boot enabled. None at all. If you're having problems installing Linux on a machine with UEFI then it's not because of secure boot. So what is actually causing the problem?

UEFI is a complicated specification, with 2.3.1A being 2214 pages long. It's a large body of code. There's a lot of subtleties. It's very easy for people to get things wrong. For example, we've seen issues where calling SetVirtualAddressMap() resulted in the firmware referencing boot services code, a clear violation of the spec on the firmware authors' part. We've also found machines that failed to boot because grub wasn't aligning its stack properly, a clear violation of the spec on our part.

Software is difficult. People make mistakes. When something mysteriously fails to work the immediate assumption should be that you've found a bug, not a conspiracy. Over time we'll find those bugs and fix them, but until then just treat UEFI boot failures like any other bug - annoying, but not malicious.

Re: Simplicity is often a virtue.

(Anonymous) 2011-11-08 08:35 pm (UTC)(link)
I'm not going to disagree with you either! I think you've very accurately described the current situation.

I'm reminded of the way that DAP was a reaction to the lame crap that was computerized directory lookup, and LDAP was a reaction to the hideous complexity of DAP. Maybe what we need is to nail down an optimally useful subset of EFI, disposing of inherently bad ideas like filesystem drivers in firmware... LUEFI p'raps? Course, that just invokes xkcd (http://xkcd.com/927/). But it worked for LDAP.