APIs and OS messiness
I've always thought that the APIs served up to developers lacked coherence and the MSDN example code looked like it was produced by tired people.
To that end I've thought for a long time that Microsoft's APIs and OS code would probably hurt them badly in the long run.
They should have written an entirely new OS and run the old Win32 environment in emulation, keeping XP patched up until the new OS was mature enough for the move. It took Apple about 5 years from release to get OS X running sweetly.
It won't happen, so Microsoft faces the real prospect of becoming an irrelevance as a consequence.