| Booting a modern laptop, something I do every day, is the anti-low-tech paradigm. Just my motherboard BIOS is 50348032 bits. And it doesn't provide many options, I think the other way around, it hides many options on purpose. Then there is an i7 processor... a whole beast itself against simplicity. With its Intel Management Engine, it's microcode updates, etc. Secure boot? UEFI? VT extensions? TPM? NFC? graphics initialization? OK, so far, we've code and material to fill the whole life of an engineer, and we didn't reach still the OS bootloader. Ah, the bootloader, who remembers lilo... here we go with grub. Go read it's source code, and return back to explain me everything that is in there... see you in 3 months only for this. Here it goes, the kernel. A thing that normal users don't see or touch. More than 30 Million of lines of code more. I won't talk about complexity here, but this project can really say it's "batteries included". The same you get an old obscure filesystem/protocol nobody uses, than proc/mem/i-o/netowrk schedulers for supercomputers. Blobs, firmware, more graphics stuff, observability, wifi, storage, a whole word in itself and everything comes up in microseconds. There is such initram thingy, which is another "mini" (not mini in lines of code) operative system. Busybox? xD look at that. Now, here it comes... the low-tech king: systemd! our love-hated init system (only init? well you already know). Now, here we can start the operative system (which may not bee too simple), we could be talking for years, of each of the micro-components that help to launch the base OS services until you get to the login page. Depending on the distro... we're skipping a hell of complexity (it's not the same the ps aux of an ubuntu desktop, than the ps aux of a minimal system). Let's skip it, let's skip hundreds of software components and phone home stuff. The auth part, gives for a few years more of reading code, talk about, skipping plugins and optional stuff. Then you can get a window manager or a desktop environment (so a week or some months of code more), running over Xorg (do you think it's simple?) or Wayland (you can devote your life until you own this part). And now... let's launch a "web browser". I will stop here, we won't finish if we go deep into the browser complexity. Modern hardware, software and engineering, are a big ball of snow. The more it advances, the bigger and out of control it gets. |
This is largely due to path dependency - there’s a required amount of “bigness” and complexity to do the things we want to do, but it’s substantially lower than the amount we have, because we’re not starting from zero, we’re building on what we already have. You can see this everywhere - telecom lines follow old train lines, keyboard layouts mirror old typewriter layouts, desktop file system layouts mirror old mainframe layouts.
It mirrors evolution in that way - the path taken is the cheapest path from the current location, not the ideal path, which is why a giraffe has the same number of bones in its neck as you do.
I’ve actually been interested recently in what it would look like to have a truly modern software & hardware stack built from the ground up for modern computing - I feel like there were attempts at this in the 90s (BeOS comes to mind), but even something like ChromeOS was basically Linux under the hood. It feels like the industry’s decided what we have is Good Enough, and that’s a bit of a shame, because you’re right, it’s really quite a ball of spaghetti.