I like the GNOME UI design philosophy and i use GNOME as my primary DE. In terms of UI/UX it works well for me, but from a technical perspective the shell/panel and extensions implementation seem to make the whole system really (and unnecessarily) complex and unstable.
It boils down to a few things:
1 - Stability
I have two window managers installed: Mutter (w/ GNOME Shell) and Hyprland (w/ Waybar), visually they look about the same.
In 6 months i have never been able to make Hyprland crash, not a single time. In the same period, Mutter (47 / 48) has been crashing on me multiple times daily. Crashes on Mutter are catastrophic, meaning that the whole desktop just vanishes and i’m back at the login screen, losing any open work.
This seems to be a result of the fact that everything in GNOME Shell is tied into Mutter as a runtime plugin. So any time that any extension or process does something stupid or unexpected, the whole desktop immediately comes down crashing. This is incredibly frustrating, but also feels really unnecessary.
In Hyprland/Waybar any extension or widget can misbehave and it won’t have any effect on the desktop as a whole. It’s a matter of killing the process from a terminal and restarting it.
2 - Development
I’m a webdev so i’m not completely unfamiliar with JS, CSS and shell scripts. Using Waybar it is extremely simple and fun for me to create a few widgets/extensions that make my life easier. I coded a small backlight/nightlight widget that sits in my panel and allows me to see the color temperature and adjust the display. It took me maybe 1 or 2 hours to script, reloading the widget a number of times to incorporate changes.
With GNOME Shell this process is really awful and not fun, extensions are loaded at runtime so there is no reasonable way to update them dynamically. The workaround approach described in the GJS docs to load a nested Wayland session doesn’t work well for me, because it only allows VESA resolutions for some reason, which are much too small on my High-DPI screen.
Apart from that the inherent instability of the extension system will make the whole session crash again whenever my extension code does something unexpected. Debugging is highly unintuitive and it’s almost impossible for me to find why or where things are going wrong.
It doesn’t help that coding anything in GJS is much more involving, it would probably take me a few days to code and debug the same backlight widget i coded for Waybar in a few hours, mostly because the GJS code is much less intuitive and i would need to read tons of docs first to know where to put what.
3 - Upsides?
There don’t seem to be any performance or stability upsides to the GNOME approach of integrating everything together into one big ball, so i’m struggling to find a good reason why it should work this way. It’s so impractical to develop for, it’s so inherently unstable, that it makes me not want to waste my time.
It doesn’t feel like a coincidence that the extensions.gnome.org site is riddled with un-updated and unsupported extensions. I don’t think anyone enjoys going through the tedious process of debugging and adapting extensions on every single major release. It’s boring but also the consequences are severe each time, since a not properly updated extension will just make the whole DE crash into oblivion.
One of the extensions i use “Draw on Gnome”, made GNOME 48 crash instantly on activation only because a single line of code called the deprecated cursor name POINTING_HAND
instead of POINTER
.
Is there any future thinkable for GNOME where these things will be separated from each other? Creating a stable desktop/window manager and a simple, separate panel/widget system that doesn’t tie into the base system like this? It would make everybody’s life so much better.