In Linux-land there are two semi-competing approaches to the technology on the desktop. By desktop I mean windowing manager, login manager, windowing toolkit, the file explorer, etc. Those two projects are Gnome and KDE. KDE was beating the crap out of Gnome for a while but they decided to rewrite their entire stack from scratch and went dark. That, coupled with the fact that Ubuntu chose Gnome has turned KDE into an also-ran.

Gnome’s primary technologist is a man named Miguel de Icaza. Miguel loves C# and the CLR. Which, for a Linux technologist, is a decidedly odd choice. So, years back Miguel decided to implement C# as an open source technology. He has succeeded in spades. Miguel now works for Novell who owns the OpenSuSE distribution and, with their backing, has turned C# into a primary component of the Gnome desktop.

Today they released version 2.0 of the open source implementation of C# - Mono. You can read the detailed release notes here if you’re interested (http://www.mono-project.com/Release_Notes_Mono_2.0). The key points are that they are now fully compatible with the C# 3.0 language, including LINQ and that they have clean room implementations of ADO.NET 2.0, ASP.NET 2.0 and the primary other 2.0 APIs.

Possibly more interestingly they now have features that Microsoft’s implementation doesn’t have:

  • 64-bit arrays. If you’re looking to deal with huge datasets in memory in C#, you’ll need the open source version.
  • DTrace. If you want to do run-time exploration of a C# app, you’ll need the open source version (and be running on Solaris or macOS).
  • Multiple VMs. If you want to run multiple VMs on the same machine, Mono’s your only option.

They also have Mono running on Windows.

What are the downsides? It’s not Microsoft’s implementation. It’s not bug-compatible. You’re not running on Windows in all cases so some things just don’t work the same. And, most importantly, their CLR performance and garbage collection aren’t as good as Microsoft’s CLR yet. Performance ranges from a few percentage points better to 50% slower. Mono has a new CLR implementation coming in 2.1 and that one will probably be roughly on par with the Microsoft CLR.

The biggest downside from the Linux perspective is patents. Microsoft has specifically stated that they have patents in the C# space. They’ve said they don’t intend on enforcing them against open source projects but that isn’t legally binding. The result is that some Linux purists refuse to have anything to do with the project, especially now that Java has been open sourced.