Fix
[mono.git] / doc / rationale
1
2 * The Mono Project
3
4 ** Background.
5
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). 
14
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://www.ximian.com/tech/bonobo.php3">Bonobo<a>.
22         Interfaces to Bonobo exist for C, Perl, Python, and
23         Java.
24
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.
30
31 ** Microsoft's .NET
32
33         The Microsoft .NET initiative is confusing because it is a
34         company wide effort that ranges from development tools to end
35         user applications.  .NET is a branding formative that
36         has been applied to:
37
38         <ul>
39                 * The .NET development platform, a new platform for
40                   writing software.
41
42                 * Web services.
43
44                 * Microsoft Server Applications.
45
46                 * New tools that use the new development platform.
47
48                 * Hailstorm, the Passport centralized single-signon
49                   system that is being integrated into Windows XP.
50
51         </ul>
52
53         Mono is an implementation of the .NET development platform.
54
55 ** The Common Language Infrastructure platform. 
56
57         Microsoft has created a new development platform.  The
58         highlights of this new development platform are:
59
60         <ul>
61                 * A runtime environment that provides garbage
62                   collection, threading and a virtual machine
63                   specification (The Virtual Execution System, VES)
64
65                 * A comprehensive class library.  
66
67                 * A new language, C#.  Very similar to Java,  C#
68                   allows programmers to use all the features available
69                   on the .NET runtime.
70
71                 * A language specification that compilers can
72                   follow if they want to generate classes and code
73                   that can interoperate with other programming
74                   languages (The Common Language Specification: CLS)
75         </ul>
76
77         The Common Language Infrastructure platform is similar to the
78         goals we had in GNOME of giving language independence to
79         programmers.  It is more mature, documented, larger in scope,
80         and has a consistent design.
81
82         Any API that is written using a CLS provider language can be
83         used by any language that is a CLS consumer.  Compilers
84         generate code in a format called Common Intermediate Language
85         (CIL) which is an intermediate representation of a compiled
86         program and is easy to compile to native code or compiled
87         using Just-in-Time (JIT) engines.  The restrictions placed by
88         the runtime on the CIL byte codes ensures that it is possible
89         to do a good job at optimizing the code in a JIT compiler.
90
91         There is not really a lot of innovation in this platform: we
92         have seen all of these concepts before, and we are all
93         familiar with how these things work.
94
95         What makes the Common Language Infrastructure development
96         platform interesting is that it is a good mix of technologies
97         that have been nicely integrated.
98
99         The .NET development platform is essentially a new foundation
100         for program development that gives Microsoft a room to grow
101         for the coming years. 
102
103 ** ECMA standards.
104
105         Microsoft has submitted the
106         specifications of C#, the runtime, the metadata and the
107         other various bits of the .NET development platform to the
108         <a href="http://www.ecma.ch">ECMA</a> for standarization.
109
110         You can get a copy of the specifications submitted to ECMA
111         from: <a href="http://www.dotnetexperts.com/ecma">http://www.dotnetexperts.com/ecma</a>
112
113 ** Mono: an Open Source Common Language Infrastructure implementation. 
114
115         Ximian has begun work on Mono, a project that aims to bring
116         the Common Language Infrastructure platform to free systems.  
117
118         When the GNU project was launched, they picked the best
119         operating system that was available out there, and they
120         began to clone it: Unix.
121
122         The .NET development platform is a very rich, powerful, and
123         well designed platform that would help improve the free
124         software development platform.  Just like the GNU project
125         began to clone Unix sixteen years ago, we will be cloning the
126         .NET development platform because it is a great platform to
127         build on.
128
129 ** What makes up Mono?
130
131         There are various pieces that will make up Mono:
132
133         <ul>
134                 * A C# compiler.
135
136                 * The Virtual Execution System: that will have the
137                   Just-in-Time compiler, garbage collector, loader,
138                   threading engine.
139
140                   A byte code interpreter will be provided for quickly
141                   porting Mono to new systems and debugging the JIT
142                   purposes, but it is not intended to be the ideal
143                   execution environment.
144
145                 * An implemenation of the .NET class library.
146
147                 * Visual development tools. 
148
149                 * A CIL GCC frontend.
150         </ul>
151
152 ** Why use GNOME components?
153
154         GNOME is an umbrella project that consists of infrastructural
155         components (GUI toolkit, XML libraries, CORBA implementation,
156         printing architecture, imaging system), a desktop environment,
157         and productivity applications.
158
159         The GNOME infrastructural components can be used to quickly
160         implement various pieces of the class libraries without reinventing
161         the wheel, and since all those components are licensed under
162         the terms of the GNU LGPL it is a perfect fit.  
163
164         Libart will be used to implement the Drawing.2D API; Gtk+ and
165         the GNOME libraries will be used to implement the WinForms
166         API and of course Glib and libxml will be used in various
167         places.