Miguel de Icaza: "To sum up: (a) First dimension: things change too quickly, breaking both open source and proprietary software alike; (b) incompatibility across Linux distributions. 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." Mac OS X came along to scoop up the Linux defectors.

Linux on the desktop is chugging along just as it always was, and like the kernel the surrounding components are pretty much always in heavy development, sometimes breaking backwards compability and requiring recompilation of affected binaries.

This is actually not true. The ABI/API of the kernel towards the userland has been pretty much stable for years. People keep on confusing *INTERNAL* kernel APIs with the ones towards the userland.

While the former are subject to frequent changes (which is why kernel developers encourage anyone to get their kernel-related stuff *INTO* the kernel), the latter are very stable.

I have never had any single binary which wouldn't run on a modern Linux kernel because there was an API mismatch.

The last change in this regard was the jump from libc5 to libc6 and that happened AGES ago.

On Windows, on the other hand, userland APIs change very often and without prior notice. Microsoft keeps on introducing and dropping stuff.

Have you ever wondered why Steam reinstalls DirectX for every game? Well, it's because DirectX is constantly changing: