the only reason linux has such major compatibility issues is a lack of effort from both the software and hardware industry to provide it. most support is from ingenious reverse engineering by some talented people. personally i think linux has far better hardware support in that device support is written directly into or patched onto the kernel.
simply put (though it sounds stupid), linux won't replace windows in mainstream use purely for the fact that windows is mainstream. because of the lack of effort by software and hardware companies to provide linux support it makes linux a more difficult operating system to use in many instances, further more the lack of effort from people to try using it dooms it to be the play thing of geeks. i'm happy with this though