I liked @Jonathan_Blow’s tweets constructively criticising the state of user software in Linux and thought they would make a good blog post. So here they are concatenated and well formatted. Links to the tweets can be found in the end.

Here is the situation: I like the idea of Linux. I would, in the abstract, prefer an open-source OS to Windows, iOS, etc.

I have been using Linux in one way or another since Slackware in the early 1990s (probably many of the irate Linux advocates tweeting at me we’re not even born yet, then.) I run a business that uses two Linux servers daily, that I personally administer, to get our work done.

As a server Linux is okay. As a user-facing desktop it is poor and has been getting worse over the past several years. Things just don’t work consistently, and there are a few reasons for this, but the main one seems to be that the open source community doesn’t really know how to create unified products or solid experiences. Everything is a jumble of parts, and if something doesn’t work right and I am the maintainer of part A, well, obviously the problem is the fault of parts B, C, or D, it is not my problem, don’t expect me to fix it!

If you want to build high-quality software you need the capability to cross lines of authority for parts A, B, C, D, … Z in order to mold all of them so that they come together to make the proper final shape. This just doesn’t happen in the OSS world… Which means, as Time goes on and software becomes comprised of more and more parts and layers, it becomes increasingly junky, because there is not a culture of seriously molding those parts to work together.

For people who are trying to build high-quality end-user software where frame-to-frame performance is a quality constraint, this becomes a untenable situation, because we are trying to build on something that is developer-hostile to begin with. The reason Linux works better for servers is because server software is simpler (it doesn’t have to integrate with 3D acceleration, for example) and because for some reason the core components work better (in a server Linux install my net connection doesn’t generally flake out, but for along time damned if I could get desktop NetworkManager to keep my wifi up for more an 5 seconds, and let’s not even start with audio.)

Also, Linux advocates: if you care about the OS and want it to thrive, then when people have problems, “Everything works perfectly for me so you are wrong” is not the correct reply. If you actually like Linux you should want to fix the problems, which are obvious and many. Just six months ago I tried to install Linux on two new laptops, and I had to try three distros before one would even install (that took hours), then the trackpad didn’t work, the laptop didn’t suspend consistently, and brightness control was flaky. This is before even trying to use any actual software, at which point one runs into the usual raft of flaky behavior. If you don’t see this you’re in denial, and being in denial is not the way to improve the robustness and reliability of the system! To fix problems you have to be able to see the problems.