Shortcomings of Canonical's Unity

<2014-02-17 Mon>

In 2011, Canonical made Unity the default desktop environment for its market-leading distro Ubuntu. Unity has been in development since 2009, but remains the least sophisticated desktop environment available for Linux, and not only fails to innovate in any meaningful way, but represents a regression in the quality of software on Linux with respect to stability and configurability. As a result of Canonical's insistence on using Unity (which was developed in-house at Canonical), entire Ubuntu spinoffs have been created with a goal of allowing users to easily avoid using Unity. Distros such as Kubuntu, Lubuntu, Xubuntu differ from Ubuntu only as much as necessary to provide a different default desktop experience from that provided by stock Ubuntu. Even the more distantly-related Linux Mint has taken it upon itself to move away from Unity, creating not one, but two alternative desktop environments, MATE and Cinnamon, based on Gnome 2 and Gnome 3, respectively. This has not deterred Canonical in it's mission to push Unity as the de facto desktop interface in an effort to unify the user interface for Linux across desktops, laptops, netbooks, tablets, and phones.

Unity Apologists

I was reading a thread over on Hacker News in which Canonical was getting praise for not actively fighting the community's decision to switch from Upstart to systemd. In this discussion, past Canonical projects that bucked the community were discussed, including Unity and Mir. One comment read "[Unity] is a breath of fresh air compared to most alternatives on linux."

That has not been my experience with Unity, and I commented as such, but was immediately questioned as perhaps being part of a community of "power users" that "never really used Unity". Au contraire.

Many of Unity's shortcomings stem from Canonical's ongoing proclivity to attempt to reinvent common desktop interactions, regardless of the cost it imposes on Ubuntu's least experienced users. Power users can simply change environments, but new users are stuck with Unity's limitations until they gain the expertise to switch away from it.

Caveat: I'm Using Unity 5.x

It's worth noting that the machine I've most recently used Unity on is using the latest LTS release of Ubuntu, 12.04, which, as of this writing, is still recommended on Ubuntu's site as the latest stable release. Nevertheless, I realize that there's a good chance Unity 6 and Unity 7 have introduced improvements, and that not all features have been backported to the 12.04 distro, so some of my comments may be somewhat dated. That said, they do reflect the current state of a fully-patched 12.04 system. With that caveat out of the way, let us forge ahead.

Ongoing Instability

In writing this post, I fired up a Unity session on my Ubuntu box and used it for an hour to refresh my memory on exact details of Unity's behavior that disappointed me. In the first thirty minutes of usage, Unity crashed twice during execution of routine operations (opening the launcher to launch a program in both cases, actually). So Unity's stability leaves something to be desired, even in 2014. I just moved from Cinnamon to KDE4 a couple of weeks ago, and in that time, KDE hasn't crashed even once. In months of Cinnamon usage on three machines prior to that, I experienced only one crash. Having core elements of your user experience crash regularly is undesirable, to be generous.

Making Easy Things Difficult

One mistake Canonical continually makes is releasing beta software to its user base, and making that software the default. Unity is perhaps the canonical example of this (pardon the wordplay). The first commit to Unity was made in October 2009, and it was made the default environment in Ubuntu in the 11.04 release, after about 18 months of development. Not surprisingly, the lack of maturity in the codebase is evident.

How Do I Add a Program to the Dash?

In most desktop environments, it's a common and simple operation to create a menu item for an application installed outside of the usual package management mechanisms. In KDE, for example, simply right-clicking on the the menu icon and selecting "Edit Applications" brings up an interface to add, remove and edit applications. It's a common operation for many users.

Despite the utility of modifying entries in the Dash and Launcher, Unity makes it difficult, simply by virtue of the fact that the functionality is not included at all. Users that wish to change an icon, description or simply add an executable that is not already present have two options:

  1. Open a text editor and navigate to a hidden directory, creating a .desktop file in a very particular format to make a new program appear to Unity.
  2. Install a third-party applications like gnome-panel and alacarte to allow programs to be added to the Unity Launcher and Dash.

The fact the there is an extensive wiki page describing a series of complex contortions a user must go through to access such basic functionality is inexcusable. I don't mind steep learning curves, but a product that makes simple actions time-consuming and complex doesn't respect my time.

How Can I Resize the Launcher?

This is more of an illustrative point – Unity absolutely allows users to resize the launcher, even from within the GUI. But how? Can a user just right click on the launcher and select the "Resize" option? Or perhaps move the mouse to the edge of the Launcher and drag to resize it? In fact, neither option works – the setting is buried inside of the settings application, under "Appearance". There, in a panel that allows you to change the background for the desktop, there is a slider that allows you to choose a launcher size between 32 and 64 pixels. That was only added in 2012, actually. Before that, it was a hidden option, made available through custom configuration editing or the use of the MyUnity tool.

Using KDE 4 as a counterpoint again, simply right clicking on any panel on the screen pulls up a menu that allows the user to choose "Panel Settings". From the settings interface (which is actually attached to the panel being modified), panel position, width, alignment, included widgets and auto-hide behavior are all easily accessible. Compared to Unity, it is a triumph of design. For what it's worth, similar functionality is available in Gnome 2, KDE 3, Cinnamon, MATE, LXDE and XFCE.

In fact, Unity does so poorly at affording such obvious settings like this that a whole ecosystem of tools has grown up around Unity in a community-wide effort to add back all the basic features users expect from their desktop environments, like resizing panels, adjusting transparency, tuning auto-hide behavior and many others. It's worth noting that features like this have been in Linux desktop environments since the late 1990s, and having them missing in 2014 is simply embarrassing.

With Reordering Programs in the Launcher?

If you want to change the order that programs appear in the launcher, you might think you could simply click on the icon of the program you want to move and drag it to the desired position. Instead of moving the program as intended, users will instead find that the entire set of programs in the launcher is pulled in the direction the user drags, only to snap back to the original position when the user releases the mouse button. To actually rearrange the ordering of the icons, users must first drag the icon out of the launcher (toward the center of the desktop) and then back into the launcher in the desired position.

Making Advanced Features Impossible

OK, perhaps not impossible; just about anything is possible if you're willing to write plugins or extensions. Unity relies on this fact extensively, pushing basic functionality out of Unity and into various plugins written by the community, each varying in terms of quality, performance and maintenance. The result is a shoddy, ad hoc ecosystem of spotty software each user is responsible for cobbling together on a per-machine basis.

Hey, Mind if I Move the Launcher?

The Launcher panel is placed on the left side of the screen. That's great for widescreen users, but it might be desirable to move it for some users, either to the right side or even to the top or bottom. It turns out that moving the launcher is impossible using the stock software (one might imagine editing a configuration file somewhere). Instead, moving the location of the Launcher requires an unofficial Compiz plugin, not because of limited developer resources, but rather by design. Here's Mark Shuttleworth himself on this exact issue:

I think the report actually meant that the launcher should be movable to other edges of the screen. I'm afraid that won't work with our broader design goals, so we won't implement that.

Shuttleworth maintains this sort of an Apple-esqe attitude toward dictating how users should use their computers. But it doesn't work nearly as well in the Linux ecosystem as it does among Apple's users that have come to expect a strictly controlled experience, from the hardware all the way through the OS to the software (via app stores) and into their cloud offerings and content store. Linux poses a significantly different value proposition, and targets a different demographic.

What's My CPU Doing?

Every desktop environment on Linux supports adding some kind of system monitoring applet that sits next to the system tray and task switcher. Unity managed to not only launch without that one, but lacks most other applets common to other desktop environments as well. Common functionality that allows users to customize their environment is completely absent in Unity, with right-clicks yielding identical results to left-clicks on almost every visible UI element.

So, what does it take to get a simple CPU graph next to the system tray?

As it turns out, users must install another custom piece of software provided out-of-band from the main Unity development pipeline. Not only does a user have to install the software manually, it's not even included in the default repositories. Instead, the extension is only available from a PPA (which must be added manually).

The situation with the CPU monitor is hardly unique. It turns out that modifying practically anything about the top panel in Unity is extraordinarily difficult, requiring research, custom hacks or entire add-ons to obtain features built-in to KDE, Gnome, LXDE and XFCE. Simple actions like adding another panel at the bottom of the screen, adjusting auto-hide behavior, tuning transparency, and changing the order of the icons on the right side are not possible in the default Unity install.

In short, customizing Unity in common ways almost uniformly results in a project. The sad part is that there are a lot of pieces of software that afford the user a lot of customization and power, but it comes at the cost of the learning curve. Unity actually is less powerful than other desktop environments while simultaneously being harder to use. It's the worst of both worlds.

But Why?

The sad part is I can imagine how this all came to pass. The design meetings for Unity must have been tough. A product manager was charged with creating a unified interface suitable for both desktop and touch-based devices. By that point, Unity already lost, simply because of the design constraints imposed by such a goal. Consider:

  1. Right-click had to be removed from most elements, since touch-based devices wouldn't be able to easily access the functionality.
  2. The launcher had to remain on the left side of the screen, probably because different interaction expectations were designed for the right side. You can see this clearly in their designs for Ubuntu Phone.
  3. Since the launcher could be packed full of the "favorite" programs, it might overflow. But because it had to support touch, it couldn't be shrunk to accommodate the program icons (as seen in Apple's OS X). So instead, it had to allow the user to scroll it, removing the ability to easily rearrange programs via dragging, resulting in the contorted "drag out of the launcher and back in" UX.
  4. Common panel widgets, like CPU monitoring, were put on the back burner, if considered at all, since smaller devices don't have the space to include them, or the battery life to constantly update them. (See Dan Sandler's comment (note from 2019: this link is dead since Google shut down Google+) on Android battery life for context.)

These are just examples, but the point is that by trying to present a unified experience across all devices, Unity seriously compromises quality as well. Touch devices don't feel quite right (why is there a program launcher on the left side?), and desktops get a dumbed-down version of a desktop (no right-click, for example).

So, What's Better?

The good news is that if you're looking for something better than Unity, you don't have to look far: just about everything is better. MATE (a fork of Gnome 2) is quite serviceable and I used it happily for nine months. Cinnamon (a reskinning of Gnome 3) is equally usable and, while light on features, perfectly serviceable. XFCE is my go-to environment on my Linux gaming box.

I'd have to say the gold standard today, though, is really KDE 4. It took years, but that team has taken all the lessons learned from KDE 3 and created a superbly powerful, well-designed and sleek desktop environment. So, if you've got the Unity blues, KDE is just a

sudo apt-get install kde-full