We have historically made stable releases of Mono that get branched and maintained for long periods of time. During these long periods of time, we evolve our master release for some four to five months while we do major work on the branch.
Historically, we have had done some of these large changes since we have rewritten or re-architected large parts of our JIT, or our garbage collector, or our compilers.
There were points in the project history where it took us some 9 months to release: seven months of new development followed by two months of beta testing and fixing regressions. With Mono 2.6 we tried to change this, we tried to close the release time to at most six months, and we were relatively good at doing this with 2.8 and 2.10.
We were on track to do a quick Mono 2.12 release roughly around May, but with the April bump in the road, this derailed our plans.
Since 2.10.0 was released two things happened:
- On Master: plenty of feature work and bug fixing.
- On our 2.10 branch: bug fixes and backporting fixes from master to 2.10
Now that things have settled at Xamarin and that we are getting Mono back into continuous integration builds we are going to release our first public beta of the upcoming Mono, it will be called Mono 2.11.1. We will keep it under QA until we are happy with the results and we will then release Mono 2.12 based on this.
But after Mono 2.12, we want to move to a new development model where we keep our master branch always in a very stable state. This means that new experimental features will be developed in branches and only landed to the master branch once they have been completed.
Our goal is to more quickly bring the features that we are developing to our users instead of having everyone wait for very long periods of time to get their new features.
New Features in Mono 2.11
These are some of the new features availalable in Mono 2.11:
- We refactored our C# compiler to have two backends one based on Cecil, one based on Reflection.Emit. Fixing some important usability properties of our compiler.
- Implemented C# 5 Async.
- Our C# compiler has TypedReference support (__refvalue, __reftype and __makeref).
- Our compiler as a service can compile classes now and has an instance API (instantiate multiple C# compiler contexts independently).
- Added the .NET 4.5 API profile and many of the new async APIs to use with C# 5.
- Improved our new Garbage Collector: it is faster, it is more responsive and it is more stable. It has also gained MacOS/iOS native support.
- We made System.Json available on every profile.
- We added Portable Class Library support.
- We added tooling for Code Contracts
- We added a TPL Dataflow implementation
- We added fast ThreadLocal
- We brought our ASP.NET implementation to the year 2011 and it now sports a new enormously cute error page as opposed to that error page that we have which transports you mind back to 1999.
- Mono's debugger now supports attaching to a live process (deferred support)
- Our socket stack is faster on BSD and OSX, by using kqueue (on Linux it uses epoll already).