I tried to switch from Windows to Ubuntu multiple times but I go back to Windows each time. I have mainly 2 issues: - Upgrade to newer version always fails. I'm left with a broken OS at the end. - Although the UI has improved a lot since the early days of Ubuntu, I still don't like it. I know I can customize it but it always causes issues on some apps.
I'm pretty sure that this is an issue of having a more sophisticated package management.
OS X and Windows are basically huge software bundles that are dropped on a drive. They rarely change their internal structure gradually (Windows takes an odd middleground of basically keeping all patches around). It's a well understood process and easy to reason about: copy bunch of data A to location B, make sure it matches a checksum. Ship some parts in double in different versions, to support older versions. All the issues I ever had with that were with all the packages software I handbuilt on top of that.
OSes fully built on packaging software from ground up, e.g. apt, rely on the assumption that the package tree is always problem-free and that you can migrate any custom evolution of that tree to a new standard version. While this works formidably for smaller changes (I just want to add a package), where the potential breakage is contained to a rather limited set of packages, possibly close to the leafs of the tree, this gets problematic if you want to change a package on the top of the tree.
I think this gives a lot of power to the approach of immutable machines, combining both approaches: fine-grained dependency-tracking and resolution, while avoiding the evolutionary problems by always rebuilding the system from ground up on any change.
FWIW: I love a proper package management. But I don't believe in its infallibility.