One of the tenets of .NET was that it was to be platform-agnostic a la JVM but the story seems to be that they just didn't...get around...to implementing a Linux or Mac stack for various reasons (tight coupling to Win32 and existing COM servers, maybe?).
Now, Mono is reaching a state of extreme maturity. Why doesn't MS invest in this? It seems like their best way forward is dropping their single-vendor-stack mantra? Or perhaps they don't need to do so strategically yet -- once people really start demanding *nix and mac support they can "suddenly" change heart on mono?? This confuses me...but I'm not much of a strategist.