Ask HN: Why are Windows and macOS upgrades so terribly slow compared to Linux?

10 points by capableweb ↗ HN
I own a couple of laptops, desktops and servers all running different OSes, some of them dual-booting and some not.

When I upgrade Windows, it frequently tells me the upgrade will take ~2 minutes, so I initiate it by rebooting, and after 20 minutes and multiple reboots, it finally gets me to the login, and first login spends ~5 minutes to login. Overall, terrible experience. Download is done in the background before doing the install, so this is just the installation process.

When I upgrade macOS, the progress in the beginning is fast until it reaches ~40%, then it stops and basically hangs with no process and might take up to an hour to do an upgrade. Same here as with Windows, download has been done in the background, so this is just the installation process, not including download.

Compared to when I upgrade my Linux boxes (most of them using Arch, some NixOS, some (still) on Ubuntu or Debian), the upgrade usually spends most time in the download stage, maybe maximum 10 minutes of installation and then reboot and it's done.

I recently didn't use my workstation that is using Arch for about a month. A huge amount of packages are installed on this as I do a lot of different work, so after a month I had about 40GB worth of updates to download and install. The download took some minutes, it spent some minutes installing all the packages, it spent the longest time recompiling some kernel modules and regenerating the boot images, then I rebooted and was back to work.

But it's never that fast on Windows or macOS. How come? Why is Linux distributions so much faster? Windows and macOS have huge teams working on them, there must be something I'm not understanding or missing, because I can't see how the experience can be so much worse for these OSes compared to Linux distributions.

26 comments

[ 3.8 ms ] story [ 53.8 ms ] thread
Windows and MacOS probably are trying to make sure the upgrades don't fail using a lot of brute force. Linux distros are more "if it breaks, you get to keep the pieces".
So rather than focusing on making sure the upgrades work, they check during the upgrades actually do work? Compared to Linux, which makes sure the upgrades work so no checking is necessary? And this is what takes the majority of time and requires multiple reboots during the installation process and requires a slow first login?

I don't know, that sounds very sloppy if true and not something I'd expect from professional OSes developed by huge companies.

To give context, what happens if you lose power midway through?

One of the things Windows will do is first lay out the work to revert all changes in that happens (across potentially thousands of files). It also need to flush them to disk (very slow, even on SSD) and then perform in a manner that would survive all sorts of failures.

That is pretty expensive.

Some modern linux distros use snapper to create a snapshot prior to upgrading. This snapshot can be used to roll back the upgrade. Not only in case of power outage but also if the upgrade introduces bugs or other issues. The upgrade is still fast, so it is the best of both worlds?
Are you trying to say Windows/macOS won't break if they lose power in the middle of the upgrade process?

I remember long time ago (maybe back in the xp/vista days) when my Windows installation broke when we had a power outage during my upgrade. Haven't happened lately, but searching online I can see bunch of people having the same problem with latest Windows versions and macOS as well, requiring a reinstall to fix.

I don't know the specifics about Windows. They probably have a ton of legacy their users have to suffer from.

Macs afaik just replace the whole OS on every upgrade. Takes some time but tends to be kinda atomic without requiring complexity.

I can't speak to all distributions but Debian and derivatives are actually pretty good about not leaving the system in an unrecoverable state. The only times I hear about an `apt update` breaking is when someone runs out of disk space or has created a FrankenDebian with third-party repos. These failures are not always straightforward to fix, but they are generally recoverable. The systems are knowable because they are open source and lots of people are familiar with their inner workings.

Contrast with Mac and Win, which are essentially black boxes that only the company's developers understand (if we're lucky).

It's been more than a decade since I used Win or Mac for anything important but back then the standard advice before any major upgrade was "make a backup" because these had a reasonable chance of putting your system into a state that required a reinstall.

>I can't speak to all distributions but Debian and derivatives are actually pretty good about not leaving the system in an unrecoverable state.

They sure do, and I cannot remember the last time my Arch Linux would have broken because of an upgrade. While the packaging systems of Linux distributions are pretty damned good, I believe their stability is more due to great individual efforts of the package developers than any systematic design principle. Also the stability of critical upstream packages has improved greatly.

NixOS's stability derives more from systematic design, but perhaps ironically, NixOS is the only Linux distro I remember having soft bricked in the last 5 years by running an upgrade.

I've borked both my Arch installations and NixOS (by my own stupidly, not just upgrades) a couple of times. What's really fresh with NixOS is how easy it is to go back, just reboot and select the image from when the system worked. Getting a Arch installation to work after borking it can be a bit harder.
Maybe linux is light weight and is more modularised than Windows or macOS ? Was it the same behaviour using SSD vs HDD to account for disk fragmentation ?

Maybe somehow windows / macOS updates are linked to something in BIOS (Idk either) ?

Idk.

I haven't used a HDD for the OS drive for many many years now on any of the OSes, so shouldn't matter.

It's possible I guess that both Windows and macOS upgrades something regarding the boot process, one of the Windows machine (which today went through the ~25 minute upgrade I described in the OP) is a Surface Pro 8, and all the macOS machines are obviously Apple hardware, so very likely there are firmware upgrades happening as well. It's a good guess.

> When I upgrade Windows, it frequently tells me the upgrade will take ~2 minutes, so I initiate it by rebooting, and after 20 minutes and multiple reboots, it finally gets me to the login, and first login spends ~5 minutes to login. Overall, terrible experience. Download is done in the background before doing the install, so this is just the installation process.

My Windows upgrades have never taken this long and first login has never taken ~5 minutes. On the other hand I have had upgrades between Ubuntu versions take an incredibly long time.

Yeah, Ubuntu upgrade process is also trash, probably the distribution I've had the most upgrade pains with. No argument there.

But the Windows issue I mentioned happened literally today, and was the reason I wrote the post in the first place. And it was on a Surface Pro 8, which is a Microsoft device so thinking it should be the best device to run Windows on. But yeah, took awful long time and login took forever compared to how fast it normally is. Running Windows 11, as it came with when I bought it.

Not really doing anything extreme with it either, the most "complex" thing I'm doing on it is running WSL2 I guess, but also a official Microsoft project and shouldn't impact the upgrade process as far as I know. The computer is just a couple of months old as well.

Maybe it's a customised windows 11 for surface pro. I usually have maybe 5 seconds for login ? and I can remember windows xp having to wait for 2 or 3 min to login.

Can you check if there are any startup scripts within windows or there is some sort of event registry, right ? I've not experimented that much but - there would be logs.

Not sure, think it's the default Windows 11, haven't noticed any differences. Usually login takes sub-second, just after this specific update that it took long time. After logging in once after the update, subsequent logins are as fast as before.

I have no custom startup scripts what so ever. Everything works just fine during normal operations, just that Windows updates suck and wasting my time, just like macOS.

My own experience matches OP, I never have a Linux update take more than 5 minutes or so.

I used to run a Windows VM for the occasional proprietary windows program (generally some hobby-related thing) but every time I fired up that VM, it would force an update and basically be completely unusable for 45 minutes or more, just so that I could do 5 minutes of work on it. My time is more valuable than that, so I just simply don't use it anymore and have accepted that Windows is unavailable to me.

You raise another good point which I didn't even consider. When I upgrade my Linux computers, I can more often than not continue working like nothing is happening, while the installation finishes. Only issue is nvidia drivers which require a reboot after finishing the upgrade, otherwise applications like Alacritty doesn't open anymore. Usually I work around this by upgrading everything but nvidia the first time, then do the nvidia update separately. And once full update is finished, you do a normal reboot and everything is complete.

But with Windows and macOS, you're dead in the water while the process is being done, so even if you wanted to, you couldn't continue working.

You can probably work around that issue by having a script automatically backup the old kernel modules and restoring them after the upgrade. I use one for arch
I think that it is due to the fact that Linux update is broken into individual packages.
I guess the question then changes to "Why are not the major OSes breaking up their update into individual packages to improve the experience of the upgrade process?".

Nothing worse than having something that will take ~10 minutes to complete but getting stopped by starting an upgrade that takes more than 30 minutes.

It's unlikely that you'll get a satisfactory answer here, unless someone who's worked at Apple or Microsoft wants to burn bridges and tell us how the proprietary update code compares to Linux.
Your opinion might change if you worked on compat at Microsoft. The installed base is unimaginably huge. There are massive competing forces, i.e. the Windows team wants one thing but Adobe wants another because it breaks the last version of Photoshop. Or a change beaks a forms package used by Word but not by Excel. Or a decision hasn’t yet been made by the company to use GPU features that will be pop next year but not quite this year, etc. Well-meaning, dedicated players can spend months on a decision that looks wrong to you after the fact but wasn’t when the bug was finally closed.
I think Windows is making some sort of restore point, whereas Linux just goes ahead and if something goes wrong, you have to spend a weekend fixing it by hand?
I remember upgrading Ubuntu a few years ago and then having it reboot to a command line error, then spending the rest of the day finding some XML file that was now malformed and fixing it. That was a ton of fun :-P

To be fair, it was kind of my fault. I had made a modification that wasn't quite right, but the new version of something couldn't handle it anymore.

Windows and Mac OS software is tightly tied across the entire stack. Linux is more modular. For example, on Windows or Mac, you can't exactly swap out the entire Desktop UI - on Linux you can, quite easily, without affecting the rest of the system.

Additionally updates for Windows and Mac need to be EXTREMELY robust, to avoid breaking lots of peoples computers. And its hard to write robust updates for non modular systems.

As a result, updates to Windows or Mac are often overkill - instead of updating some library, a bigger chunk overall gets updated to minimize the chance of affecting the OS.