The GNOME desktop has a problem — and we’re (partly) all to blame.
Most of us enjoy customizing our Linux desktop to suit our preferred tastes. A dash of colour here, a splash of translucency there, and so on.
Malleableness as an assumption; as distro users we expect to be able to tweak, tune or toggle anything, from integral kernel modules to superficial GTK3 themes.
It’s perhaps what lured you over to Linux.
But is seems that our craze for customisation has ramifications unseen and unheard by most, but acutely felt by others.
Now the question of should GNOME drop support for third-party GTK themes is being raised.
It’s a controversial suggestion, but one whose reasoned basis means it’s fast gaining traction with some in the open source community.
Let’s look at why.
GTK3 Themes Don’t Actually Exist
This week Ubuntu 18.10 will make its debut. Its headline feature: a brand new GTK theme called “Yaru”. It replaces ‘Ambiance‘, hitherto Ubuntu theme default and (though I may be biased) the look that’s most synonymous with “Linux desktop”.
Yaru is heavily based on Adwaita, the vanilla GNOME 3 “theme”. This was a conscious decision taken by Canonical. By making Yaru close to Adwaita in code it is less likely to break or throw up edge-case issues when in use.
But the theme itself is markedly different from its base. It makes heavy use of the Ubuntu color palette to ensure that the “Ubuntu brand” remains intact and instantly recognisable.
Free-for-all theme buffet
GNOME developer Tobias Bernard has written a well reasoned article that examines the “problem” of GTK themes.
The role of system-wide theming, whereby each app is restyled automatically according to a master theme — Arc, Ambiance, Adapta and so on — is broken, he says.
GTK3 themes are, in turns out, more of an opportune flaw rather than a standards-based feature or robust API, as Tobias notes:
“There is no clearly defined theming API. There are CSS stylesheets, but they were only ever meant to be used by the platform and app developers. The platform stylesheet is called Adwaita (“the only one” in Sanskrit) for a reason.”
Let that sink in for a moment: GTK3 themes don’t technically exist. They are, in effect, an illusion; a well meaning mirage that masks a fractured truth.
And the continued creation, use and promotion of GTK3 themes is, Tobias claims, “hurting our ecosystem” as times goes on.
Now, let’s be totally clear: Tobias’s post is about GTK3 themes only. Other DEs and toolkits have different APIs, different goals, and different approaches to theming.
And he’s not proposing any solutions, either. There is no easy way to marry the needs of two seemingly diametric needs.
Paper thin branding
Ubuntu, Arch, Manjaro, and a swathe of popular Linux distributions ship with their own custom stylesheets. Tobias calls this a “hacky approximation of themes” but concedes that, on the whole, these hacks/themes “almost” work.
The gradated veneer of consistency is, he argues, simply that: a veneer. It papers over the cracks. Qt, Java, XUL and Electron-based apps offer varying degrees of respect for the “system” theme, some none at all.
And app devs — even those not building in GTK3 or targeting specific Linux desktops — are constantly being ask to “fix bugs” that only appear when a specific third-party theme is used, or run on a specific desktop, and so on.
Linux devs certainly have a hard time predicting how their app will look on desktops because we all use different themes!
GTK3 theme devs are snared in a perpetual cycle of carrying patches to cater to edge cases each and every time an app is updated, or makes use of an unstyled upstream stylesheet changes.
Windows, macOS and mobile devs don’t (generally) have to face these issues: they make apps with a fixed, immovable, clearly defined “theme” in mind. If a user deviates from the norm on those platforms any GUI, UI or UX issues which arise are their fault, not the devs’.
“Those who don’t work on apps often can’t see the issues with theming and think we want to remove things for no reason,” Bernard writes.
“While those who do [work on apps] are very frustrated that the other side doesn’t want to acknowledge how broken everything is [with themes]”
- There is no GTK3 theme API
- There are no “best standards” to adhere to
- App devs can’t predict how their app will look
- App devs have to “fix” bugs that only appear in custom themes
- Theme devs have to patch around bugs in app updates
Linux devs certainly have a hard time predicting how their app will look on our desktops because we, as users, could be using one of many themes, Arc or Ambiance, or Adapta or Yaru or Greybird or Numix…
The next best solution is to target the theme that has the most users (previously Ambiance) but which could still throw up issues for those using Adwaita, or Arc, or some other distro default.
It’s a vicious circle.
One Theme To Rule Them All?
So it turns out that Adwaita — reviled and revered in equal measure among Linux users — is not a GTK3 theme but a platform stylesheet. Apps designed for the GNOME desktop in GTK3 should, in a perfect world, pay no heed to the rambunctious roster of third-party and distro-specific “themes”.
But should Adwaita — excessively padded Adwaita! — really become the de-facto look for distributions based on the GNOME desktop? Do branding, individuality, and differentiation not have a valuable and crucial roles to play too?
The future is uncertain.
But Tobias concedes that while a “fix” isn’t apparent, making users “aware” of the problems which stem from supporting the all-you-can-eat theme buffet is a key first to finding a palatable solution (I hesitate to use the term compromise):
“Developers are the lifeblood of any platform,” he says. “And we’ve been treating them very poorly.”
“If we want to grow our ecosystem and actually compete with other major platforms, we need to fix that.”
Like I said at the start: The GNOME desktop has a problem, and we’re (partly) all to blame.
The question of whether GNOME should drop support for third-party GTK3 themes is perhaps a misleading question because, as it turns out, there is no GTK theme support to remove – just a hacky workaround to plug.
What do you think?