Often when looking for apps on Linux, one might search for something “cross-platform”. What does that mean? Typically it refers to running on more than one operating system, e.g. Windows, macOS, and GNU/Linux. But, what are developers really targeting when they target GNU/Linux, since there’s such diverse ecosystem of environments with their own behaviors? Is there really a “Linux Desktop” platform at all?
The Prerequisites
When developing an app for one platform, there are certain elements you can assume are there and able to be relied on. This can be low-level things like the standard library, or user-facing things like the system tray. On Windows you can expect the Windows API or Win32, and on macOS you can expect Cocoa. With GNU/Linux, the only constants are the GNU userspace and the Linux kernel. You can’t assume systemd, GLib, Qt, or any of the other common elements will be there for every system.
What about freedesktop? Even then, not every desktop follows all of the specifications within freedesktop, such as the Secrets API or the system tray. So making assumptions based on targeting freedesktop as a platform will not work out.
To be a true platform, the ability to rely on elements being stable for all users is a must. By this definition, the “Linux Desktop” itself is not a platform, as it does not meet the criteria.
Making Platforms Out of “The Linux Desktop”
It is possible to build fully realized platforms on top of GNU/Linux. The best example of this is elementary OS. Developers targeting elementary OS know that different elements like Granite will be present for all users of elementary OS. They also know elements that won’t be there, such as custom themes or a system tray. Thus, they can make decisions and integrate things with platform specifics in mind. This ability leads to polished, well-integrated apps on the AppCenter and developers need not fear a distro breaking their app.
To get a healthy app development community for GNOME, we need to be able to have the same guarantees. Unfortunately, we don’t have that. Because GNOME is not shipped by upstream, downstreams take the base of GNOME we target and remove or change core elements. This can be the system stylesheet or something even more functional, like Tracker (our file indexer). By doing this, the versions of GNOME that reach users break the functionality or UX in our apps. Nobody can target GNOME if every instance of it can be massively different from another. Just as no one can truly target the “Linux Desktop” due to the differences in each environment.
How do we solve this, then? To start, the community idea of the “Linux Desktop” as a platform needs to be moved past. Once it’s understood that each desktop is target that developers aim for, it will be easier for users to find what apps work best for their environment. That said, we need to have apps for them to find. Improving the development experience for various platforms will help developers in making well-integrated apps. Making sure they can safely make assumptions is fundamental, and I hope that we get there.
Linux desktop != GNOME as far as I am concerned.
Of course. Because “Linux desktop” does not exists as it’s own platform. GNOME is GNOME, KDE is KDE, elementary OS is elementary OS. They each are their own desktop platforms on top of Linux, but none of them are the “Linux desktop” themselves.
The biggest issue facing Linux desktop users is the lack of software support due to small market share, and you suggest fragmenting it even more? We should be striving for greater compatibility (e.x. QT apps working and being stylistically consistent in a primarily GTK environment like GNOME), if anything.
That does not work beyond a surface level because each app follows it’s own design guidelines and makes its own assumptions based on the platform it targets.
Thank you for writing this.
Another thing that needs to happen:
If an app is designed for one platform (like elementary OS), it should look as intended in another platform (GNOME for instance).
If I run Sequeler (installed via flatpak) on my Fedora workstation running GNOME, it looks beautiful. It doesn’t integrate with GNOME, that’s fine, it was never intended to. But it still looks nice.
This is a great post. The problem is well known in the GNOME community and it’s why the concept of GNOME OS had so much allure. Unfortunately, to do that we need to partner with people who know how to build and support an OS and work up and down the stack.
Gnome OS sounds right?
>With GNU/Linux, the only constants are the GNU userspace and the Linux kernel.
It’s actually fully possible to have Linux without GNU, such as in Android. I personally prefer Wayland/X11+Linux as a name for what many “Linux”-compatible apps support, because that is often one of the only assumptions these apps make from what I see.
It would be impractical to target every single distro as a platform, but targeting dependancies might work, as well as some desktop environments and distros if they are particularly integrated.
Android is not GNU/Linux 🙂
Thanks for this post. A lot of people will be mad about this idea, but in a way, this is already happening. Most commercial apps that have Linux support actually target Ubuntu. Some even support “Ubuntu _and_ Linux” 🙂 (see: https://twitter.com/PabloVazquez_/status/592694929178132481). Same goes for games on Steam, and it’s why Valve created SteamOS in the first place. The need for a consistent platform to target is real, and it’s why commercial vendors have adopted Ubuntu as a de-facto platform.
I’d love to see Gnome and KDE level up to platforms in the same style as Elementary. Nowadays with Flatpak, Runtimes and OSTree we could easily have multiple interoperable OSes where everything is far more integrated and clear.
hmmm… linux desktop should have a specs like this https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide (UWP)