In July 2001, I attended a historic session on .Net at the O'Reilly Open Source Convention in
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 (
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







