New test.
[mono.git] / web / 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://developer.ximian.com/articles/whitepapers/bonobo">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 ** Another explanation
32
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>
36
37 ** Microsoft's .NET
38
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:
43
44         <ul>
45                 * The .NET development platform, a new platform for
46                   writing software.
47
48                 * Web services.
49
50                 * Microsoft Server Applications.
51
52                 * New tools that use the new development platform.
53
54                 * Hailstorm, the Passport centralized single-signon
55                   system that is being integrated into Windows XP.
56
57         </ul>
58
59         Mono is an implementation of the .NET development platform.
60
61 ** The Common Language Infrastructure platform. 
62
63         Microsoft has created a new development platform.  The
64         highlights of this new development platform are:
65
66         <ul>
67                 * A runtime environment that provides garbage
68                   collection, threading and a virtual machine
69                   specification (The Virtual Execution System, VES)
70
71                 * A comprehensive class library.  
72
73                 * A new language, C#.  Very similar to Java,  C#
74                   allows programmers to use all the features available
75                   on the .NET runtime.
76
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>
82
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.
87
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.
96
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.
100
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.
104
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. 
108
109 ** ECMA standards.
110
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.
115
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>
118
119 ** Mono: an Open Source Common Language Infrastructure implementation. 
120
121         Ximian has begun work on Mono, a project that aims to bring
122         the Common Language Infrastructure platform to free systems.  
123
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.
127
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.
134
135 ** What makes up Mono?
136
137         There are various pieces that make up Mono today:
138
139         <ul>
140                 * A C# compiler.
141
142                 * The Virtual Execution System: that has the
143                   Just-in-Time compiler, garbage collector, loader,
144                   threading engine.
145
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.
150
151                 * An implemenation of the .NET class libraries:
152                   Remoting, Reflection, Reflection.Emit, Xml, Xpath,
153                   Xslt, Xml Serialization, Web Services support. 
154
155                 * Cross platform class libraries for data access:
156                   Postgress, MySQL, DB2, TDS, Sybase, Oracle, ODBC and
157                   Gnome's GDA.
158
159                 * Unix class libraries: Mono.Posix
160
161                 * Gnome-specific class libraries: The Gtk# family. 
162
163                 * A code pre-compiler to generate native code ahead of
164                   time.
165
166                 * Gtk# a toolkit to develop GNOME applications on Unix
167                   and Windows.
168
169                 * An implementation of the Remoting infrastructure in
170                  .NET
171         </ul>
172
173         Other work-in-progress components:
174
175         <ul>
176                 * A VB.NET compiler and JScript compilers are in the works.
177
178                 * Web services on the server side.
179
180                 * We are planning to include Remoting.CORBA as part of
181                   Mono standard distribution.
182         </ul>
183
184 ** Why use GNOME components?
185
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.
190
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.  
195
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.