In July 2001, I attended a historic session on .Net at the O'Reilly Open Source Convention in San Diego. David Stutz, who recently and spectacularly left Microsoft, spoke first. He talked about the ECMA standards for C# and the Common Language Infrastructure, of which Microsoft's .Net runtime, framework, and languages are commercial implementations. (Those ECMA standards were ratified in December 2001; ISO ratification is now imminent as well.) Then he introduced Rotor, the "shared-source" implementation of those standards -- and the project Stutz managed until his departure.
Next up was Ximian's Miguel de Icaza to talk about Mono, which is an open-source implementation of those standards that also includes elements of the .Net Framework (ADO. Net, ASP .Net, WinForms) beyond those specified in the standardized core.
Fast-forward to the present. I'm testing a beta of the new Version 3 of OpenLink Software's Virtuoso, a relational/object/XML database that integrates with the .Net Framework on Windows and with Mono on Linux. Given this setup, a developer on either platform can invoke C# methods from SQL statements and stored procedures, use the database to store and retrieve C# objects, and host ASP .Net pages directly on top of the database. I'll have more to say about Virtuoso in an upcoming review, but its use of Mono suggests possibilities -- and raises questions -- that merit separate consideration.
Mono is a work in progress. The C# compiler and runtime engine have been available for some time. As that work continues, the class libraries are being fleshed out in parallel. They're still incomplete, but if you search the Net for C# examples there's a pretty good chance that Mono can compile and run them. Although many were skeptical that open-source developers would want to implement what is, after all, a Microsoft specification, the Mono project (http://www.go-mono.com) appears healthy. The pace of releases has quickened, and de Icaza -- whose leadership of the Gnome effort made him an open-source hero -- is attracting a growing band of contributors.
Imagine a future in which open-source development embraces a .Net platform that meets four requirements: managed code, rich class libraries, a language-neutral runtime, and the blessings of ECMA and ISO. Meanwhile Java, we'll assume, continues to meet the first two requirements, to fail the third (by my definition of "language-neutral"), and to fail the fourth. In this scenario, software built with Microsoft tools for Windows deployment could also be deployed on Linux or Mac OS X. Subtract some amount from the Windows OS column on Redmond's ledger, but add some amount to the tools and applications columns. Software developed with open-source tools for Linux deployment could also run natively on Windows. Subtract from tools and applications, add to Windows.
These amounts are unknown and likely unknowable, which may help to explain why Mono's status is so uncertain. A month ago, for example, Microsoft applied for a patent on the .Net framework classes. Some observers pounced on the move as evidence of an abiding suspicion that the company intends to shut down competing implementations. Others noted that like IBM and others, Microsoft routinely acquires but rarely enforces patents. I don't think anyone knows how it will finally play out. It's an equation with too many variables, further convoluted by the recent renaming of Windows Server 2003 and de-emphasis of .Net as a platform.
A healthy software ecosystem has to create niches where commercial and open-source projects can thrive. Java does that, but is neither an open standard nor a first-class citizen of the Windows platform. The Common Language Infrastructure is, at least in theory, both. Whether theory will become practice is an important question that makes Project Mono worth watching.