Which patented technologies? The spec you need to write a compliant .NET CLR (e.g., Mono) is an ECMA standard (ECMA-335). For the record, C# is under ECMA-334.
Microsoft has also open-sourced some of the newer .NET technologies, like the DLR and ASP.NET MVC (in fact, some of the code has been added to the Mono source trunk).
So, there probably will be some technologies that they have patented and won't give away for free, but I don't think (read: hopefully) they won't make the same mistake as Oracle/Sun did. Why? Because it's in Microsoft's best long-term interests to get people using .NET languages, even if they give the technology away for free -- because it gets people to buy copies of Visual Studio (for development) and Windows (to run the software). And that's really how they're going to make their money off of .NET.
As far as I know, despite vague and generous public announcements, there is no legally-binding obligation by Microsoft to not do with .Net what Oracle has done with Java in suing for patent infringement.
ECMA standards do not require any relevant patents to be provided royalty-free; in fact, they specifically allow "The patent holder is prepared to grant licenses to other parties on a non-discriminatory basis on reasonable terms and conditions." (http://www.ecma-international.org/memento/codeofconduct.htm section 2.2)
The ECMA-334 & 335 standards you mentioned includes patent statements from Microsoft: "...Microsoft Corporation will grant, on a non-discriminatory basis, to any party requesting it, licenses on commercially reasonable terms and conditions..."
I'm not a lawyer, so if there's something I'm missing please explain.
"Q: Is this Community Promise legally binding on Microsoft and will it be available in the future to me and to others?
A: Yes, the CP is legally binding upon Microsoft. The CP is a unilateral promise from Microsoft and in these circumstances unilateral promises may be enforced against the party making such a promise. Because the CP states that the promise is irrevocable, it may not be withdrawn by Microsoft. The CP is, and will be, available to everyone now and in the future for the specifications to which it applies. As stated in the CP, the only time Microsoft can withdraw its promise against a specific person or company for a specific Covered Specification is if that person or company brings (or voluntarily participates in) a patent infringement lawsuit against Microsoft regarding Microsoft’s implementation of the same Covered Specification. This type of _suspension_ clause is common industry practice. "
I think Google would have been safe had they used this, rather than Java.
I'm sure Google's lawyers considered the Java choice safe too. If the Oracle lawsuit is resolved in Google's favor they may yet turn out to have been correct.
Their argument against the CP is a tough one to swallow. Which is basically that MS needs to effectively give rights to its whole patent portfolio if you implement one of these standards (unless they are talking less broadly that MS should specifically look at the Mono implementation, and give the promise to those patents which Mono uses "today").
The problem is, what if I decide that I'm going to do C# that lives in a Virtual Machine with real time interaction using the XBox Live protocol. At that point can I say, "I'm just doing the standard, but in a different environment, I need to be covered?"
I think MS's position seems fine. You have a promise for all patents necessary to implement the standard. If you have questions, I'd just contact them directly. But unlike Java/Oracle they would have three things they'd have to deal with, (1) Did you actually infringe and (2) Is what you've done not necessary for the specification. (3) And of course they put the promise at jeopardy if they do so. Oracle never had to consider the last two. That makes it a lot easier for them to sue.
> You have a promise for all patents necessary to implement the standard
And that's the whole point. The standard is the bare minimum one needs to make an implementation comparable to the .NET stack. Unless I am terribly mistaken, Mono is nowhere near fully covered.
The community promise covers only the core of .NET. It does not extend to the rest of it, to what you actually need in order to write a functioning program.
software written, for iOS or Android using Mono definitely would not run on Windows Phone 7. Any generic libraries and business objects that do not use platform specific APIs may be sharable, but that is all.
I'd venture that for a well-written, non-trivial app, most of the code will be in the 'generic libraries and business objects' -- meaning that porting an app to Android or iOS (if you're using MonoTouch) shouldn't be a ton of work.
It properly won't be enough just to put the binary there, but I do believe you over estimate the cost to porting your software, especially if porting is taken into account before you start to write it.
Correction to headline: Microsoft won't stop Mono on Android. Which should not be surprising at all since they have always said they would not stop Mono.
They may consider asking developers license their patented technologies later on.