Mono 4.0 was officially released this month. This marks the first version that contains open source code from Microsoft’s CoreCLR project. It also defaults to C# 6, meaning that once again Mono has an RTM version of a new C# compiler before Microsoft.
In addition to the features and changes we previously reported on, Mono 4 is supposed to have “Lighter Debugger overhead” and “Basic PowerPC64 LE support”. Specific details on these features are not available at this time.
Many people have been asking why the Mono project should continue now that Microsoft is working on their own open source, cross platform CLR. Mono contributor and reddit user _alexrp_ explains,
I think people have the wrong mindset about this whole Mono/CoreCLR situation. Why should one VM becoming open source and being ported to other OSs mean that another VM can't exist? It'd be like saying that there should only be one Python implementation, or one JVM. That is not a good thing. Competition is healthy.
Mono happens to have a lot of features that CoreCLR doesn't: LLVM, full AOT, NaCl, tasklets, cross-VM GC bridge, various profiler modules, etc. Mono's startup time and runtime memory footprint are also optimized for platforms/devices that CoreCLR isn't (at least presently) even targeting. OTOH, CoreCLR has a more mature GC and generally better code generation (hence the slower startup time). The two VMs are good at different things, and there is no reason both cannot exist.
It's not like we insist on keeping our own code either. We're happy to switch to CoreCLR/reference source code when there are clear benefits to doing so (less maintenance, more correct, still portable enough). We've imported tons of reference source code already, and we're also importing certain parts of the CoreCLR VM:
https://github.com/mono/mono/blob/master/mono/metadata/decimal-ms.c
https://github.com/mono/mono/blob/master/mono/metadata/threadpool-ms.c
The 4.0 release is not without its flaws. Reddit user whatsinashagbox writes,
I'm not quite sure how to handle this now, since I have an app that has some third party dll's that seem to want the 10.0.0.0 version of Microsoft.VisualBasic.dll and will not run under mono 4. The release notes seem to imply there's a way to get it to use the .Net 4.5 assembly, but I am not clear on how to do that. Anyone got any ideas how to make this thing work with the new version of mono?
This is currently being researched and appears to be an accident.