As long as problems are glossed over (as they so often are in the linux world) they won't be solved.
Hardware compatibility is a major issue. It is unacceptable to have to spend 2 weeks attempting to get your graphics card and network card to work at the same time only to discover that it's impossible because of a broken kernel module.
And before you say that's hypothetical, it isn't.
It happened to me a few months ago when attempting to set up Linux on my laptop.
Getting it to work not only required building a new kernel from scratch with custom options for the hardware, it also involved buying a new network card without which I could not (using a shell login only of course) download the kernel sources and network drivers I needed using the old network card.
While this may be an acceptable modus operandi for tech-savvy users, it's totally unacceptable for the average home or office user.
The same goes for applications. If you regularly need to open and write documents that generate on other platforms, you need an application that can do both.
Having to run a converter before opening the document and once again after changing it (potentially loosing data in both instances because the converter isn't capable of converting it) is simply unacceptable.
Unless and until there is an office application offering read/write (and 100% correct) of MS Office AND Corel! Office files using Linux on the desktop is not an acceptable alternative for most people who rely on those applications.
On a smaller scale (but more money involved) are things like AutoCad, Photoshop, 3DSMax, etc. etc. etc.
And don't forget games. Most PCs in homes are used for at least a decent part of the time for those. Until commercial titles are available in numbers on both Windows and Linux (and can interoperate, unlike most that are available for Windows and Mac now) so that people can play them online with friends using another OS for those people the switch will be impractical as well.