I’m a Linux user, I use Xubuntu on my laptop (Ubuntu, with the Xfce desktop), I like it quite a lot, it might lack some visual appeal, but it’s easily the best workstation I’ve ever used. Not only do the tools make you super productive, but the availability of these tools in the ubuntu/debian repositories is the best feature of ubuntu (and all debian derivatives); they are full of development tools and libraries for all kinds of things you can imagine. Truly, the programmer’s heaven! I can’t understand how anyone can get anything done without access to such repositories.
Alas, while it’s the best workstation for development, it’s not necessarily the best desktop experience out there. The best desktop experience is, without doubt, the one provided by OS X.
People say many things about why they think desktop Linux sucks. For many people, it’s the lack of integration, the feeling that it’s just a bunch of different apps lumped together without any coherence. But for me, that’s not much of a problem, because my Windows setup was pretty much the same: I almost never used the standard windows tools; instead I always relied on other tools (usually open source, but not always) that do the job better and faster.
So that’s not really an issue for advanced users. Even for novice users it’s usually not an issue. If we’re talking about Ubuntu, it ships with a decent set of default programs and the user doesn’t care (and has no clue) whether or not they’re third party apps.
I use Xfce instead of Gnome. That might sound a bit weird, given that Xfce is not so mainstream. Most people would think the only advantage of Xfce is performance, but that’s not true at all. Xfce is just better than gnome; it provides a better desktop experience in my opinion.
Mac OS X is a great example of a well designed desktop on top of Unix. I might consider using it sometimes, but ultimately, there’s a reason I don’t want to slide down the slope of the Apple fanboyism: Apple’s products are aimed at consumers; if you’re a consumer, you are, by definition, not a hacker. I’m not suggesting that real hackers don’t use OS X; in fact, many do so. I may do so myself, but all I’m saying is, there are reasons out there to not use Apple products.
There’s a reason, a very good reason, for Apple’s products to be the way they are. Consider how the iPhone is jailed: you can’t even put songs or videos on it without iTunes, the music database is not a folder with mp3 files; it’s effectively a locked, proprietary database. Similarly, the only way you can install apps on your iPhone is through the app store. There’s no such thing as going to another site and downloading an app then installing it. It’s not just that iPhone doesn’t provide support for that; it purposely prevents you from doing that.
This model makes it so that the only way (and the easiest way) to install apps on the iPhone is to buy them from the app store. It works to make you get used to the idea that the only way to install applications is to pay for them. I consider this a dangerous habit, and I’m consciously trying to avoid being a part of that culture. I’m not opposed to making money from developing software; I’m opposed to enforcing artificial restrictions on your freedom to use your own device, dammit!
None the less, this model makes it almost guaranteed that you can sell apps for the iPhone without having to worry about “piracy”. Unfortunately, it also makes it so that you can’t start developing anything without Apple’s permission.
I tried OS X in a virtual machine, and while it’s stunningly beautiful and well designed, I noticed that it fosters a similar kind of experience. To get the full OS X experience, you have to “buy” all your apps, otherwise your OS won’t be really functional. Installing applications any other way could easily ruin the desktop experience, the same way that jail-breaking gives a crappy iPhone experience.
If you didn’t know Unix before hand, would you ever learn to become a hacker by using OS X? I would say: probably not. ِApple products tend to discourage tinkering. Today’s hackers might like OS X because they already know Unix and they know there’s a Unix (FreeBSD) underneath Aqua, but tomorrow’s OS X users may never know what tinkering/hacking is. They might even think that tinkering is illegal!!
So while I’m not all that excited about actually using OS X, I am interested in what we can learn from Aqua about making great desktops.
People often miss the mark when they try to copy apple’s products. They try to copy individual elements, without giving thought to what value it adds. They copy the end result without thinking about why it was done that way. What good does it do if you have a blue button widget like the one from Aqua? It’s not the specific color or shape of the button that matters.
I think there are simple principles that can lead to a great desktop experience, and if we keep them in mind, we can create a great desktop experience; they are:
Simplicity, elegance, and beauty.
Other (inferior) desktops always lack one or more of these elements. Some people might point out another important factor: “attention to details”; but this really just means dedication to beauty and elegance, so it’s implicit in the sense that hackers tend to always be dedicated anyway; this is not in itself a problem with Linux; the problem is what to dedicate yourself to.
Here’s the problem: none of the Linux desktops I tried combine these elements well enough.
Gnome is simple, but not so elegant, and definitely not beautiful.
Xfce is simple and quite elegant, but unfortunately, not so beautiful.
KDE is beautiful, but not so elegant and definitely not simple.
Well, at least KDE4; I don’t know about KDE3, people say it’s better, but I tried KDE4 for a while and I just couldn’t stand the experience. Nice flashy effects and everything, but overall it is just a big mess.
I’m sticking with Xfce, it has 2 of the 3 qualities that make a great desktop, while gnome and kde each has only one.
So in short, using Xfce as the ideal desktop, I can say that the only thing I see missing from the Linux desktop is beauty.
What do I mean by beauty? Why am I separating it from elegance? How can something be beautiful without being elegant?
What I mean by “beauty” in this context is visual appeal and wow effect. When you look at a picture of the desktop, does it make you say “wow, look at it, so shiny and beautiful!!”? That’s beauty. By this definition, there can be something that’s beautiful but not elegant.
Windows 7 is an example of beauty, in terms of visual appeal. I do think that Windows 7 (like KDE 4) lacks the element of elegance (although KDE 4 lacks it more). Elegance in this context means to me that everything is in the right place, the visual elements are neatly placed and have good proportions and spacing between them.
Here’s an example of something elegant that isn’t quite visually appealing (no “wow” effect): Google Chrome. It’s not visually appealing too much, but it’s simple and very, very elegant. Over all, most of Google products are simple and elegant, but not very appealing visually. I think this is a quality you can find in most hackers: they can spend a lot of time to make sure the product is simple and elegant, but making it visually appealing usually requires graphic designers.
And yes, things can be simple but not elegant: by having fewer UI elements, you make things simple, but by giving them the wrong size and proportions, you make it clunky. When this happens, the UI will look messy and ugly; it will feel awkward, like an incomplete hack. This is a quality you can find in most Gtk+ applications.
The beautiful apps on Linux are often clones of Mac apps: gnome-do is a clone of quick-silver, and Docky is a clone of the OS X Dock. Also, notice how these apps don’t really use any of the standard widgets provided by the toolkit. They’re both based on gtk, but they never use any of its widgets.
Let’s face it: Gtk cannot produce beautiful apps, not in its current form. Unless you completely ignore its widget set and write your own.
Chrome (on Linux) also uses Gtk, but none of its widgets.
There’s something fundamentally wrong with the way Gtk thinks about the user interface. If you think about a few Gtk apps you’ll find they all have similar traits: the proportion and placement of widgets don’t make any sense, you have big toolbars, thick status bar, everything that is click-able is created as a button, and a whole bunch of UI details that are just wrong. Everything about Gtk is designed for simplicity, but almost none of it is designed for elegance or beauty. Just compare “Nautilus” in Gnome to the “Finder” in OS X.
No amount of themeing can hide the inherent ugliness in gtk. You can mask it and present a screenshot that makes you go “hmm .. not bad”, but if you use it for two minutes, you’ll see a total lack of elegance and aesthetics.
Qt is a lot better in this regard. UIs produced with Qt tend to be much more elegant, and with a bit of themeing, the result can be stunningly beautiful. Unfortunately, this elegance gets lost in KDE4 apps, for some reason!
I think gtk can be fixed; I don’t know how, but I’m sure if some effort is put into designing it for beauty and elegance (and not just simplicity) then it can get a lot better.
Qt is already good, I use it anytime I want to create a desktop app. I don’t see any inherent flaw in Qt itself; only in the way KDE (and its themes and apps) use it.
The Xfce panel lacks one thing: sane backgrounds. This is a defect that xfce shares with gnome: the only way to give the panel a nice bevel background is with a static image, and the panel size has to be exactly the same pixel height as the image, if you make it bigger by one pixel, things become ugly (Aqua panel is probably not so different, Apple just hides it by making the panel non-resizable). This also makes it impossible to get a decent looking vertical panel.
There’s something to learn here from the kde plasma panels.
The other thing to learn from the kde panel is how to represent the task list: why use the standard button widget for them? it doesn’t make any sense! This is an instance of gtk being too simple and asking you to use button widgets for everything.
Another thing to learn from KDE are the window effects: kwin produces some really nice visual effects like wobbly windows (when moving) and magic lamp minimization. Most other effects can be discarded, in my opinion.
Yet another awesome thing from kwin is the ability to hide borders and show a resize handle on the lower left corner.
I know compiz had the wobbly windows thingy first, but compiz’s configuration dialogs are a horrible mess, plus compiz’s magic lamp effect is ugly.
My point is that these effects should be embedded into the mainstream window managers, or well, at least the xfce window manager.
My real beef is the default firefox theme in Linux; it embodies (almost) everything that’s ugly about gtk.
So, fix gtk, add some tweaks here and there, design with beauty in mind, and we’ll be able to stick our tongues out to Apple and their fanboys; I mean, we’ll have a great Linux desktop.