News for hackers. Stuff that matters.
Re:Mono 2.8 has been released by kevingadd on Wednesday October 06, 2010 @09:17PM (#1766493)
I've used Mono to run some of my C# server applications on a linux box. I basically copied over the exe/dll files, ran it, and it worked. In a few cases I had to fix some platform-specific things (like hard-coding the directory separator), but all the core, standard APIs worked exactly like they did on windows. In most cases I was actually able to compile my applications from source using Mono's build tools without any modification, despite the fact that I authored them in Visual Studio so I didn't have a makefile (Mono provides a handy tool that reads VS project files). The biggest question mark is in terms of behavior and performance - it's possible that you could end up with a pure .NET application that happens to depend on a quirk in the Windows thread scheduler, or use a feature that happens to perform really badly on Linux due to API constraints (asynchronous IO in .NET is a good example of this; it's designed around Windows' IO Completion Port mechanism and there isn't a good analogue on Linux).

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.

Re:Mono 2.8 has been released by SeveredCross on Wednesday October 06, 2010 @11:34PM (#1766743)
Great summary post, but I want to add one thing—Mono just got a new garbage collector with the 2.8 release called SGen. SGen is a generational garbage collector with nurseries, a cardtable-based write barrier, a parallel mark and sweep collector (which is not enabled by default right now, but there are instructions on how to enable it).

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).

Re:Mono 2.8 has been released by mahmud on Wednesday October 06, 2010 @09:33PM (#1766524)
That was excellent Kevin, I thank you much.

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 :-)