There have been cries of joy on the intertubes recently from people who like .Net but who like using it on non-Windows platforms (or believing they have the option to do so), in that Microsoft has extended their Community Promise to Mono, meaning they won’t sue over uses of it. Or so it’s been rather shallowly reported in some circles, more on this below. Firstly I’ll just say that no matter what, this is a positive step. I’ve long thought of Mono as a technically excellent project which an awful lot of uncertainty and legal confusion around it, which was only really made worse by the highly specific arrangement that Novell and Microsoft brokered a while ago.
What this announcement does is bring some clarity to the situation, which is good. However, I think people should hold off putting the bunting out just yet, because as ever the devil is in the detail, and the promise only in fact covers ECMA standards 334 and 335 – that is, C# and the CLI. As anyone who has used .Net knows, there’s an awful lot more to it than that, and this promise is currently equivalent insuring the wiring and plumbing in your house, but none of the contents. So it’s nice that these standards are now explicitly covered, meaning that projects that solely rely on C# and the CLI plus other completely independent components are safe. But if you’ve used anything else, such as any of the recreations of the rest of the .Net framework, you’re still on very uncertain territory, and in some ways you could say it’s even more uncertain, since clearly Microsoft omitted those from this promise for a reason (which may be a deliberate, strategic position, or it might be that they’re just not ready to take that more significant step yet – we don’t know).
Mono intends to cope with this by providing clear dividing lines between what’s covered and what’s not, which is very sensible. However, I do suspect that will result in the vast majority of the stuff that developers actually need to rely on when writing what are generally considered ‘.Net systems’ (such as implementations of core components of the .Net framework) will still be in no-mans land. Thus, while this promise does move things on in a positive way, in many ways it again casts light on how uncertain the legal position of the other elements is. Personally, my position is pretty much unchanged from before – if you’re writing ‘.Net applications’, that is, using the .Net frameworks, then you’re targetting Windows, don’t fool yourself into thinking otherwise. There’s certainly scope for using C# and CLI in cross-platform scenarios (which was the safest course even before this announcement, since those were the only standardised parts), but on the basis of both legality and conformance I’d say it’s best to stay away from any .Net framework components if you intend to be cross-platform.
Maybe MS will extend this promise to the older .Net framework versions later on; that would seem a smart move, get people on the ladder but keep all the new stuff to yourself?