Mono 2.8 has been released
tirania.org
tirania.org
Would be nice to dish and get real insider info.
For desktop/mobile .NET applications, it's going to be more difficult to run them on Mono since they probably rely on APIs that aren't part of the core .NET standards, like Windows Forms. Mono has implementations of some of those APIs, but they aren't complete, so those apps are going to be less likely to work without modification. A lot of desktop .NET applications also call directly into Win32 for whatever reason, so that won't work on Linux. To help address this problem, the Mono guys provide a tool that can scan .NET applications for uses of APIs/techniques that don't work in Mono, and lists out the problems for you so that you can fix them.
Anyway, from my perspective, your best bet with Mono is server and mobile applications. Server, because you have two relatively solid server stacks to choose from (Microsoft .NET + ASP.net and Mono .NET + ASP.net) and you can develop in Visual Studio or MonoDevelop while running your deployed code on commodity hardware. However, it's worth pointing out that the Microsoft garbage collector is still a bit more mature than mono's so you might face challenges getting high performance out of your apps on Linux, since your ASP.net processes will be long-lived. Mobile, because Microsoft goes out of their way to make .NET development on their mobile platforms relatively accessible, and the Mono team has made great efforts to let people build native-feeling Android and iPhone apps in C#. In both cases you won't be able to write-once-run-anywhere, but you'll be able to write your core application logic once in C# and then do mobile platform specific UI development in C# as well.
Also:
you have two relatively solid server stacks to choose from (Microsoft .NET + ASP.net and Mono .NET + ASP.net)
I know what you meant though :-)
SGen should show better performance on GC-heavy workloads, a fact demonstrated by the SGen part of http://www.mono-project.com/Release_Notes_Mono_2.8. Also, the LLVM backend can be used for yet-another-JITter, though the garbage collector I think remains SGen/Boehm (not sure on this).
http://www.mono-project.com/Compatibility
The chart is based on 2.6, the stuff that was added today falls under the "Current Mono Trunk" section.
I'm not sure if the DLR (dynamic language runtime) is fully functional on Mono yet. The DLR is what's used to make IronPython and IronRuby run on the .Net stack. It's embedded into Silverlight, which allows developers to run Python and Ruby in the browser (assuming their users have the Silverlight plugin). Mono has Moonlight, but again, I'm not sure if the DLR is in there.
I personally see C# as an evolutionary next step from Java. That being said, languages like Scala, Clojure, JRuby (which I guess is technically a language implementation) let you get the benefits of Java without all the sucky language parts.
C# is a solid server-side language. I'm not terribly impressed with it for the web, although MVC makes it much better than it used to be (blah, webforms). There's an interesting project that was posted here recently called "Manos de Mono" that offers some variety in the web space [1]
It's also turned out to be a pretty decent mobile development language. You can develop iPhone and Android apps using Mono [2][3], as well as cross-platform games [4][5].
You can use Mono in client-side applications, but I'm not sure how well it works or everything that's involved with using it that way.
One of the nice things about Mono is that it lets you write C# on Unix and Unix-like platforms. For those of us that use C# during the day, it's liberating to be able to use the same language on our Macs at home, or deployed on Linux servers next to our other software.
[1] http://github.com/jacksonh/manos
That said the community is still lacking. Their are plenty of motivated passionate people but they very often feel like their are just doing it to get a book deal or speaking gigs and not because they care.
Oh well.
Anyway, the most interesting feature in .NET is that its memory consumption is about half that of Java on an average application. Sometimes more. Memory constraints are what bothers me most with the other platforms I use, particularly in a hosted environment where doubling memory often means doubling overall cost.
I'll take the JVM with all its warts and Scala or Clojure over C# no matter how nice it is.
If you're reflexively injecting off-the-shelf 'be afraid to use it' notes into a conversation where C# is mentioned, and applying a trite pop-psych analysis to Miguel de Icaza to boot, you may want to take a few steps back and ask who is really bringing faith and dogma to the table here. Is there anyone in this crowd who hasn't heard your stated opinion approximately 1,000,000 times, and who wouldn't carefully weigh such considerations before making any production commitments?
http://www.crn.com/news/applications-os/199501735/microsoft-... http://news.bbc.co.uk/2/hi/business/2023127.stm http://arstechnica.com/microsoft/news/2010/05/microsoft-file...
Would I be happier if Java were in better hands? Yes. Does that make Mono/C# a reasonable alternative? No chance. If you're tired of hearing these arguments blame Microsoft for making them intrinsic to any discussion of their platform. Technological choices sometimes have ethical implications.
Does that also apply to Mono? If so, are Microsoft's .Net and Mono equals as far as low memory consumption, or does one of them have an edge?
Could you please elaborate why do you think so? (I am just interested to hear some toughts from someone who has experience with all three languages - Java, C# and Scala. I know Java and C#, but I did not yet have time to learn Scala).
One surprise was that debugging is hard because Mono uses a different format for debugging symbols. This means we get tracebacks with no line numbers.
The second surprise is that we have to munge resulting executables with corflags.exe to force them to run in 32-bit mode on 64-bit boxes where there are library dependencies that keep them from being 64-bit clean.
We are trying to develop using MonoDevelop but there are some weird incompatibilities with the SQL Server client library. These are not insurmountable, but it has been a hassle.
The other hassle is that MonoDevelop is terribly slow. It does not appear to be able to do incremental compiles so any change to the project results in a recompile of the entire project.
Whether this matters or not will depend on the what your application is doing and how many users you have. For example, if your application is database bound or file system bound you wont likely notice much of a difference as the time you spend running CIL code or interpreted code is a small portion of your overall CPU consumption.
With Mono 2.8 we significantly improved Mono's web server scalability, but this will not matter if your application does not use or require more than a handful of CPUs. But is incredibly useful for people that are scaling servers under load.
How is your team keeping such a fast pace? Do you get a lot of assistance or documentation for Microsoft. Your rate of feature parity with the MS releases is impressive.
In addition, a big help was the fact that Microsoft open sourced large swats of code in this release (DLR, MWF, OData, LINQ, and a bunch more).
I should have made clear that other than these little annoyances, we love MonoDevelop. I certainly prefer using it within my standard Linux and OS X environments over figuring out what I need to click on in Visual Studio to get anything done.
This is the way things have been done on Windows for ages, so I don't think the concept is particularly foreign to people expert enough to need interop with native libraries.
The Mono documentation[1] indicates that Mono uses UTF-8 for all string marhsalling operations, which seems pretty unambiguously documented. It's as if GetACP() returned CP_UTF8.
[1] http://www.mono-project.com/Interop_with_Native_Libraries
Let me also get a dig in at the documentation of the function: http://www.go-mono.com/docs/index.aspx?link=M:System.Runtime...
Adding a new API say PtrFromUtf8 would mean that the code would not run on Windows because all of a sudden we are referencing a method that does not exist on .NET.
So we took the approach of turning "current code page" in Unix to what made sense on Unix: it is UTF8.
In fact, the particular issue of UTF-8 encoding is the oldest bug opened against Mono, not something that we can fix without breaking binary compatibility.
At this point, we value more staying binary compatible with the core libraries than breaking compatibility with the .NET toolchain.
We try to extend Mono in /new/ libraries like Mono.Simd or Mono.Unix where we have complete reign over the API and can still let them run on Windows with the native .NET toolchain.
Nonetheless, thank you for taking the time to address my observation.