..although I don't know if I agree, as I'm not all that familiar with mono myself.
C# is a great language that is defined by a standard. Likewise for the .Net VM. As long as you steer clear of proprietary technologies, e.g. Windows.Forms (who'd guess!), you are safe.
Like it or not, Mono usage is going to increase, not decrease.
Mono/.NET is not strategic for Linux or for Free Software.
Plus, Microsoft can always make their .NET framework treat the standard the same way IE6 treated HTML/CSS/javscript/etc. They can introduce as much incompatibility as they want to kill alternative implementation whenever they like.
Sorry, but your argument doesn't really make sense. Flash is as proprietary as always and Sun maintains a closed-source implementation of Java, just like Microsoft/.Net. Both technologies carry the same risks as Microsoft's. Had you said Python, I'd have agreed 100%, though.
In any case, there's little in .Net that's inherently non-portable. If you don't do anything stupid, Mono will be able to run your code 9 times out of 10. The portability issues mainly stem from rubbish tutorials that advocate using non-portable p/invokes and other windows-only hacks.
With GTK and QT bindings you have all the tools you need for cross-platform development.
The other nice thing about Mono is that it innovates in ways .Net cannot even touch, e.g. Mono.Simd (which accelerates math operations), Mono.Pango (great quality text rendering on all platforms), Mono.Zeroconf and many many more. The Microsoft stigma is heavy, but Mono becomes more and more innovative as time passes.
My prediction is it will become more relevant as time passes, not less.
Microsoft also has nothing to gain from doing so, at the moment. It would only impair .NET's growth in popularity. That will change when .NET has more of a foothold. Once .NET is established, it will be in their interest to start being tricky.
The truth of the matter is that Microsoft wants .Net to tie developers to Windows, correct? If that is so, it would seem they'd prefer to keep compatibility with Mono rather than extend and extinguish their competitors.
The reason is simple: every single Mono/.Net developer is a potential Windows developer - but only so long as compatibility is kept. Were they to kill compatibility, a number of these developers would turn to Objective-C or Python or other non-Microsoft technologies - which means they'd lose both money and developers!
Microsoft knows that developers are everything. If their platform has compelling apps, the (paying) users will come.
This is important for two reasons:
1. Each and every Mono developer is a potential Linux developer.
2. If Microsoft ever decides to become tricky, Mono will be strong enough to fork away and live, keeping its cross-platform status and its developers. In that case, Microsoft only stands to lose (both in goodwill and developer base).
A last point is that Mono/.Net fill in a very important ninche: they provide a way for wildly diverse languages to interoperate. Just imagine how awesome it would be would be if Ocaml could use Python libraries or if Python could use Java libraries and so on. Well, this is possible with Mono right now, with F#, IronPython and IKVM respectively - and this is a *huge*.