Microsoft is the biggest reason. Microsoft is a jealous monopoly that doesn't want to share the desktop with anyone. Desktop Linux is just another target in a long list that has included OS/2, DR-DOS, and -- that eternal thorn in their side -- the Mac. It's no surprise, then, to see in the history of the Linux desktop that Microsoft has always tried to crush it.
Much more recently, Microsoft, caught by surprise by the rise of Linux-powered netbooks, brought XP Home back from the dead and offered it to OEMs (original equipment manufacturers) for next to nothing to stem Linux's rise on low-end netbooks.
It's hard to beat a monopoly that will do whatever it takes to make sure people don't see there's a better, cheaper alternative. I understand that. At the same time, Linux has shot itself in the foot quite often. How?
1) Lack of Linux vendor support
Every Linux distribution has a desktop version. But how many of them actively try to sell them? Not many. Red Hat is the number one Linux vendor, but makes its hundreds of millions from the server, not from the desktop. Canonical, Ubuntu's parent company, has arguably the most popular Linux desktop, but if you look closely, you'll see its hopes for making significant profits lie in server and cloud-based services.
Only Novell, with SLED (SUSE Linux Enterprise Desktop), tries to make a real business out of the desktop. For everyone else, the desktop gets a lot of lip service, but it's not really part of their core business plans.
2) Lack of Linux advertising and marketing
Companies like IBM and Oracle have made billions from Linux. Along the way, they've spent some advertising and marketing dollars on Linux. But neither they nor anyone else have spent more than pocket change on promoting the Linux desktop.
Think about it. If you use the Linux desktop, chances are you're a techie who deliberately sought it out. Even now, most people have never even heard of Ubuntu, never mind any of the rest.
3) Too much bad techie attitude
In 2009, any reasonably smart person can use any major Linux distribution without much trouble. You can run Linux without ever seeing a shell or manually tuning a conf file. But what if someone new does run into a problem with installing Adobe Flash and asks for help online?
If he or she is lucky, they'll get a considerable and informative answer from an Ubuntu forum or LinuxQuestions. But all too often, I've seen such questions answered with responses like "RTFM you noob! What are you doing running that trash distro anyway! It's GNU/Linux, not Linux!"
Yeah, that's going to encourage new users. If you don't have anything nice and informative to say to new Linux users, then don't say anything. Far too many Linux users seem to confuse acting superior and being rude with how people should act online. It's not.
4) Too much infighting
In a little over a week, Windows 7 is coming out. So, what are hardcore Linux users doing to get ready for the coming of the next major threat to the Linux desktop? A lot of them are fighting about whether Miguel de Icaza, founder of the GNOME and the Mono implementation of .NET on Linux, is "a traitor to the Free Software community."
This is just the latest chapter in the ongoing fight between free-software purists and open-source pragmatists. It's an obnoxious little war that's been flaming up over one personality or issue or another for ages now. I am so tired of this bickering and more to the point, no one outside of certain developer circles cares. What does matter that is anyone from the outside looking in sees not a group of rational people working to create great systems, but a bunch of loonies fighting over ideological issues.
While otherwise bright people continue to squabble, Microsoft keeps quietly gaining more mind-share and users every day. Good work team!
5) Not enough developer co-operation
Back in 2005, a miracle happened. Linux desktop developers from feuding camps came together in the Portland Project and found out that, when they talked to each other face to face instead of screaming at each other over IRC (Internet Relay Chat), they had more in common than they ever would have believed. The result was a lot of useful cooperation between KDE and GNOME Linux developers.
That's the good news. The bad news is, after two years of working together well, the programmers began drifting away again to work on their own little development islands. There are still efforts afoot to keep Linux desktop programming coordination going, but it's nothing as concrete as it once was.
If Linux is to attract more ISV (independent software vendors) to make desktop programs, the desktop programmers must keep working on interoperability. No ISV wants to write one version of their program for Debian, another for Fedora, and yet another for openSUSE. If the Linux desktop developers keep wandering apart from each other, we'll lose those ISVs, like Adobe, that are willing to release some programs for Linux. That, in turn, will make desktop Linux less attractive to end-users.
If Linux gets all these things right, will it stop the Windows desktop monopoly? Nope. But it will be a good start towards making desktop Linux more competitive. If nothing else, making sure that users always have a good, inexpensive alternative to Windows will always be a worthwhile goal.