And here is the big one. Device drivers! Linux's hardware support is actually very good but it needs a stable binary device driver interface! Oh and "checking before you buy" is not so easy.
Good observation - but I'd argue that if your customer/user even NEEDS to know to check about a 'device driver' then you've completely failed to grasp why Apple wins the customer again and again.
People want/need/deserve computers and operating systems that work FOR them - not the other way around. There's a real, and big shift going on that I hope we as developers are realizing.
We're moving to mobile devices increasingly - the desktop is dying in every metric of sales. Heck, even laptops are beginning to be affected by smart phones, ipads, and netbooks. Desktops will always be needed for content creation, laptops also - but the shares of sales are radically changing. In those new mobile environments, the ones that are really winning are the ones that are providing very simple black boxes that get me on the web, email, and watching videos. The user is even willing to pay *more* for crummy DRM'ed content provided that they get Lady Gaga in a really simple interface and can easily play it. To make these things easier in general for the first-time device user, this means you *constrain* the path of purchase/use so that it is easy to work out. Sure it's not configurable and you're locked into one platform - but nobody cares so long as it looks cool, can easily be done, and works on other things in that line. The fact it won't work on another users platform doesn't become a factor until well AFTER the person has plunked down all the money. Yes, this is crummy - but it's the truth.
Internally, this means we're starting to move back to vertical stacks a la the old 70's Sun/IBM/DEC days. The users of small/mobile devices increasingly want SOLUTIONS not tons of confusing CHOICES that they need to read about/learn about. While choices and options are empirically better - the hidden quality is that people actually value their time/image and the desire NOT to have to learn all kinds of technical details or walk around with stupid looking devices that look like a teenagers tricked out rice rocket. They're willing to pay more NOT to have to know about any of the details.
What we as nerds forget is there is other currency besides features and ideology. There is time and social stigma - and these are much more important to the end user. If you're in a social situation and you want to buy/play a song or show someone a video; if you have to go "here we go! Oh, wait a second. Ummm, lemmie configure this codec, etc..." vs. "Here's this youtube video....lol" What a difference! That second example shows how you just built social currency and valued the users TIME - the first shot down the whole moment, wasted their time, added frustration, and made the person appear foolish to their friends/business associates. I think we often forget this 'soft' factor is FAR more important to the user than most other factors.
And after all - we invented computers to do work FOR us, not that we bend ourselves to their needs. That might have been true back in the day, but there's no excuse for having to think the way the computer wants things anymore. It's a big mental shift - but one we as developers better get used too.