In Praise of GNOME 3

GNOME 3 right now (version 3.20) offers the best desktop experience available on any operating system, whether free or non-free. But more than a desktop, it’s an extremely extensible platform for building all kinds of powerful desktop experiences. But it took us a while to get here.

The early days of GNOME 3, released in April 2011, were rocky. It was a deep departure from GNOME 2, and indeed an innovative rethinking of the desktop shell and window management, requiring users to adjust their workflow. The new vision was widely panned--Linus Torvalds famously called it an unholy mess --and of course there was a general resistance to changing everyday work habits. It also faced competition from Ubuntu’s Unity, which offered an equally innovative and divergent new vision. Problematically, for a long time it was almost impossible (and unsupported) to run GNOME 3 in Ubuntu, and so many free operating system users couldn’t easily give it a chance. A general aversion to these new visions led users to stable traditional desktops, such as KDE, Xfce, and LXDE, and eventually gave birth to MATE (a continuation of GNOME 2), Cinnamon, Budgie, and many others.

For those, like me, who wanted to give GNOME 3 a chance, another problem was that the platform was moving quickly, breaking extensions and themes with every new release (more on that later). Unless you stuck to the defaults, you had to keep adapting your habits with every new release. None of these problems exist anymore.

The default vision actually makes a lot of sense, and is carefully thought out for simplicity, economy, consistency, and coherence. It does, however, importantly sacrifice information availability and usage speed in order to maintain these important principles. Let’s take a look:

The Default Vision

And, hey, that’s pretty much it. Once you get used to switching between normal view and “activities” view, you can quickly learn how to do anything you need.

As I noted, you get less information up front with GNOME: you need to switch to “activities” in order to see all the open windows and applications. There’s no “running window list” on the panel as in the traditional desktop. And it’s not as fast: again, you need to switch to “activities” in order to switch between windows and can’t just press a running window button.

The thinking behind this hiding of information is that a running window list is not useful and even distracting: the idea is that when you need to do something you go to the relevant application (in “activities”), and that for doing so it’s not immediately important whether the application is already open or not: if it’s not open, it will launch; if it’s open, it’ll switch to it. The result is always the same: you’ll see your application window.

Furthermore, the running window list had another use, which is no longer relevant: the ancient need to manually close applications in order to speed up the computer. But modern computers have enough RAM to handle pretty much any number of open applications, so there’s no need for that. If the running window list is in front of you all the time, it could encourage a neurotic and unnecessary desire to clean things up. Better focus on using your applications and getting work done rather than managing your desktop.

Unfortunately, we did throw out the baby with the bathwater here: we don’t always want to just use an application. Sometimes we intentionally have several applications open at once, possibly with multiple windows in each, and we specifically want to switch to one window and not just launch the application. Switching to “activities” is just one extra step, but it can get annoying quickly for serious multitaskers. So, the decision to sacrifice multitasking usage speed is significant.

And that’s where extensions come in, and where whatever complaints one may have about GNOME 3’s default usability disappear.


The strength is in the platform: GNOME Shell is eminently moddable. It goes further in welcoming modding: it supports a way for adding and configuring per-user extensions, and the community-contributed collection is already huge. Many extensions have to do with adding information and functionality on the main desktop view (to the default top panel, or adding panels and other widgets to other parts of the screen), while others customize the “activities” view, and yet others make more subtle customizations to its behavior.

GNOME is thus the “Firefox of desktops,” offering a decent basic experience that is highly moddable, and indeed the analogy is especially appropriate considering that GNOME Shell as well as the extensions are written in the widely-known “web technologies,” JavaScript and CSS. The intent was to make the learning curve for contribution as easy as possible.

Of course, what GNOME can do for you depends on what extensions are available as well as their quality. But the community is vibrant and there are often several different options to choose from: for example, if you want an application launcher/switcher on your main desktop view, you can use Dash to Dock, Simple Dock, MMOD Panel, Frippery Panel Favorites, as well as standalone applications like DockbarX, Cairo-Dock, Docky, and many more.

Actually, it’s even possible to do a “total conversion” to GNOME, essentially replacing the Shell with something entirely different instead of just tweaking it via extensions. This is what the Cinnamon and Budgie desktops do: they really are GNOME technology underneath, but offer a totally different user experience on top.

It’s that underlying GNOME technology that makes all of this possible. It actually comprises two entirely different UI platforms. The first is Gtk, the mature widget toolkit that drives GNOME applications, and indeed works well within application windows. The Shell, however, uses a second platform, Mutter, which unlike Gtk specializes in those “floaty” bits of the desktop outside of the applications proper, like panels and notification bubbles. Mutter is designed to be visually fast and smooth, built from ground up around hardware acceleration (OpenGL right now, Vulkan in the future). The two platforms intentionally have a different look and feel, to allow you to clearly distinguish between applications and the “meta” UI of the desktop. One cost of this divergence is that each platform must is themed separately: a theme set would thus include a Gtk theme as well as a GNOME Shell theme.

Fueling both Gtk and Mutter is GObject, an incredibly powerful multilingual object-oriented API system. What it means is that components can in fact be used by many languages: JavaScript is the chosen standard for GNOME, but you can also write code in Python, Ruby, Perl, Scheme, C++, C, and even two languages created just for GObject: Vala and Genie. There’s really no desktop platform out there that is more welcoming to contributions than GNOME! Developers can take it in the directions they want, in the ways they want.

GNOME also embraces cutting-edge operating system technologies, for example the lean Wayland display stack, systemd on Linux (for secure and reliable user-switching and networking).

As I mentioned, the early days involved frequent breakage to extensions and themes, just like in Firefox’s early days. But by now GNOME seems mature enough, such that extensions do not break or are easy enough to fix for newer versions of GNOME. Gtk theming, too, has come to standardize entirely on CSS.


Finally, a word on Unity: Ubuntu’s divergence from GNOME has been revealed as even more significant over time. Unlike GNOME, Unity is almost impossible to mod: what you see is what you get. The underlying technologies are different: Mir instead of Wayland, and Qt instead of Gtk (since Unity 8), which supports JavaScript but not other languages. Unity innovated in other ways--quicklists, the HUD menu--but there’s no stopping GNOME modders from creating extensions for supporting these open technologies (I’m working on it myself!). Both desktops are thoughtfully designed for simplicity, economy, consistency, and coherence, but GNOME is the only one that’s moddable and that you can truly make your own.

Dec 31, 1969, 18:00 CST