Title: GNOME as a Platform Created: 2021-10-28 Author: 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