Mono--An Option for Windows Refugees
The Mono project started as an effort to bring the C# language and the Microsoft Common Language Runtime (CLR) to the Linux platform. You can read the reasons behind the project on the Mono site. If you turn a blind eye to the ABM (anything but Microsoft) religious wars you’ll acknowledge the large body of custom applications written for the corporate environment based on the Microsoft .Net platform. Mono makes it possible, and drop-dead simple, to bring those applications into the world of Linux.
Miguel de Icaza and Nat Friedman were the primary influences behind the company Ximian and are now both Novell employees. Miguel de Icaza put out a paper back in 2001 entitled Let’s Make Unix Not Suck describing some of the problems surrounding application development for the Unix (and Linux) platform. Many of the issues mentioned have been addressed within the respective desktop communities, specifically GNOME and KDE.
According to the “History of Mono”, the very first release was in July of 2001. This version had the basic parts including the runtime or, more specifically, the virtual machine to execute the Common Intermediate Language (CIL), class libraries, and C# compiler. There was also a limited amount of documentation. While this initial effort proved the concept and that it could be done, it was a long way from anything capable of running even the simplest Windows forms-based application.
For a good explanation of de Icaza’s original goals and rationale behind Mono see this reply sent to the GNOME hackers list. It does a good job of addressing many issues from Application Programming Interfaces (APIs), to developing large applications (like Evolution) and the benefits of language independence.
The State of Mono Today
As of this writing the Mono project has issued the first release candidate for Mono 2.0 available from the preview page of their website. Mono 2.0 is an attempt to implement the full set of capabilities and libraries that make up Microsoft .Net 2.0. This includes such things as support for ADO.NET for database access, ASP.NET for Web application support, Windows.Forms for desktop application development and much more. Check out the preliminary release notes for a complete list.
The real proof of any application development tool and language for that matter is to see what people do with it. The Mono website has a respectable list of success stories detailing different usage scenarios of real world applications. Of particular notice to the open source community would be the photo manager F-Spot and the Banshee media player application. Both of these applications were built from the ground up using Mono.
MoMA is the Mono Migration Analyzer and funded by Novell to help in the application migration process from Windows to Linux. MoMA analyzes any .NET-based application to help identify issues that could cause problems during migration. Many of the incompatibilities surround Windows-platform specific calls (such as P/Invoke) sometimes used by developers to work around some missing capability. MoMA also attempts to identify any features of a program that aren’t currently supported in the latest Mono release.
Web Apps and Mono
In the world of web applications there have typically been two primary contenders in the enterprise space – namely Microsoft’s ASP (Active Server Pages) and Java in the form of J2EE. Ruby on Rails has made a significant impact of late with a large number of new Web 2.0 applications built around that platform. While you might argue the significance of the LAMP (Linux, Apache, MySQL, and Perl/PHP/Python) stack, it probably doesn’t have near the impact in most corporate development shops as either ASP or J2EE.
Mono makes it possible to run ASP.NET-based web applications on Linux. Mod-mono is an Apache plugin providing ASP.NET support for the Apache web server. The other option is to use FastCGI. This project was part of a Google Summer of Code effort to make it easier to deploy and implement ASP.NET projects using Mono.
Moonlight is an offshoot of the Mono project with a focus on replicating the basic tenets of Microsoft’s Silverlight platform on Linux. Silverlight brings the basic essentials of the Common Language Runtime to the Web in the form of plugins for the popular web browsers. The current effort is still in an early alpha stage and definitely not ready for any heavy duty usage.
Language Support
The earliest versions of Mono focused on the C# language and the CIL as the target of the compilation process. While this was the primary focus, it didn’t preclude the use of Microsoft’s compiler on a Windows machine producing an EXE originally written in Microsoft Visual Basic.NET from running against the Mono runtime. The biggest issue here was the various libraries and, more specifically, support for Windows Forms.
Mono now supports a whole host of languages through the use of compilers that produce CIL code. Visual Basic support has been available for quite some time although there is an effort underway to move to a new Visual Basic .NET framework. Much of this work has been accomplished by Mainsoft as a part of their commercial offerings that convert .NET applications to run on the J2EE platform.
MonoDevelop started out as an attempt to port the SharpDevelop project to run on top of Mono. Miguel de Icaza has another good historical post on MonoDevelop in an old blog post. The biggest hurdle in the beginning was converting the Windows Forms – based user interface into Gtk# for Linux running under the GNOME desktop environment. It has since grown into a very capable Integrated Development Environment (IDE) for building applications for the Mono platform.
Where’s Mono Going?
The Mono project roadmap currently shows a steady 3 – 4 month release schedule out through August of 2009. This does not get Mono up to the current Microsoft .NET release version 3.5 but does incorporate a number of features including such things as Language Integrated Query (LINQ), support for ASP.NET version 3.5 and ASP.NET Model View Controller (MVC).
There are some additional projects under way in parallel to look into other Linux implementations of things like the Windows Communication Foundation (WCF), Windows Presentation Foundation (WPF), Windows Workflow Foundation (WWF), and more. Some of these efforts have found their way into various Google Summer of Code projects with varying degrees of success.
The overall goal of providing a path to migrate existing Windows-based .NET applications to the Linux platform is close to reality. At the same time, support for the latest Microsoft technologies is still a long way off although it was never the intention of the Mono project to stay close behind Microsoft’s releases. Compatibility with existing Microsoft libraries has been the biggest challenge and will continue to be an issue with future releases.
Offering an open source alternative to the corporate Microsoft developer has always been high on the list of goals for the Mono project. Making it a reality is just a matter of time.


