fix build
[mono.git] / web / rationale
index a57132d939e8286bc3bbf1c274669ffbf8aa6156..91cd3c7af7bdcb93d193377f67d88553c551b374 100644 (file)
@@ -1,44 +1,47 @@
 
-The Mono Project
+The Mono Project
 
-* Background.
+** Background.
 
        The GNOME project goal was to bring missing technologies to
        Unix and make it competitive in the current market place for
        desktop applications.  We also realized early on that language
        independence was important, and that is why GNOME APIs were
        coded using a standard that allowed the APIs to be easily
-       wrapper for other languages.  Our APIs are available on most
+       wrapped for other languages.  Our APIs are available to most
        programming languages on Unix (Perl, Python, Scheme, C++,
        Objective-C, Ada). 
 
        Later on we decided to use better methods for encapsulating
        our APIs, and we started to use CORBA to define interfaces to
-       components, and we complemented it policy and a set of
-       standard GNOME interfaces for easily creating reusable and
+       components. We complemented it with policy and a set of
+       standard GNOME interfaces for easily creating reusable,
        language independent components, controls and compound
        documents.  This technology is known as <a
-       href="http://www.ximian.com/tech/bonobo.php3">Bonobo<a>, and
-       easy to use interfaces to Bonobo exist for C, Perl, Python,
+       href="http://developer.ximian.com/articles/whitepapers/bonobo">Bonobo</a>.
+       Interfaces to Bonobo exist for C, Perl, Python, and
        Java.
 
        CORBA is good when you define coarse interfaces, and most
        Bonobo interfaces are coarse.  The only problem is that
        Bonobo/CORBA interfaces are not good for small interfaces.
-       For example implementing an XML parser component and use it to
-       parse, create and walk an XML document would be inneficient
-       compared to a C API.
+       For example, an XML parsing Bonobo/CORBA component would be
+       inefficient compared to a C API.
 
-* Microsoft's .NET
+** Another explanation
+
+       I recently explained our motivations to Dave Winer, and he posted
+       it <a
+       href="http://scriptingnews.userland.com/stories/storyReader$1275">here</a>
+
+** Microsoft's .NET
 
        The Microsoft .NET initiative is confusing because it is a
        company wide effort that ranges from development tools to end
-       user applications.  
-
-       Depending who you ask, you will probably get a different
-       answer on what .NET is, .NET is a branding name that has been
-       applied to:
+       user applications.  .NET is a branding formative that
+       has been applied to:
 
+       <ul>
                * The .NET development platform, a new platform for
                  writing software.
 
@@ -51,21 +54,23 @@ The Mono Project
                * Hailstorm, the Passport centralized single-signon
                  system that is being integrated into Windows XP.
 
-       From all the above, the one I am interested in is the new .NET
-       development platform. 
+       </ul>
+
+       Mono is an implementation of the .NET development platform.
 
-* The .NET development platform.
+** The Common Language Infrastructure platform. 
 
-       Microsoft has created a new development platform, the
+       Microsoft has created a new development platform.  The
        highlights of this new development platform are:
 
+       <ul>
                * A runtime environment that provides garbage
                  collection, threading and a virtual machine
                  specification (The Virtual Execution System, VES)
 
                * A comprehensive class library.  
 
-               * A new language, C#.  Very similar to Java, that
+               * A new language, C#.  Very similar to Java,  C#
                  allows programmers to use all the features available
                  on the .NET runtime.
 
@@ -73,41 +78,48 @@ The Mono Project
                  follow if they want to generate classes and code
                  that can interoperate with other programming
                  languages (The Common Language Specification: CLS)
-
-       The .NET development platform is similar to the goals we had
-       in GNOME of giving language independence to programmers.  Any
-       API that is written using a CLS provider language can be used
-       by any language that is a CLS consumer.   Compilers generate
-       code in a format called Common Intermediate Language (CIL)
-       which is an intermediate representation of a compiled program
-       and is easy to compile to native code or compiled using
-       Just-in-Time (JIT) engines.  The restrictions placed by the
-       runtime on the CIL byte codes ensures that it is possible to
-       do a good job at optimizing the code in a JIT compiler. 
-
-       There is not really a lot of innovation in this platform, we
+       </ul>
+
+       The Common Language Infrastructure platform is similar to the
+       goals we had in GNOME of giving language independence to
+       programmers.  It is more mature, documented, larger in scope,
+       and has a consistent design.
+
+       Any API that is written using a CLS provider language can be
+       used by any language that is a CLS consumer.  Compilers
+       generate code in a format called Common Intermediate Language
+       (CIL) which is an intermediate representation of a compiled
+       program and is easy to compile to native code or compiled
+       using Just-in-Time (JIT) engines.  The restrictions placed by
+       the runtime on the CIL byte codes ensures that it is possible
+       to do a good job at optimizing the code in a JIT compiler.
+
+       There is not really a lot of innovation in this platform: we
        have seen all of these concepts before, and we are all
        familiar with how these things work.
 
-       What makes the .NET development platform interesting is that
-       it is a good mix of technologies that have been nicely
-       integrated.   
+       What makes the Common Language Infrastructure development
+       platform interesting is that it is a good mix of technologies
+       that have been nicely integrated.
 
        The .NET development platform is essentially a new foundation
        for program development that gives Microsoft a room to grow
-       for the next years. 
+       for the coming years. 
 
-* ECMA standards.
+** ECMA standards.
 
-       Microsoft together with HP and Intel have submitted the
+       Microsoft has submitted the
        specifications of C#, the runtime, the metadata and the
        other various bits of the .NET development platform to the
-       ECMA for standarization.  
+       <a href="http://www.ecma.ch">ECMA</a> for standarization.
+
+       You can get a copy of the specifications submitted to ECMA
+       from: <a href="http://www.dotnetexperts.com/ecma">http://www.dotnetexperts.com/ecma</a>
 
-* Mono: The GNU .NET implementation. 
+** Mono: an Open Source Common Language Infrastructure implementation. 
 
        Ximian has begun work on Mono, a project that aims to bring
-       the .NET development platform to free systems.  
+       the Common Language Infrastructure platform to free systems.  
 
        When the GNU project was launched, they picked the best
        operating system that was available out there, and they
@@ -120,28 +132,56 @@ The Mono Project
        .NET development platform because it is a great platform to
        build on.
 
-* What makes up Mono?
+** What makes up Mono?
 
-       There are various pieces that will make up Mono:
+       There are various pieces that make up Mono today:
 
+       <ul>
                * A C# compiler.
 
-               * A .NET executable tools.
-
-               * The Virtual Execution System: that will have the
+               * The Virtual Execution System: that has the
                  Just-in-Time compiler, garbage collector, loader,
                  threading engine.
 
-                 A byte code interpreter will be provided for quickly
-                 porting Mono to new systems. 
+                 A byte code interpreter is provided for quickly
+                 porting Mono to new systems and debugging the JIT
+                 purposes, but it is not intended to be the ideal
+                 execution environment.
+
+               * An implemenation of the .NET class libraries:
+                 Remoting, Reflection, Reflection.Emit, Xml, Xpath,
+                 Xslt, Xml Serialization, Web Services support. 
+
+               * Cross platform class libraries for data access:
+                 Postgress, MySQL, DB2, TDS, Sybase, Oracle, ODBC and
+                 Gnome's GDA.
+
+               * Unix class libraries: Mono.Posix
+
+               * Gnome-specific class libraries: The Gtk# family. 
+
+               * A code pre-compiler to generate native code ahead of
+                 time.
+
+               * Gtk# a toolkit to develop GNOME applications on Unix
+                 and Windows.
+
+               * An implementation of the Remoting infrastructure in
+                .NET
+       </ul>
+
+       Other work-in-progress components:
 
-               * An implemenation of the .NET class library.
+       <ul>
+               * A VB.NET compiler and JScript compilers are in the works.
 
-               * Visual development tools. 
+               * Web services on the server side.
 
-               * A CIL GCC frontend.
+               * We are planning to include Remoting.CORBA as part of
+                 Mono standard distribution.
+       </ul>
 
-* Why use GNOME components?
+** Why use GNOME components?
 
        GNOME is an umbrella project that consists of infrastructural
        components (GUI toolkit, XML libraries, CORBA implementation,
@@ -149,7 +189,7 @@ The Mono Project
        and productivity applications.
 
        The GNOME infrastructural components can be used to quickly
-       implement various pieces of the .NET API without reinventing
+       implement various pieces of the class libraries without reinventing
        the wheel, and since all those components are licensed under
        the terms of the GNU LGPL it is a perfect fit.