I think a lot of developers are simply getting tired of MS cranking out half baked technologies and abandoning them after a while. If you want to write a desktop app there simply is no obvious platform of choice. You have Winforms (abandoned), WPF (slow, future unclear, do fonts render OK now?), MFC (has been out of date for 10 years), Win32 (hard to use), Silverlight (direction changes every 3 months). They all have different problems MS doesn't seem to interested addressing.
I wish MS would make a decision to bet everything on one platform (I don't care which), stick to it and make it really good.
I agree with you about their ridiculous amounts of API churn. I think it happens for (IMHO) two main reasons:
1. MS wanted to keep Windows APIs growing quickly to keep anyone from making a compatible platform. I can't imagine how many $B a year it costs to maintain that. This is probably less of a goal than it used to be, as the baseline Windows install is now so many GB that it's an impediment for the nimble VMs and ultra-portable clients that are the future.
2. MS seems to pitch to (and staff from) a young audience, folks in school and moving to the workplace as application software developers. This crowd has a natural turnover period of only a few years.
But one thing they really are quite good at is supporting stuff for a long time. You can today build an app with .Net framework 2.0 with VS 2005 and it will install and run about as well as it ever did. For native code compatibility typically goes all the way back to Win95 apps. When old apps don't work it's usually a result of unambiguous security or stability improvements made to the OS. Even then Windows often provides virtualized registry and filesystem areas that trick the apps into working.
I wish MS would make a decision to bet everything on one platform (I don't care which), stick to it and make it really good.