The hard disk that hosted my /home directory on my Linux
machine failed so I had to replace it with a new one. Since
this machine lives under my desk, I had to unplug all the
cables, get it out, swap the hard drives and plug everything
back again.

Pretty standard stuff. Plug AC, plug keyboard, plug
mouse but when I got to the speakers cable, I just skipped
it.

Why bother setting up the audio?

It will likely break again and will force me to go on a
hunting expedition to find out more than I ever wanted to know
about the new audio system and the drivers technology we are using.

A few days ago I spoke to Klint Finley from Wired who wrote
the article titled
OSX
Killed Linux. The original line of questioning was
about my opinion between Gnome 3's shell, vs Ubuntu's Unity vs
Xfte as competing shells.

Personally, I am quite happy with Gnome Shell, I think the
team that put it together did a great job, and I love how it
enabled the Gnome designers -which historically only design,
barely hack- to actually extend the shell, tune the UI and
prototype things without having to beg a hacker to implement
things for them. It certainly could use some fixes and
tuning, but I am sure they will address those eventually.

What went wrong with Linux on the Desktop

In my opinion, the problem with Linux on the Desktop is
rooted in the developer culture that was created around it.

Linus, despite being a low-level kernel guy, set the tone
for our community years ago when he dismissed binary
compatibility for device drivers. The kernel people might
have some valid reasons for it, and might have forced the
industry to play by their rules, but the Desktop people did
not have the power that the kernel people did. But we did
keep the attitude.

The attitude of our community was one of engineering
excellence: we do not want deprecated code in our source
trees, we do not want to keep broken designs around, we want
pure and beautiful designs and we want to eliminate all traces
of bad or poorly implemented ideas from our source code trees.

And we did.

We deprecated APIs, because there was a better way. We
removed functionality because "that approach is broken", for
degrees of broken from "it is a security hole" all the way to
"it does not conform to the new style we are using".

We replaced core subsystems in the operating system, with
poor transitions paths. We introduced compatibility layers
that were not really compatible, nor were they maintained.
When faced with "this does not work", the community response
was usually "you are doing it wrong".

As long as you had an operating system that was 100% free,
and you could patch and upgrade every component of your
operating system to keep up with the system updates, you were
fine and it was merely an inconvenience that lasted a few
months while the kinks were sorted out.

The second dimension to the problem is that no two Linux
distributions agreed on which core components the system
should use. Either they did not agree, the schedule of
the transitions were out of sync or there were competing
implementations for the same functionality.

The efforts to standardize on a kernel and a set of core
libraries were undermined by the Distro of the Day that held
the position of power. If you are the top dog, you did not
want to make any concessions that would help other
distributions catch up with you. Being incompatible became a
way of gaining market share. A strategy that continues to be
employed by the 800 pound gorillas in the Linux world.

This killed the ecosystem for third party developers trying
to target Linux on the desktop. You would try once, do your
best effort to support the "top" distro or if you were feeling
generous "the top three" distros. Only to find out that your
software no longer worked six months later.

Supporting Linux on the desktop became a burden for
independent developers.

But at this point, those of us in the Linux world still
believed that we could build everything as open source
software. The software industry as a whole had a few home
runs, and we were convinced we could implement those
ourselves: spreadsheets, word processors, design programs.
And we did a fine job at that.

Linux pioneered solid package management and the most
advance software updating systems. We did a good job,
considering our goals and our culture.

But we missed the big picture. We alienated every third
party developer in the process. The ecosystem that has sprung
to life with Apple's OSX AppStore is just impossible to
achieve with Linux today.

The Rise of OSX

When OSX was launched it was by no means a very
sophisticated Unix system. It had an old kernel, an old
userland, poor compatibility with modern Unix, primitive
development tools and a very pretty UI.

Over time Apple addressed the majority of the problems with
its Unix stack: they improved compatibility, improved their
kernel, more open source software started working and things
worked out of the box.

The most pragmatic contributors to Linux and open source
gradually changed their goals from "an world run by open
source" to "the open web". Others found that messing around
with their audio card every six months to play music and the
hardships of watching video on Linux were not worth that
much. People started moving to OSX.

Many hackers moved to OSX. It was a good looking Unix,
with working audio, PDF viewers, working video drivers, codecs
for watching movies and at the end of the day, a very pleasant
system to use. Many exchanged absolute configurability of
their system for a stable system.

As for myself, I had fallen in love with the iPhone, so
using a Mac on a day-to-day basis was a must. Having been
part of the Linux Desktop efforts, I felt a deep guilt for
liking OSX and moving a lot of my work to it.

What we did wrong

Backwards compatibility, and compatibility across Linux
distributions is not a sexy problem. It is not even remotely
an interesting problem to solve. Nobody wants to do that
work, everyone wants to innovate, and be responsible for the
next big feature in Linux.

So Linux was left with idealists that wanted to design the
best possible system without having to worry about boring
details like support and backwards compatibility.

Meanwhile, you can still run the 2001 Photoshop that came
when XP was launched on Windows 8. And you can still run your
old OSX apps on Mountain Lion.

Back in February I attended FOSDEM and two of my very dear
friends were giggling out of excitement at their plans to roll
out a new system that will force many apps to be modified to
continue running. They have a beautiful vision to solve a
problem that I never knew we had, and that no end user
probably cares about, but every Linux desktop user will pay
the price.

That day I stopped feeling guilty about my new found love
for OSX.

Update September 2nd, 2012

Clearly there is some confusion over the title of this blog
post, so I wanted to post a quick follow-up.

What I mean with the title is that Linux on the Desktop
lost the race for a consumer operating system. It will
continue to be a great engineering workstation (that is why I
am replacing the hard disk in my system at home) and yes, I am
aware that many of my friends use Linux on the desktop and
love it.

But we lost the chance of becoming a mainstream consumer
OS. What this means is that nobody is recommending a
non-technical person go get a computer with Linux on it for
their desktop needs (unless you are doing it so for idelogical
reasons).

We had our share of chances. The best one was when Vista
bombed in the marketplace. But we had our own internal
battles and struggles to deal with. Some of you have written
your own takes of our struggled in that period.

Today, the various Linux on the desktops are the best they
have ever been. Ubuntu and Unity, Fedora and GnomeShell, RHEL
and Gnome 2, Debian and Xfce plus the KDE distros. And yet,
we still have four major desktop APIs, and about half a dozen
popular and slightly incompatible versions of Linux on the
desktop: each with its own curated OS subsystems, with
different packaging systems, with different dependencies and
slightly different versions of the core libraries. Which
works great for pure open source, but not so much for
proprietary code.

Shipping and maintaining apps for these rapidly evolving
platforms
is a
big challenge.

Linux succeeded in other areas: servers and mobile devices.
But on the desktop, our major feature and our major
differentiator is price, but comes at the expense of having a
timid selection of native apps and frequent breakage. The
Linux Hater blog parodied this on a series of posts called
the Greatest
Hates.

The only way to fix Linux is to take one distro, one set of
components as a baseline, abadone everything else and everyone
should just contribute to this single Linux. Whether this is
Canonical's Ubutu, or Red Hat's Fedora or Debian's system or a
new joint effort is something that intelligent people will
disagree until the end of the days.