I liked this essay, but I also wanted to rant for a bit about how the state of the Linux Desktop is just one particularly glaring example of a bigger problem, which is that instead of building something that works for most use cases, it seems to be popular to build things that work really well for one use case and not so well for others. Which in some cases is fine, but when we're talking about infrastructure like operating systems or programming environments or APIs, it's a big problem for anyone who wants to build on top of this infrastructure because then they have to pick a technology stack that limits who will use the thing they write because it was built on top of stuff that only works well in its little niche.
I write software. Suppose I want to write a program and have lots of other people use it, and want good confidence that those people will continue to be able to use it for a long time into the future. This is a pretty basic thing to want to do; how do I do it?
The first question is what kind of software is it? If it's a desktop application, then I'd need to write it for Windows and/or MacOS. If it's a server application, then Linux would be a good choice. If it's mobile, then iOS or Android.
Writing in Java might be a good choice for OS portability, but then I'd have to educate all my users on how to run java apps on their platform.
So, what we have is a lot of walled gardens and the un-walled wilderness of Linux, and these are all incompatible with each other for various reasons and I can't really say that any one of them is what I would call a good general-purpose platform for writing general-purpose programs.
It seems like something that's missing in the open source community (and something that would combat the walled-garden balkanization of user communities in both proprietary and open-source software) is an effort to create portable, carefully designed binary formats and APIs that we intend to be stable and usable for the next fifty years or so, and that "just work" for almost any common use case, whether it's a desktop app, a mobile app, a server app, an enterprise app, an embedded systems app, whatever, and then we make sure that there are tools available on every open platform to run these portable binaries.
(Java did attempt this before, but their early efforts were slowed by being a proprietary single-vendor platform; once they opened up, Java was kind of old and less exciting. It should be possible to do better by creating a new platform that isn't part of some maneuver by one tech behemoth to take market share from some other tech behemoth, and by building from a more modern foundation.)