Some of the comments in that thread illustrate a widespread misconception that C# isn't cross-platform. We're finishing up a game that runs on windows, osx, ios, and android, with a server on linux; and it's written in C#.
Microsoft's CLR and BCL implementation aren't cross-platform, but I haven't used those in quite some time.
While C# is cross-platform, almost everybody using it seems to be on Windows. Also, a bunch of the libraries people normally use with C# are Windows-specific (like WPF, I guess. Does anybody still use WPF?). Also, Microsoft has some patents which put projects like Mono in a potentially poor situation, which is why it isn't entirely embraced by the free software world.
Java, on the other hand, is, for better or worse, used heavily on all the different platforms. Moreover, most Java libraries (like Swing. Does anybody still use Swing?) are cross-platform.
I find F# a much more interesting language than C#. Do you know how F# behaves on Linux? While I've heard of people using C# on Linux and Android, I haven't heard anything about F#. Then again, the Linux people might just prefer OCaml.
I would, of course, agree that the majority of C# developers are on Windows (this seems natural). However, I think mono is in wider use than people think because of the fact that it's embedded in products like Unity. It's often not very obvious.
WPF was a definite non-starter for mono. Just too huge of an undertaking; much more focus on GTK#. Sometimes it's easier to bring something else to Windows than to bring Windows to everything else. In the case of WPF, it seems like not bothering was probably the correct move...
My understanding is that F# works just fine on linux and mac, but I haven't had the opportunity yet. Quite interested in this as well.
WPF is used extensively in enterprise. Alternatives are Windows Forms which is pretty old,and significantly less flexible, or web apps. WPF can host Windows Forms, so for legacy its a way better option then web.
I use WPF regularly. Initially it seemed quite alien compared to the windows forms world I was used to. Once I got to know how it works on the inside, I fell in love with it. In my opinion it is elegant and well thought through.
Something that seems to be a disadvantage with Java over native builds is the way it complicates the task flow for users trying to install your software. Either they have to download a large distribution that includes the JVM inside it (are distributors even allowed to redistribute Java like this?) or else they have to download and install the JVM, and then configure their new application to point to it.
In the case of iOS, the code gets AOT-compiled and any unused bytecode is stripped out. Mono is statically linked in and adds about 6mb at the minimum.
On desktop, the necessary parts of the mono runtime would just be included with the distribution package; much like any other DLL. I don't think any developer in their right mind would ask people to download the mono installer. On the plus side, this doesn't pollute their system with registry entries or system files.
It's clearly not optimal to have that overhead, but it was preferential to porting to each platform in this case.
We've used both Unity and MonoTouch for different projects. They have their problems, but much less so, I think, than different native implementations on every platform.
On the server side, we just build the latest stable mono release and we made a socket server wrapped around libev (similar to what Manos de Mono does).
(I guess I lied, we have a small amount of web stuff in Ruby, but mostly just to serve content.)
Some of the comments in that thread illustrate a widespread misconception that C# isn't cross-platform. We're finishing up a game that runs on windows, osx, ios, and android, with a server on linux; and it's written in C#.
Microsoft's CLR and BCL implementation aren't cross-platform, but I haven't used those in quite some time.