Re: The best X in the world ever
Sorry to tell you but you're quite inaccurate in your statements.
I've run .NET apps on Windows 2000, XP and Vista (haven't got around to trying 7 yet) without any changes - they do look slightly different on different platforms - such as the annoying progress bar differences between 2000 and XP, but .NET handles all that.
I developed an application about 4 years ago that ran on .NET 1.1 on Windows 2000 PCs. When 2.0 came out and I switched to VS 2005, I upgraded the application and people then started running it on XP. Then when 3.5 came out and I switched to VS 2008, I upgraded it again.
Those two upgrades took me from 1.1 to 3.5 without *any* code changes, therefore I hardly think you can call them backwards-incompatible. Of course you cannot develop an application on 3.5 and expect it to run on 1.1, that's the same with any language - PHP 4 and 5 for instance.
It just shows how little you actually know about .NET. 3.5 actually runs the same core engine as 2.0. Microsoft purposely developed 3.5 so that the core was untouched, meaning 2.0 apps could happily be upgraded to 3.5 with no changes.
All the extra bits that qualified 3.5 for a major release cycle (LINQ, Entity Framework, lambda functions etc) are part of newer versioned assemblies that run side-by-side with the 2.0 versions. You tell your apps which version you want them to run under and Visual Studio will see to it that they will.
Don't get me wrong, I'm not a massive M$ fan, it just so happens I'm better trained with .NET than I am with FOSS stuff because more businesses prefer the "support" of M$. For instance I much prefer PHP over ASP.NET - that I will agree with you is hugely overcomplicated, but the MVC stuff in 3.5 looks like it may be a lot simpler, I haven't (and probably won't) develop any web stuff on Windows however.
Now if M$ would put as much effort into making their MFC/C++ classes much easier to use I'd gladly switch - native apps provide so much better performance but take longer to develop. If I'm running code that depends on highly-customised memory management or need to run server-side, I'll go with C++ on *nix.
As for Windows development with a focus on speed-to-market, you can't beat .NET.