---
title: "GNOME 3 extensions: the madness must end"
tags: computer
format: markdown
date: Tue, 23 Oct 2012 00:01:05 +0100

post-id: 34163672571

GNOME(http://www.gnome.org/) 3.6(http://library.gnome.org/misc/release-notes/3.6/) has been released, and as usual that means updating a raft of extensions that I use to restore sanity to my desktop (mostly, switching off all the guff I don’t use, and putting old apps’ system tray icons back up at the top of the screen where they’re actually useful, rather than hidden away in the message tray).

Most of the extensions should just work, but they don’t, because *GNOME Shell extensions are broken by design*. Let me count the ways:

1. Extensions are declared to work with a version of GNOME, not a version of the API. Typically, the version in the `metadata.json` file includes a revision number. At the very worst (since in practice the GNOME team seems to change the API with every release, of which more below) it should include a minor version number (e.g. “3.6”). There should be absolutely no need, barring bugs in GNOME Shell, to update extensions across minor releases.

2. Minor API changes, like removing an underscore from an identifier, break extensions. Seriously dudes, stop it. We never had this pain with GNOME 2: Compiz extensions, on the whole, worked from one release to the next. GNOME 3 should be GNOME 3. By all means tweak the API as it goes along, but make it backwards compatible.

3. No API documentation. The fact that the Javascript bindings are generated automatically is great, but there’s no documentation for any language, and the few handy HOWTOs don’t make up for it.

4. The built-in tools (Looking Glass) are cute, but useless for development (Looking Glass stops the desktop, so you have to keep switching between it and your editor). It shouldn’t be harder to patch a GNOME Shell extension than a GTK app written in C, it should be much easier.

On the plus side, extensions.gnome.org(http://extensions.gnome.org) works faster and is better now: for example, it allows you to install extensions that have not yet been checked on the latest version. For several extensions that was all I needed; for others I needed to change the version number manually; a couple needed trivial patches, and some others I had to switch to alternatives. This stupid dance was more than half the work in upgrading from Ubuntu 12.04 to 12.10, a fact which reflects only a little credit on Canonical, as I would class the amount of upgrade-induced work there as “acceptable” rather than “minimal”.


Last updated 2013/06/10