It's entrenchment and market muscle.
No, it isn't. The reason Linux hasn't caught on in the desktop market is that is simply not accessible to non-developers. That has always been the reason, and it utterly astounds me that after twenty years so many Linux fanboys still don't get it.
I tried setting up Linux for my Uncle once. He is fairly computer savvy, but not a programmer. Things worked well at first. He could use Firefoxfor the web, and he was already familiar with the UI. OpenOffice took a bit of getting used to, but it served his needs well enough.
Then after a few weeks, my uncle wanted to install some sort of financial software. (I don't remember the exact name.) There was no binary distribution available, so I told him about the terminal and configure/make/sudo make install. Simple enough right? No. He got an error during the build process. Spent hours trying to figure it out himself before calling me. Turned out he needed to install the libxml-dev package. Simple enough for you and me, but how the hell is someone who's never heard of C supposed to figure that out? Install libxml-dev, and then we run into another problem. He ran "make install" without "sudo" and now nothing worked. I spent about an hour trying to explain chmod and octal numbers and the difference between /bin and /usr/local/bin when I realized that it simply wasn't worth it. It was time to set him up with Windows or OS X.
How would this same process have played out on Windows or OS X? Google program, download installer, run installer, done.
Linux is a great OS for you and I. A superior OS, even. But for the vast majority of computer users out there, it is not at all accessible. You simply can't use Linux effectively unless you know how to code.