sio's ramblings

All Linux Distros Have Bad UX

All Linux distros I've ever used have substandard UX. Time for an unstructured rant.

As a long-time Linux user who has a lot of experience and ability to produce software problems, there's a couple major issues with Linux distros that I can see:
1. They self-disassemble. E.g. Ubuntu becomes unbootable after the first GRUB update for me, Debian breaks it's APT database and doesn't know how to fix it, BTRFS is often-used but has subtle failure modes etc.
2. They often lack support for closed-source software entirely, even when that software is required to make your hardware work.
3. There's a lot of them, but most don't do anything different - Arch and Fedora are only really differentiable by Neckbeard factor, for example, they have the same file organization, the same init, the same available packages broadly speaking, and you mostly use them the same way 4. Python is always broken
5. GNU software is insanely brittle, and it's documentation is often thoroughly unhelpful.
6. Breaking the distro is incredibly easy (so easy many distros do it on their own, see 1.)
7. Discoverability of system configuration is awful
8. There's no useful differentiation between programs required to get the system functioning and programs that the user installed on top of that, leading to extremely difficult to understand breakage
9. The underlying filesystems like to break and are very nonresilient - this is a problem with Linux, not the distros specifically
10. Required programs to get a usable system are not installed by default (see also: Arch shipping without a text editor)

These fall into a couple major categories:
1. flawed packaging system
2. terrifyingly bad documentation and communication of this documentation to the user
3. flaws in the kernel
4. toxic minimalism

flawed packaging

It appears to be the belief of most distro maintainers that the distribution should consist entirely of packages that can be put together any which way. This is obviously nonsense, as many combinations will not result in a remotely functioning system - and where people need odd configurations, they can feel free to strip out what they don't need, knowing what's actually supposed to be there.

What happens in practice is that a user installs a certain set of packages, uninstalls a few, installs a few more, updates, and then their system no longer boots. Imagine your grandma staring at a GRUB prompt (if your grandma is too tech literate for this to work, substitute in any other relative that isn't). Most users cannot recover from this situation, even though GRUB itself technically could.

The obvious solution to this is an immutable (ish) core system with easily installed packages on top that can then be easily uninstalled as well. You don't need containers for this. You don't need a built-in autoupdater. Just banish the program into it's own directory with all the bits it really needs and be done with it.

terrifyingly bad documentation

GNU software is particularly terrible on this front - there's a persistent desire to funnel users towards GNU's info program, which is difficult to use while providing information in a format that is generally useless for solving whatever problem you actually have.

Even if we're not considering GNU software, manpages are often awful, if present at all (again, why would you not include this? It's a few kilobytes of text). This has a few causes, one of which is that man uses it's own format, with no easily communicated way of getting from e.g. Markdown to that format, as well as aforementioned "just use info" mentality.

The manpage problem can be solved by adapting the FreeBSD manpages, which are generally excellent, and including all available manpages in any given distribution.

It's often unnecessarily difficult to boot a system with an encrypted root disk, and setting this up is error-prone. Some distributions now at least support an encrypted setup, though it's still not the default. By all accounts, it likely should be the default.

The way this documentation and presence of programs is communicated to the user is also a problem - there have been cases where I've written a tool from scratch, only to find out later that a tool exists to solve that problem, and that tool is already installed on my system, it just has a weird name I can't remember and that seems completely unrelated to what I want to use it for.

Easy solution: generate a PROGRAMS.md in /usr/bin/ that contains a table with all programs, and a description of what they're for (including input and output formats). Not ideal, but it'd be less bad at least.

None of this solves the problem for most users, for whom discoverability via GUI is important. And building GUIs on Linux sucks.

flaws in the kernel

This is particularly bad with regards to filesystems, as they suffer the most with unplanned shutdowns, but it's notable for a few other things as well.

Filesystems supported by the kernel often cannot recover from exceptional conditions - e.g. a corrupted journal for ext filesystems, or bitrot for almost all filesystems. These are conditions that, counter to kernel developer's expectations, do occur often in real life. I've been papering over this with ZFS, but I'd prefer not to have to do so.

The scheduler is non-optimal for any use. This isn't easy to fix, and I'm happy it at least doesn't hang like FreeBSD's ULE likes to do...

Windowing, easy to use and configure sound, and all related bits that are required to get a functioning desktop system should just be integrated into the kernel. We don't need Wayland. We don't need Pipewire. We don't need Pulseaudio. We don't need X11. We just need the kernel to handle this shit to the maximum extent possible, as correctly as possible, with low latency and lower resource usage. This would of course also finally give us some fucking standardization for desktop programs.

None of that is unfixable. It just takes work. There's plenty more I could complain about with the kernel, but it at least works.

toxic minimalism

Many Linux distributions come without manpages, a workable text editor, graphics drivers, or anything but what a small group of terminally online programmers would consider the "bare minimum". This makes them useless to the broader public, and useless to many programmers as well, as the necessary documentation to use the system doesn't come with the system.

This is relatively easily solved if your target audience is programmers: just include the fucking documentation.

A lot of programs cannot recover from common error states at all. The worst offender here is bootloaders, with GRUB being the most obvious. If there's no viable config, it could perfectly well poke around the partitions it can read until it finds a vmlinuz and initrd in the same directory that it can go and boot. These would not be the correct ones, leading to a compromised booted system, but once booted the system could at least be fixed more easily by the user. But what does it do? It just... doesn't do anything and puts the user in front of a command prompt with no real built-in documentation.

There are also a lot of user-facing programs, that, when faced with invalid configuration, fail to start. But if they have no configuration, they work fine. This is A Problem, because the user often can't find the configuration to delete. Easy solution: emit an error message and fall back to the default configuration, or make as much sense as viable from the configuration as it exists.

caveats and rant conclusion

I've not used Bazzite, or Fedora Silverblue. I keep being assured that those solve some of those problems. I've come to a truce with NixOS for... a long time now, and since it's the only distro that I don't have to fiddle with in any major way to keep running, it's what I'll be sticking with.

As for any actual conclusion... well, people keep going "hah, finally this is the year of the Linux desktop" and don't understand why the average user - who does not care about technology, widgets and gadgets, who just wants a working system - has thus far heavily shied away from using a Linux distro and instead gone with Windows... well, I hope this provided a view into just a few of the things we're missing to actually get better UX. Because Windows also bricks itself. Windows also has terrifyingly bad documentation. Windows also has flawed installs/uninstalls. But when a user knows how to solve these things on Windows already, and cannot find an adequate solution on Linux... well, you can guess the rest. We need to actually have better UX. And we need to not just be better by default, if for nobody else's sake then at least for the sake of our own sanity.