Mono, the open source .NET counterpart, releases 2.0
Microsoft has said from the very beginning that it wanted .NET to potentially be a cross-platform environment, but it's letting the open source community tackle that problem instead. This morning, that community celebrates a major milestone.
After a healthy development process, the open source project for running .NET applications on non-Windows platforms is now officially at release 2.0. Mono, a project largely funded by Novell, now includes fully tested support for Microsoft's Language Integrated Query (LINQ), which embeds relational database instructions into procedural code; and developers can now create production-quality .NET applications using a fully compliant open source C# development environment and compiler.
The effort to make .NET applications run truly cross-platform is no small feat. It helps not to be frowned on in the process; and now, the involvement of Novell, now an official "friend of Microsoft," could be making things run much more smoothly.
For developers content to work strictly within Windows, .NET development is relatively simple because the bindings -- the low-level components that make the Framework run with everything else presumed to be part of Windows, such as the graphics rendering drivers and the SQL libraries -- are reinforced during the installation process. For Mono, you can't exactly bind to the same things (DirectX, SQL Server), so developers have to be cognizant of the open source counterparts they use instead.
This does mean changes have to be made to .NET applications' source code, but not to the core logic of that code -- rather, to the inclusions and bindings that make it relevant. For example, ASP.NET Web applications cannot presume the existence of one of Microsoft's SQL engines. Mono prefers PostgreSQL instead; and in order that C# 3.0 code can bind to it, Mono uses a library called Npgsql (whose 1.0 version, incidentally, was also released today).
As the Mono Project's Marek Habersack writes, moving an ASP.NET application into the MonoDevelop IDE for translation into Mono is not without some work, because the bindings to the outside world may be different. To make an application truly cross-platform -- running in .NET for Windows or Mono -- it naturally needs extra code that detects what platform it's running on, which is something you'd never think of adding for Windows-only builds of an application.
So the hope of Mono developers is to at least make the porting process reasonably simple, uncomplicated, and straightforward -- if you know what you're doing, it can be done on the first try. The MonoDevelop IDE should be easily graspable and comfortable to a developer who's already familiar with Visual C# in Visual Studio; it's not a clone, but it's not so different as to be confusing. Alternately, developers have been able to build Visual Basic 8 applications for Mono since February of 2007.
Mono also uses Microsoft-compatible bindings to ADO.NET for sequential data operations, Windows.Forms for building basic dialog boxes and control panels, and such familiar APIs as System.XML and System.Drawing. There are more non-compatible libraries, however, for obvious reasons, the biggest one being a binding to the open source GTK graphics library commonly used by GNOME. Fittingly, that binding is called GTK#, and technically it will work with Windows also, assuming the admin of the Windows client is willing to install GTK.
MonoDevelop features a full range of development tools including a linker capable of trimming the size of included libraries, a full-featured debugger, and a rule-based profiling tool called Gendarme that can detect potential binding problems, especially for cross-platform applications, that the compiler alone may not be capable of detecting. The C# compiler, tools, and runtime libraries are distributed under the GPL license, and the included class libraries are distributed under the MIT X11 license.
Linden Labs has been undertaking a project since last August to move its Second Life server applications to Mono, in what could be the most public demonstration of the cross-platform framework's capability.