2009-05-18 Miguel de Icaza <miguel@novell.com>
[mono/afaerber.git] / web / rationale
blob91cd3c7af7bdcb93d193377f67d88553c551b374
2 * The Mono Project
4 ** Background.
6         The GNOME project goal was to bring missing technologies to
7         Unix and make it competitive in the current market place for
8         desktop applications.  We also realized early on that language
9         independence was important, and that is why GNOME APIs were
10         coded using a standard that allowed the APIs to be easily
11         wrapped for other languages.  Our APIs are available to most
12         programming languages on Unix (Perl, Python, Scheme, C++,
13         Objective-C, Ada). 
15         Later on we decided to use better methods for encapsulating
16         our APIs, and we started to use CORBA to define interfaces to
17         components. We complemented it with policy and a set of
18         standard GNOME interfaces for easily creating reusable,
19         language independent components, controls and compound
20         documents.  This technology is known as <a
21         href="http://developer.ximian.com/articles/whitepapers/bonobo">Bonobo</a>.
22         Interfaces to Bonobo exist for C, Perl, Python, and
23         Java.
25         CORBA is good when you define coarse interfaces, and most
26         Bonobo interfaces are coarse.  The only problem is that
27         Bonobo/CORBA interfaces are not good for small interfaces.
28         For example, an XML parsing Bonobo/CORBA component would be
29         inefficient compared to a C API.
31 ** Another explanation
33         I recently explained our motivations to Dave Winer, and he posted
34         it <a
35         href="http://scriptingnews.userland.com/stories/storyReader$1275">here</a>
37 ** Microsoft's .NET
39         The Microsoft .NET initiative is confusing because it is a
40         company wide effort that ranges from development tools to end
41         user applications.  .NET is a branding formative that
42         has been applied to:
44         <ul>
45                 * The .NET development platform, a new platform for
46                   writing software.
48                 * Web services.
50                 * Microsoft Server Applications.
52                 * New tools that use the new development platform.
54                 * Hailstorm, the Passport centralized single-signon
55                   system that is being integrated into Windows XP.
57         </ul>
59         Mono is an implementation of the .NET development platform.
61 ** The Common Language Infrastructure platform. 
63         Microsoft has created a new development platform.  The
64         highlights of this new development platform are:
66         <ul>
67                 * A runtime environment that provides garbage
68                   collection, threading and a virtual machine
69                   specification (The Virtual Execution System, VES)
71                 * A comprehensive class library.  
73                 * A new language, C#.  Very similar to Java,  C#
74                   allows programmers to use all the features available
75                   on the .NET runtime.
77                 * A language specification that compilers can
78                   follow if they want to generate classes and code
79                   that can interoperate with other programming
80                   languages (The Common Language Specification: CLS)
81         </ul>
83         The Common Language Infrastructure platform is similar to the
84         goals we had in GNOME of giving language independence to
85         programmers.  It is more mature, documented, larger in scope,
86         and has a consistent design.
88         Any API that is written using a CLS provider language can be
89         used by any language that is a CLS consumer.  Compilers
90         generate code in a format called Common Intermediate Language
91         (CIL) which is an intermediate representation of a compiled
92         program and is easy to compile to native code or compiled
93         using Just-in-Time (JIT) engines.  The restrictions placed by
94         the runtime on the CIL byte codes ensures that it is possible
95         to do a good job at optimizing the code in a JIT compiler.
97         There is not really a lot of innovation in this platform: we
98         have seen all of these concepts before, and we are all
99         familiar with how these things work.
101         What makes the Common Language Infrastructure development
102         platform interesting is that it is a good mix of technologies
103         that have been nicely integrated.
105         The .NET development platform is essentially a new foundation
106         for program development that gives Microsoft a room to grow
107         for the coming years. 
109 ** ECMA standards.
111         Microsoft has submitted the
112         specifications of C#, the runtime, the metadata and the
113         other various bits of the .NET development platform to the
114         <a href="http://www.ecma.ch">ECMA</a> for standarization.
116         You can get a copy of the specifications submitted to ECMA
117         from: <a href="http://www.dotnetexperts.com/ecma">http://www.dotnetexperts.com/ecma</a>
119 ** Mono: an Open Source Common Language Infrastructure implementation. 
121         Ximian has begun work on Mono, a project that aims to bring
122         the Common Language Infrastructure platform to free systems.  
124         When the GNU project was launched, they picked the best
125         operating system that was available out there, and they
126         began to clone it: Unix.
128         The .NET development platform is a very rich, powerful, and
129         well designed platform that would help improve the free
130         software development platform.  Just like the GNU project
131         began to clone Unix sixteen years ago, we will be cloning the
132         .NET development platform because it is a great platform to
133         build on.
135 ** What makes up Mono?
137         There are various pieces that make up Mono today:
139         <ul>
140                 * A C# compiler.
142                 * The Virtual Execution System: that has the
143                   Just-in-Time compiler, garbage collector, loader,
144                   threading engine.
146                   A byte code interpreter is provided for quickly
147                   porting Mono to new systems and debugging the JIT
148                   purposes, but it is not intended to be the ideal
149                   execution environment.
151                 * An implemenation of the .NET class libraries:
152                   Remoting, Reflection, Reflection.Emit, Xml, Xpath,
153                   Xslt, Xml Serialization, Web Services support. 
155                 * Cross platform class libraries for data access:
156                   Postgress, MySQL, DB2, TDS, Sybase, Oracle, ODBC and
157                   Gnome's GDA.
159                 * Unix class libraries: Mono.Posix
161                 * Gnome-specific class libraries: The Gtk# family. 
163                 * A code pre-compiler to generate native code ahead of
164                   time.
166                 * Gtk# a toolkit to develop GNOME applications on Unix
167                   and Windows.
169                 * An implementation of the Remoting infrastructure in
170                  .NET
171         </ul>
173         Other work-in-progress components:
175         <ul>
176                 * A VB.NET compiler and JScript compilers are in the works.
178                 * Web services on the server side.
180                 * We are planning to include Remoting.CORBA as part of
181                   Mono standard distribution.
182         </ul>
184 ** Why use GNOME components?
186         GNOME is an umbrella project that consists of infrastructural
187         components (GUI toolkit, XML libraries, CORBA implementation,
188         printing architecture, imaging system), a desktop environment,
189         and productivity applications.
191         The GNOME infrastructural components can be used to quickly
192         implement various pieces of the class libraries without reinventing
193         the wheel, and since all those components are licensed under
194         the terms of the GNU LGPL it is a perfect fit.  
196         Libart will be used to implement the Drawing.2D API; Gtk+ and
197         the GNOME libraries will be used to implement the WinForms
198         API and of course Glib and libxml will be used in various
199         places.