Platforms, Compatibility, and the Future of the Free Desktop
26 October 2021

If you’ve followed Linux (and particularly GNOME) development, you’ve probably heard the recent kind, well-meaning, respectful discussions about theming, extensions, customization, and the general direction of the Linux platform. Here’s my two cents as a GNOME developer.

“Linux Is Not A Platform”

This is the general sentiment I hear from developers. But “Linux is not a platform” is a very vague statement. What is a platform? What is Linux?

The clearest example of a platform is iOS. Par for Apple, it’s tightly controlled and managed–not something we’d ever want, but helpful for extrapolating a definition. iOS as a platform consists of many things. It’s a set of libraries, system services, toolchains, and hardware. But it has less tangible components, too: APIs, best practices, Human Interface Guidelines, and even user expectations are all part of the iOS platform.

If that’s what makes up a platform, what do we have in the Linux world that compares? Is it the kernel? Certainly not, because Android and ChromeOS both use the Linux kernel, and I don’t know anyone who would call them part of “our platform,” whatever that may be. Is it systemd? Many distros don’t use it, and as much as it’s derided for bloat, it doesn’t provide nearly everything a platform needs to provide. It includes a lot of API standards, but again, not all the libraries needed to build an app.

So maybe the platform is your DE? Or a combination of these things?

There is something in the Linux world that is unmistakably a platform: elementaryOS. It has its own libraries and its own system services. It has APIs, a HIG, and a community of users who have expectations for how their apps work. Even though many of elementaryOS’s components are third-party–like the kernel, low-level software, flatpak, and GTK–they’re still packaged and officially endorsed by elementary as part of the platform.

Developers like platforms. Having a somewhat predictable environment allows us to focus our limited time on writing the meat of our apps, not debugging arcane “works on my machine” errors. Users like platforms, too: consistency is key to user-friendly UX, and we all love to deride Windows and its half-dozen design languages. For less technical users, it gives a concrete identity to their computer system that they can learn and reason about.

In light of all this, GNOME developers want to move away from being “just” a desktop environment, one interchangeable component of a super-modular system. We want GNOME to become a mature, cohesive, defined platform that developers can target and users can learn.

Humans generally hate change. We are all too often unable to lay down what’s good to find what’s best. So I’m not at all surprised that many people (including, maybe, you) are hesitant or hostile to these changes. Maybe your concerns are well-founded, which is good: that means they can be addressed!

The main concern I see, and a very valid one (but, I hope to show, misplaced), is that we’re fragmenting our already tiny market share.

The Problem of Fragmentation

If we all spend our resources on different platforms, it means less for everyone, is the reasoning. Wouldn’t it be wiser if we all collaborated on one Linux platform? We could spend all our collective effort making one project the best it could be! There are several problems with this. Most obviously, good luck getting everyone to work together! We have different goals, plans, and resources that are not always better served by working together.

But the premise is flawed in the first place: “If we all spend our resources on different platforms, it means less for everyone.” This is not necessarily true, even if the dominant proprietary platforms would have you believe it.

Meaningful compatibility is anathema to proprietary platforms. It’s a bulldozer to the garden walls that they so carefully set up around their ecosystems. Sure, there’s a few shared components and some standards for important or low-level stuff, but nothing core to the user experience. Nothing that would be easy enough to swap out for, gasp, their competitor.

I’m not surprised that people think “different platforms” == “incompatible”. It’s so well ingrained in tech culture that, it seems, even us Free Software folks sometimes think it. We had better not fall for that trap. What Microsoft, Apple, and Google consider a weakness is Free Software’s greatest strength.

The Solution of Compatibility

Collaboration is central in the history of Linux and Free Software; in fact, I’d go so far as to say it’s the fundamental strength of our way of producing software. From the very beginning, it’s been about sharing code and inviting everyone to participate in the development process.

Collaboration has a huge impact on the resulting software. Because the different Linux platforms collaborate on standards, apps written for one platform usually work just fine on another. Imagine if Microsoft pre-installed Apple’s Mac App Store on Windows, and all the apps worked right out of the box! How preposterous! But that’s exactly what we have on Linux, and it’s not going anywhere, no matter how many new platforms we invent.

In fact, cross-platform compatibility is only getting better, and if I may be so bold, I think the clear distinction between platforms is driving these improvements. For example, Flatpak, love it or hate it, is an easy way to install any app on any platform. It works because we have a notion of a “platform” and because Flatpak runs an app in its native platform runtime, rather than the system’s native platform. Because apps don’t have to juggle a dozen different platforms, they can excel at just one.

Sure, the app may no longer look “native,” but is that really a priority? It won’t act native anyway–platforms have deeply embedded design patterns and expectations, and fulfilling them all would amount to writing a separate app. I think it’s okay for GNOME apps to look like GNOME apps and for KDE apps to look like KDE apps. By letting apps use their own platform, we’re sacrificing surface-level consistency for a deeper and more meaningful compatibility.

Of course, compatibility only works when we can agree on things.

We Have Standards!

The only reason an elementaryOS app can run on GNOME unmodified is the standards. This is where the major platforms agree on how apps should be able to list themselves in the launcher; open a native file chooser; show a notification; and a very long list of other important things.

Recently, the list grew a little bit: support for a global dark mode preference was added. elementaryOS and GNOME both support or will soon support it, and the possibility is there for other desktops to do so as well. One switch will work reliably for apps across any standards-compliant platform. This is a great example of collaboration, and hopefully we’ll see much more of it in the future.

By relying on these APIs, apps don’t have to care what the underlying platform is. They only have to care that it complies with standards. This is the great simplifying power of standardization: Many apps, many platforms, one standard in between. And those “many apps” and “many platforms” bring me to my final point, and it’s about every Linux power user’s favorite word: choice.

Sources of Choice

Some choices are meaningful and some are not. Technically, I have a choice whether I want to go to school every day. The consequence if I don’t is that I probably fail and lose my scholarship, so it’s not really a choice. The same is true with technology. A macOS user could choose to switch to Windows if they thought it suited them better, but that would involve finding new software to replace the Mac-only apps they used to use and converting all their files to the new formats. It can be done, but it’s in Apple’s best interest that you never feel like it’s worth the effort.

Such “technically choices” are completely meaningless. In the Linux world, we want to offer people real choices, and that doesn’t always mean configuring and theming and tweaking every detail. Sometimes it does. Sometimes it means not doing that. It depends on the person. And we offer that choice, too: the choice of which Linux platform you use in the first place.

But unlike proprietary platforms, when we offer that choice, it’s a meaningful one. You can switch with minimal disruption. All your apps will still be there and all your file formats will still be recognized. We aren’t trying to build a wall around our garden, but offer you different paths through it.

The truth is, Linux is already split among many diverse platforms. The sooner we accept this truth, the sooner we can carry it to its full potential.

You can also support my work on Patreon.


Implementing Vector Tile Support in Libshumate

It’s incredible how things that seem simple can be so complicated. Take a “simple” maps app. There’s geometry, design, typography, a 60-gigabyte database, and a lot of complicated algorithms. Every button you press has an astonishing maze of technology supporting it.


A Markup Language for GTK

GTK has an XML-based format for declaratively constructing user interface components, but I've wanted to make a dedicated markup language for quite a while. This is my new prototype.