MonoMac 1.0 is out
tirania.org
tirania.org
* A Mac app
* An iOS app
* An Android app
* A Windows Phone app
* Desktop apps on Linux
* Desktop apps on Windows
* XBox 360 games
* A production-level website
* An in-browser applet
* An embedded system (using .NET MF)
That's pretty awesome. * A Mac app - MonoMac 1.0
* An iOS app - MonoTouch
* An Android app - MonoDroid
* A Windows Phone app - XNA/Silverlight
* Desktop apps on Linux - Mono/GTK#
* Desktop apps on Windows - regular SDKs
* XBox 360 games - XNA
* A production-level website - ASP.net
* An in-browser applet - Silverlight
* An embedded system (using .NET MF)
Did I get these right?i'm more interested in the cost for each; i think monotouch and monodroid will be $400/seat while the rest are free.
edit: don't forget about the gaming-oriented platforms using c#: http://tirania.org/blog/archive/2011/Mar-07.html
c# is a nice language, but not a lingua franca. Mono is at best controversial in the oss world, the iOs app gallery is damning the platform by faint praise and Mono on Android does not exist.
It would be great to redo the tests, now that we use LLVM as our optimizing compiler, and now that we have an option to disable array bounds checking altogether for speed junkies.
Other than the GC intervening and perhaps some extra fine tuning requires for inlining, with LLVM/SIMD/UnsafeArrays we really should not be any different than C++/LLVM.
However, everything else does work 95% the same - how you access files / databases, your business logic, all of the non-UI libraries are both consistent, and work really well.
Of course this is the case for C/C++. And basically all other native languages for systems where you have some libc-like interface. And then there is Java which should also run just everywhere (I don't know about Xbox360, though). And basically all other dynamic languages which have some native implementation would also work just everywhere. Most dynamic languages also have some sort of GUI framework, sometimes a common one for several systems, sometimes a separate one for each system. And even if not, most languages still allow somehow to just use the system GUI by using the native C interface.
And if you thing about LLVM, you can make almost every language work anywhere also, even if you really only have JavaScript, JVM, .NET or whatever available. (Actually, I haven't really looked at LLVM->JVM/.NET translators yet but I am quite sure that this is doable and probably also already done.)
Java is also a no-no on iOS devices due to its JIT model. The .NET stack gets around this by using AOT compilation, so the entire .app is native code yielded from the JIT process (as I understand it). No reason something similar couldn't be done for Java, but as far as I know, it hasn't been.
Developer experience from top to bottom is the win here, I think.
1. Code in Mono that implements things covered by EMCA/ISO standards. These have about the same legal risk as any other EMCA/ISO programming languages and libraries.
2. Code in Mono that covers Windows-specific things, like WinForms. This is your highest risk area, although even in these areas the risk is probably pretty low. That's because Microsoft patents would cover the particular way Microsoft did these things. Mono's independent cloning of the functionality is likely to have done them a different way. If you want to be maximally safe, don't use these parts of Mono. Use GTK#, for instance, for your GUI stuff. (That runs on Windows, BTW, if you want your Mono app to run on Windows).
3. Code in Mono that covers things not in the ECMA/ISO standard, but not specific to Windows. This would cover things like libraries developed after the current rev of the standard, and such. Most of these provide functionality that exists in most other language ecosystems, such as Python, Ruby, Perl, and so on. If Microsoft has patents in these areas, they are as likely to cover Python, Ruby, etc., as they are to cover Mono.
Microsoft has been known to encourage the Mono developers. That greatly weakens any case they would have against Mono.
Bottom line: it's about legally as risky as the other languages and ecosystems that would be its competitors, especially if you stay away from things like WinForms. If you would feel legally comfortable doing something in Ruby or Python or Perl, doing the same thing in Mono should be fine.
The ClozureCL guys are doing something like this - their GUI is written with AppKit/Foundation, and using Cocotron they have some version working on Widndows.