The Holy Grail for developers, particularly Independent Software Vendors (ISVs), has been to write an application once and have it run anywhere. Such has been the promise of Java where, theoretically, an application can be created on one platform and run on another without modification. The developer also is provided with libraries of methods that take care of presentation, database communication, application serving, etc. Java environments are available for numerous platforms, ranging from z/OS to WinTel to embedded devices.
Microsoft also saw the advantages of a fully managed environment with a rich library of functions and came up with .NET. Naturally, .NET was restricted to Windows environments, which meant that ISVs developing for platforms such as Linux were unable to reuse work they may have undertaken for their Windows customers. The Mono project was started to remove that restriction.
.NET and Mono: An Introduction
Before telling the story of Mono, it’s appropriate to review the .NET technologies from Microsoft. First, .NET is an umbrella term that applies to a collection of products, specifications, and technologies from Microsoft. The technology of relevance to Mono is the .NET Framework.
The Microsoft .NET Framework is a software component that’s part of the Windows operating system that provides a library of classes designed to tackle common programming problems and a run-time environment known as the Common Language Runtime (CLR) under which these classes, and the programs written that use them, operate. Like Java, there’s a virtual machine that manages the program and data. The CLR also provides other services such as security, memory management, and exception handling.
So where does Mono fit in? According to the Mono developers: “Mono provides the necessary software to develop and run .NET client and server applications on Linux, Solaris, Mac OS X, Windows, and Unix.” More specifically, they describe Mono as being “ . . . an open development initiative sponsored by Novell to develop an open source, Unix version of the Microsoft .NET development platform. Its objective is to enable Unix develop- ers to build and deploy cross-platform .NET applications. The project implements various technologies developed by Microsoft that have now been submitted to the ECMA [European Computer Manufacturers Association] for standardization.”
Mono means “monkey” in Spanish and was developed by Ximian (another primate term) before they were acquired by Novell. Mono isn’t a product but a technology toolkit for developers with these features and characteristics:
Multi-platform: Unlike Microsoft .NET, Mono runs on many diverse platforms and architectures. Figure 1 shows the environments supported.
Standards support: The Common Language Infrastructure and the C# specifications are covered by ECMA specifications 334 and 335, which have been approved by the International Organization for Standardization (ISO).
Multi-language: Any compiler that produces “pure” Intermediate Language (IL) byte codes should work with Mono. The Mono project provides compilers for C#, Basic, and JScript. Supported languages include: