GNOME as a Platform
2021-10-28
zlg

I came home today and strolled my usual Web haunts before diving into the
Underground, and stumbled across a piece by GNOME developer jwestman, titled
"Platforms, Compatibility, and the Future of the Free Desktop". [1] In it, he
advocates for GNOME (and by extension XDG) to become THE platform that "everyone
can work on together". Isn't it funny that the kind of people that suggest this
are always talking about the platforms, software, or APIs that *they* have
control over? Does this person not understand why people choose other software,
or choose to create something different? Do they not understand the risks
present when the vast majority of your userbase is on one or two platforms and a
0-day is found?

Something jwestman doesn't comprehend about the libre software world, I think,
is that its diversity is both a help and a hindrance. To get the best software
from the community, it needs to be able to grow, change, and adapt at the
individual level. Those adaptations will create the behavior of the ecosystem.
This is observable in wildlife, as well.

Congregating the majority of an ecosystem so that they all use the same platform
is not helpful to anyone except the builder of the platform and those that
depend on them. It's *commercial* behavior, not *social*. These projects can
exist just fine on their own without trying to get everyone to use them.

The overarching goal of organizations like GNOME are to have control over the
future of the software ecosystem. If you provide the platform, you control the
platform, you control the users. If you define the standards, you control the
platform.

What do I gain from XDG and GNOME as a software developer? It's yet another
piece of software or interface I don't control, forcing me to update *my*
software if I want to remain functional *ON* your platform. It's based on
bureaucratic consensus, where decisions are gatekept by the top two funded and
top two largest implementations (GNOME and KDE). If I disagree with a decision
or propose an addition to the standards, or the interfaces, what hope does my
voice have of being heard and given honest consideration? That's the problem I
have with these organizations that are companies pretending to be communities,
so they can gain resources from the community.

GNOME has not demonstrated themselves to be a good player when it comes to
collaboration. A lot of concerns have been cast aside, and their chief funding
company, Red Hat, employs these developers.

Do tell me why I would want to work with such an organization. I challenge GNOME
to show the choices they allow within their platform, especially in light of the
recent *dwindling* in options across GTK, GNOME, and GNOME core apps like the
file chooser and Nautilus. Interestingly, jwestman does a rhetorical trick where
they characterize the choices GNOME offers as "real" while other choices are
less "real". If someone switches away from GNOME, there is still a cost!

Face it, GNOME is and has been obsessed with image, UX, branding, and community
outreach the past 5-8 years. To increase broader appeal, you dumb things
down. Novice users overwhelmed by options? Remove some, or hide them in
dconf/gsettings! Marketing alone isn't going to make a good platform, and
neither is suggesting people use your platform because of some fake appeal to
collaboration that doesn't hold to scrutiny if you look at your bug tracker.

The direct result of coalescing on any standard is to give power to those who
wrote the standard. I do not trust the groups in charge of FreeDesktop or GNOME,
so I have no reason to learn how to write a GNOME app.

For the record, I'm a daily user of GNOME right now, since my laptop shipped
with it as the default environment and I chose to try my best to set it up, so I
could zero in on what I dislike about it.

It's a struggle to use this environment. It's a struggle to navigate the
bullshit XDG docs for defining a desktop file, so I could make a launcher for
PICO-8. The one GUI program I found to manipulate the menu and launchers didn't
have a clear interface as to which fields meant what, and the launchers it *did*
produce didn't work. I ended up returning to the spec, and fucking around until
something finally worked. Then I needed a systemd unit to get some semblance of
"run this bash script once on boot" so I could set a sysfs value while waiting
for an EC firmware fix. GNOME also can't switch audio output when I plug in
headphones, and there isn't a GUI to fetch programs that have tray icons, like
Nextcloud and Steam. I have to use the Task Manager clone that GNOME has and
make sure it's not in the process list. (`ps aux | grep` is loads better btw) I
often leave Steam, Nextcloud, and Mumble all in their own workspaces, to avoid
losing the windows. How on Earth is that better than a system tray!? The worst
part about this is a naive GNOME user would assume these programs are broken,
when they are not: GNOME simply doesn't implement tray icons! Load them on any
*other* DE, and I can access the tray icons with no problem.

Add to that the uselessness of the icon spec. For defining something visual, you
might want to provide a complete set of blank or example icons. Nobody wants to
navigate through the ridiculous amount of XDG-defined icon names and try to
figure out the correct one to use. Can't we use sane names, and document them
better? Half the problem are the atrocious docs. They're not written for app
developers or even independent, self-taught folks. They're written *for other
standards writers*.

Honestly it just feels like GNOME and XDG, if we were to consider them "a
platform", are designed to be difficult to integrate with, and you're stuck with
whatever Trolltech/KDE and Red Hat/GNOME decide on for their systems because
there's no evidence that any outside opinion would be given consideration.

Every step of the way of my using this "platform" is a disaster. It's like it
actively doesn't want me to use it, or enjoy myself at the computer.

My first Linux experience was on Ubuntu, back in 2005. It used GNOME 2 and had
tons of options and supported a great amount of shit. I got bored and frustrated
trying to customize it, so I moved onto Fluxbox and Openbox, then got into
tiling WMs: dwm, awesomewm, ratpoison, finally settling on i3-gaps.

So, GNOME used to be good, and I come from an angle of control and
customizability. GNOME 3 is not good, and as a libre software developer I do not
see GNOME as a stable platform to build software on. Between version 2 and
3 there was a huge upheaval, both technical and social. GTK3 to GTK4 is already
pissing off developers and some users. What do you really have to offer other
than an API that doubles as a treadmill?

- - -

The diversity of the software ecosystem is precisely why initiatives like XDG
could even form. Were this not possible, the platform we'd be using would in
fact be called GNU, or we'd be stuck on XFree86 or some other big project
nobody wanted to fork from at first. It's odd to me that those peddling new
technologies -- pipewire, wayland, GNOME3/4, systemd, they all lament that
there are choices in the environment and seek to actively replace other choices
instead of trying to just be a good choice. This competitive approach does not
convey an air of collaboration at all.

Why should people all use one platform? "So they can gain the benefits of
standardization." Yeah I get the boilerplate answer, but think about long term
risks of using someone else's platform to build *your* program. If FreeDesktop
changes something, now you have to change with them. "Bitrot happens," one might
riposte. Bitrot is an artificial phenomenon caused by other people intentionally
changing things so that other software does not work. It's not a magic force of
nature.

I think the last part of jwestman's post was the most accurate. I would take it
a step further: *computing itself* is fragmented. We use computers for different
reasons; already, we cannot reasonably expect every interface or API to be
suitable for everyone. Standardization helps for interoperability, yes, but to
make the most of that, you need a stable spec from a level-headed, experienced
group of API writers and implementers, developers who are aware of computer
users who don't use MacBook Airs or desktops with kilowatt power supplies, and
people who are good at simplifying.

The best standards are the ones easiest to understand and easiest to implement.
But another truth is, some have seen the downsides of standardization and
fully understand what you're giving up when you "just use XDG" or "just use
this framework", etc. You're inviting an entirely new set of bugs into your
code, and problems to your project. And they don't come up at first. At first,
integration's great! You *just* read the spec and tested it a bunch. It's when
change happens upstream, long after you've committed resources to this platform,
that it bites you in the ass. And by that point, you're dealing with the Sunken
Cost fallacy. Congrats, your pet project is now dependent on Daddy Platform. Do
you beg and plead with upstream to address your problem, refactor to suit Daddy
Platform's preferences (i.e. making development decisions FOR you), or
fork/restart on another toolkit? If you choose the latter, now you're stuck for
a minimum of a few months, if your tool is non-trivial.

If you build from scratch, there are only a few things that can change and upset
your project. First is any libraries you happen to use, then the standard
library of your language. Lastly, the kernel.

That may result in a less integrated app, but I'm not concerned with my software
looking like it belongs in GNOME or KDE. We are never going to have One True
Interface that everybody likes. We won't have One True Audio Stack, or One True
Networking Stack. This pursuit in finding The (only) One seems... almost
religious.

Personally, I like the vast software diversity available to me in the libre
software world. If XDG was the only game in town, it'd be really dull. Same for
Apache, or even just GNU. What we need is for platforms to try being platforms
on their own merits instead of parroting advocacy.

One of the most exciting things I experienced in libre software was realizing
"I'm not stuck with Paint or Paint Shop Pro or Photoshop!" I learned about
The GIMP, and Krita, MyPaint, mtpaint, libresprite, and so on. If we take the
ideology of "consolidate and collaborate" to its conclusion, there would only be
one image editor available for Linux, and it would have such a slew of features
it would be an unmaintainable mess. I feel the same way about platforms. Whether
it's elementaryOS, Tizen, enlightenment, GNOME, or KDE, each one has a different
flavor of GUI, with conflicting or oddly accenting views on how a GUI should
behave. As I mentioned before, humans use computers differently. That should
reflect in their interfaces, and yes, even their choice of software.

As for The Free Desktop, it's been around for a long time, and it's practically
a meme at this point. What people are shooting for with the Linux desktop now is
mainstream appeal. That is not going to result in improved software, any more
than adding more people to the Internet will improve its discourse. What we're
more likely to see is less helpful bug reports, burned out or frustrated triage
devs, lots of stupid community positions to fill, arbitrating all this labor
coordination now needed from the influx of users... it sounds a lot like the way
a business grows...

So yeah, I dunno who jwestman thinks they're fooling. A platform isn't what
GNU/Linux needs. It needs APIs that can be left alone for a year or two and not
need babysitting because upstream took Adderall and is gazing at glowsticks
while they design the next iteration. If things are designed well, they
don't need to be changed as much. Platforms need to be stable, predictable,
reproducible, portable, and perhaps MOST importantly, slow moving! Ideally, we
shouldn't be asking anyone to waste lines of code on a standard that's not ready
to be finalized in print. It's disrespectful to ask developers to rely and build
on something you can't make any stability or mutability promises on. It's like
building a Jenga tower on a table someone lent to you, but they shake the table
every so often, ruining your progress up to that point. Would you want to build
on that surface anymore? I wouldn't.

Stay independent, fellow devs.

-z

[1]: https://www.jwestman.net/2021/10/26/platforms-compatibility-the-future-of-the-free-desktop.html