Every once in a while I would run into someone that will
ask me what exactly we are up to in Mono. As Mono becomes
larger, and various big projects "land" into the trunk, we can
no longer do releases on a monthly basis. Some of the work
that we do is inherently very attractive, things like new
features, new libraries, new UIs and new frameworks. But
probably more important are the efforts to turn our code
into programming
system products: fixing bugs, testing it, packaging it,
supporting it, writing documentation, test suites, improving
error handling, scaling the software, making it faster,
slimmer and backporting bug fixes.

I wanted to give my readers a little bit of an insight of
the various things that we are doing at Novell in my team.
This is just focused on the work that we do at Novell, and not
on the work of the larger Mono community which is helping us
fill in the blanks in many areas of Mono.

MonoDevelop work

We just released MonoDevelop 2.2, a major upgraded to our
IDE story, and the backbone that allows developers on Linux to
debug various kinds of Mono-based applications. With support
for the new
Soft
debugging engine, it has allowed us to support debugging ASP.NET
web sites, ASP.NET web services, Silverlight applications,
Gtk# and Console applications with minimal effort. Since the
soft debugger leverages Mono's JIT engine, porting the soft
debugger to a new architecture is very simple.

MonoDevelop 2.2 major goal was to create a truly cross
platform IDE for .NET applications. We are off to a solid
start with Linux, Windows and OSX support as well as solid
support for C#, VB, Vala and Python.

We are now turning our attention to MonoDevelop 2.4. This
new release will incorporate many new UI touch ups which I
will blog about separately.

MeeGo/Moblin Support

We have been working closely with
the MeeGo (previously Moblin)
team at Novell to offer a streamlined developer experience for
developers on Windows, Mac and Linux to target MeeGo devices.

Developers will be able to develop, test and deploy from
their favorite platform software for MeeGo devices.

Runtime Infrastructure

Mono's runtime is being upgraded in various ways: we
continue to work on
integrating LLVM
[1], productize our new
copying
garbage collector that can compact the heap, and make Mono
scale better on multi-core systems with the integration of
ParallelFX into Mono as well as re-architecting thread
management and thread pools in Mono.

A big upgrade for Mono 2.8 will be the support for
obfuscated assemblies that insert junk in dead blocks. This
is a feature that we never had, but with many Silverlight
applications being deployed with these options we started work
on this.

We are working to improve our support for F# and together
with various groups at Microsoft we are working to improve
Mono's compatibility with the CLR to run IronPython, IronRuby
and F# flawlessly in Mono. Supporting F# will require some
upgrades to the way that Mono works to effectively support
tail call optimizations.
[1] LLVM: better use LLVM to produce better code, use it in
more places where the old JIT was still required and expand
its use to be used for AOT code.

Mono for Mobile Devices

We recently shipped Mono for the iPhone and we continue to
develop and improve that platform. Our goal is to provide
developers with a great experience, so we are doing
everything in our power to make sure that every wish and whim
of the iPhone developer community is satisfied. We are
working to expand our API
coverage, write
helper libraries to assist
developers, tune existing
.NET libraries to run on Mobile devices, reduce startup
time, and reduce executable sizes.

But we have also just started an effort to ship MonoDroid:
Mono for the Android platform. This will include a
comprehensive binding to the Java APIs, but accessible through
the JIT-compiled, 335-powered runtime engine.

Our vision is to allow developers to reuse their engine and
business logic code across all mobile platforms and swapping
out the user interface code for a platform-specific API.
MonoTouch for iPhone devices and the Monodroid APIs for
Android devices.

Head-less Tasks

A big part of Mono's effort is in the development kit: the
compiler, the tools and the server side components.

Mono has
now a
complete C# 4.0 implementation that will be ready to ship
with the next version of Mono. Anyone can try it today by
building Mono from SVN. We are also porting our C# compiler
to work with Microsoft's Reflection.Emit to enable us to run
our C#
Interactive Shell in Silverlight applications and to allow
.NET developers to embed our compiler in their applications to
support C# Eval.

Our MSBuild implementation is very robust these days, and
it will be fully supported in Mono 2.8 (and we will be
backporting it to Mono 2.6 as well).

On the ASP.NET front, we are working with third party
vendors to certify that their controls work with Mono's
ASP.NET (we will have some tasty announcements soon) and we
are also catching up to the new features that are coming with
.NET 4.0.

WCF has turned out to be one of the most requested
features. We had historically only paid attention to WCF for
its Silverlight/Moonlight use cases, but as time goes by, more
and more users are moving to WCF. We are working on
completing our WCF support.

On the ADO.NET front our major focus has been to complete
the support for LINQ to SQL as part of the DbLinq project
that we are contributing to. At this point we have no plans
to implement Entity Frameworks due to the large scope of that
project.

Moonlight 3

I do not need to say much about Moonlight 3. Moonlight 3
is one of our most visible projects right now due to the
adoption of Silverlight and Smooth Streaming.

By the first week of Feburary there had been
610,000 downloads of Moonlight 2.0 for Linux. This is only
counting the downloads since the official release on December.

Policy Changes

Mono 2.6 was the last release of Mono to support the .NET
1.0 API profile. With Mono 2.8 we are going to drop the
class library support for 1.0 and ship both 3.5 and 4.0
assemblies.

With Mono 2.8 we are also switching the default tools and
compiler to be 4.0-based as opposed to be based on the 3.5
profile. We will be doing a release of Mono 2.8 a couple of
months after .NET 4.0 ships.

Ciao!

The above probably reflects the main focus of the team in
the past three months. There are many community driven
efforts that are very cool and that deserve their own space
and a future blog post. Things like the amazing work that
was done on Qyoto and the Synapse IM client come to mind.