b9678e61ab092820ef7097a8a853f1bfd072bacd
[mono.git] / doc / faq
1 ** Basics
2
3 Q: Is Mono a .NET implementation?
4    
5 A: No.  .NET is a company-wide initiative at Microsoft that
6    encompasses many different areas (the .NET development framework,
7    Passport, Biztalk, their new server products, and anything that is
8    remotely connected to .NET gets the ".NET-stamping" treatment).
9    Some components of this initiative have been announced and some
10    others are in the works.
11
12 Q: What is Mono exactly?
13    
14 A: Mono is a project to implement various technologies developed by
15    Microsoft that have now been submitted to the ECMA Standards Body
16    for standardization.
17
18    It contains a number of components:
19
20         <ul>
21                 * A Common Language Infrastructure (CLI) virtual
22                   machine that contains a class loader, Just-in-time
23                   compiler, and a garbage collecting runtime.
24
25                 * A class library that can work with any language
26                   which works on the CLR.
27
28                 * A compiler for the C# language, in the future we might work
29                   on other compilers that target the Common Language Runtime. 
30
31                   In Windows there are compilers that target the
32                   virtual machine for
33                   href="http://msdn.microsoft.com/net/thirdparty/default.asp#lang">a
34                   number of languages:</a> Managed C++, Java Script,
35                   Eiffel, Component Pascal, APL, Cobol, Oberon, Perl,
36                   Python, Scheme, Smalltalk, Standard ML, Haskell,
37                   Mercury and Oberon.
38         </ul>
39
40    The CLR and the Common Type System (CTS) enables applications and
41    libraries to be written in a number of languages.  Classes and
42    methods created in one language can be used from a different
43    language. 
44
45    This means for example that if you define a class to do algebraic
46    manipulation in C#, that class can be reused from any other
47    language that supports the CLI.  You could create a class in C#,
48    subclass it in C++ and instantiate it on an Eiffel program. 
49
50    A single object system, threading system, class libraries, garbage
51    collection system can be shared across all these languages. 
52    
53 Q: Where can I find the specification for these technologies?
54    
55 A: You can find the work-in-progress documentation from the T3G ECMA
56    group here:
57  
58    <a href="http://www.dotnetexperts.com">http://www.dotnetexperts.com</a>
59
60 Q: Will you implement the .NET Framework SDK class libraries?
61    
62 A: Yes, we will be implementing the APIs of the .NET Framework SDK
63    class libraries. 
64
65 Q: What does Mono stand for?
66    
67 A: Mono stands for `Monkey' in Spanish, you can also think of it as
68    monocromatic as that is what my text editor looks like. 
69
70    We like monkeys.
71
72 Q: When will you ship it?
73
74 A: We do not know when the code will be shipped.  The more
75    contributions we get to the project, the sooner it will ship.
76
77    A rough estimate is that we might be able to run our C# compiler on
78    Linux by the end of the year.  This is exciting because we will be
79    running the Windows Executable generated by a Microsoft .NET
80    compiler on the Linux platform. 
81
82    We expect that doing GUI applications will require more work on the
83    class libraries, and that could take another six months.
84
85 Q: How can I contribute?
86
87 A: Check the <a href="contributing.html">contributing</a> section. 
88
89 Q: You guys should innovate instead of copying.
90
91 A: We are working towards giving free software developers better tools
92    to create better products.  We have decided that we should spend our
93    limited resources towards implementing an existing specification
94    instead of designing and implementing our own.
95
96    Designing and implementing our own is possible, but it makes little
97    sense to roll our own just because a specification comes from a
98    proprietary vendor.  
99
100 ** Ximian
101
102 Q: Why is Ximian working on .NET?
103    
104 A: We are interested in providing the best tools for programmers to
105    develop applications for Free Operating Systems.  
106
107    Please read the project <a href="rationale.html">rationale's background</a>
108
109 Q: Will Ximian be able to take on a project of this size?  
110
111 A: Ximian will not be able to taken on the whole project on its own.
112    Mono will be a free software/open source community project, that is
113    the only way we can hope to implement something of this size.  You
114    can <a href="contributing.html">contribute</a> to this effort.
115
116 Q: What pieces will Ximian be working on?
117
118 A: We will devote most of our resources to work on the pieces which
119    are on the critical path to release a development and execution
120    environment.  
121
122    The idea is to get Mono to a state of usability that would allow
123    third parties to actually be able to use it real-world development.
124
125    On the other hand, if you have Windows you could start contributing
126    now to the class libraries by writting them in C#.
127
128 ** Mono and .NET
129
130 Q: If applications use Mono, does that mean that I have to pay a service fee?
131    
132 A: No.  Mono is not related to Microsoft's initiative of
133    software-as-a-service.  Please read questions <a href="#q1">1</a> and <a href="#q2">2</a>. 
134
135 Q: If you implement .NET, wont I depend on Microsoft Passport to run my software?
136
137 A: No, the .NET Framework is a runtime infrastructure and collection of class
138    libraries.  Passport may be required to access certain web services written
139    for that framework, but only if the programmer chooses Passport as the
140    authentication mechanism.
141
142 Q: Isn't .NET something else?
143
144 A: You are a bit confused.  It is easy to be confused, as Microsoft
145    has been naming anything they have produced recently with `.NET'.
146
147 Q: But .NET does not exist, it is vaporware. 
148    
149 A: Although the `.NET initiative' is still quite nebulous, The .NET Framework
150    has been available for some time.  Mono is not an implementation of the .NET
151    initiative, just the development framework.
152
153    Please refer to questions <a href="#q1">1</a> and <a
154    href="#q2">2</a> for more details.
155
156 ** Passport
157
158 Q: Is this a free implementation of Passport?
159    
160 A: No.  Passport is part of Microsoft's Hailstorm initiative.  Mono
161    is just a runtime, a compiler and a set of class libraries. 
162
163 Q: But there is a  System.Web.Security.PassportIdentity class, that must mean
164    that my software will depend on it.
165    
166 A: No.  That just means that applications might use that API to
167    contact a Passport site.  
168
169    As long as your application does not use Passport, you will not
170    need passport.  
171
172    Furthermore, we can envision our implementation of such a class to
173    be a set of dummy functions, or have a different implementation
174    than contacting passport.com.
175
176    It is too early to We do not know at this time whether the Passport
177    protocol is documented and whether we will be able to talk to
178    passport.com 
179
180 ** GNOME
181
182 Q: How is this related to GNOME?
183    
184 A: In a number of ways:
185
186         * To implement some of the functionality, we will use existing
187           components that have been developed for GNOME (Gtk+, Libart,
188           Gnome-DB and maybe others).
189
190         * This project was born out of the need of providing improved
191           tools for the GNOME community. 
192
193         * We would like to add support to our CLR implementation to
194           deal with GObjects (in GNOME 1.x, they are called
195           GtkObjects).  And allow Mono developers to provide GObjects
196           or use and extend existing GObjects.
197
198 Q: Has the GNOME Foundation or the GNOME team have adopted Mono?
199
200 A: Mono has not been adopted by anyone at this point, as it is a
201    nascent project, but we hope that the tools that we will provide
202    will be adopted by free software programmers. 
203
204 Q: Should GNOME programmer switch over to Mono?
205
206 A: Mono will not be ready even within the next six months, and a
207    complete implementation is probably one year away.  
208
209    We encourage GNOME developers to continue using the existing tools,
210    libraries and components.  Improvements made to GNOME will have an
211    impact on Mono, as they would be the "backend" for various
212    classes. 
213
214 Q: Will Mono include compatibility with Bonobo components?
215    
216 A: Yes, we will provide a set of classes for implementing and using
217    Bonobo components from within Mono. 
218
219 ** Mono and the Web
220
221 Q: Is Mono a way of running Java applets?
222
223 A: No.
224
225 ** Web Services
226
227 Q: Is Mono just a new way of writing Web Services?
228    
229 A: No.  Please refer to the questions <a href="#q1">1</a> and <a href="#q2">2</a>. 1 and 2. 
230
231 Q: If this implements the SDK classes, will I be able to write and
232    execute .NET Web Services with this?
233    
234 A: Yes, you will.
235
236    When the project is finished, you will be able to use the same
237    technologies that are available through the .NET Framework SDK on
238    Windows to write Web Services.
239
240 Q: What about Soup?
241
242 A: Soup is a library for GNOME applications to create SOAP server and
243    SOAP clients.
244
245 Q: I want to use CORBA. 
246
247 A: The CLI contains enough information about a class, that exposing it
248    to other RPC systems (like CORBA) is really simple, and does not
249    even require support from an object.  
250
251    We will be implementing CORBA interoperation as an extension to the
252    Mono classes for the purpose of integrating with Bonobo, just like
253    Microsoft provides COM interoperation classes and support
254    mechanisms. 
255
256 Q: Can I serialize my objects to other things other than XML?
257
258 A: You would have to implement your serializer.  Hopefully someone
259    will contribute a different serializer. 
260
261 ** Development Tools 
262
263 Q: Will it be possible to use the CLI features without using bytecodes
264    or the JIT?
265
266 A: Yes, the CLI engine will be made available as a shared library.
267    The garbage collection engine, the threading abstraction, the
268    object system, the dynamic type code system and the JIT will be
269    available for C developers to integreate with their applications if
270    they wish to do so. 
271
272 Q: Will you have new development tools?
273
274 A: Hopefully Free Software enthusiasts will contribute tools to
275    improve the developer environment.  These tools could be developed
276    initially using Microsoft implementation of the CLI and then
277    executed later with Mono.
278
279 ** Mono and Java
280    
281 Q: What about using Java?  After all there are many languages that
282    target the Java VM.
283    
284 A: You can get very good tools for doing Java development on free
285    systems right now.  <a href="http://www.redhat.com">Red Hat</a> has
286    contributed a <a href="http://gcc.gnu.org">GCC</a> <a
287    href="http://gcc.gnu.org/java">frontend for Java</a> that can take
288    Java sources or Java byte codes and generate native executables; <a
289    href="http://www.transvirtual.com">Transvirtual</a> has implemented
290    <a href="http://www.kaffe.org">Kaffe</a> a JIT engine for Java;
291    Intel also has a Java VM called <a
292    href="http://www.intel.com/research/mrl/orp">ORP</a>.
293
294    The JVM is not designed to be a general purpose virtual machine, it
295    is optimized for the Java language.  The Common Intermediate
296    Language (CIL) on the other hand is designed to be a target for a
297    wide variety of programming languages, and has a set of rules
298    designed to be optimal for JITers.
299
300 Q: What kind of rules make the Common Intermediate Language useful for
301    JITers?
302
303 A: The main rule is that the stack in the CLI is not a general purpose
304    stack.   You are not allowed to use it for other purposes than
305    computing values and passing arguments to functions or return
306    values.  
307
308    At any given call or return instruction, the types on the stack
309    have to be the same independently of the flow of execution of your
310    code. 
311
312 ** Extending Mono
313
314 Q: Would you allow other classes other than those in the
315    specification?
316
317 A: Yes.  The Microsoft class collection is very big, but it is by no
318    means complete.  It would be nice to have a port of `Camel' (the
319    Mail API used by Evolution inspired by Java Mail) for Mono
320    applications. 
321
322    Look for more <a href="ideas.html">ideas</a>.
323
324 ** Mono and portability
325
326 Q: Will Mono only work on Linux?
327
328 A: This is a free software project, that means that the direction of
329    the project is mostly set by those who contribute to it.  If you
330    want to steer the direction, the best way of doing this is through
331    a patch to the sources.
332
333    Currently, we are doing our work on Linux-based systems and
334    Windows.  We do not expect many Linux-isms in the code, so it
335    should be easy to port Mono to other UNIX variants.   
336
337 Q: What about Mono on non X-based systems?
338
339 A: Our main intention at Ximian is to be able to develop GNOME
340    applications with Mono, but if you are interested in providing a
341    port of the Winform classes to other platforms (frame buffer or
342    MacOS X for example), we would gladly integrate them, as far as
343    they are under a Free Software License. 
344
345 ** Reusing existing Code
346
347 Q: Will you guys reuse XXX?
348    
349 A: We want to get Mono in the hands of programmers soon.  We are
350    interested in reusing existing open source software.
351
352 Q: What about Intel's research JIT framework, ORP?
353    
354 A: At this time, we are investigating whether we can use elements of
355    ORP for Mono. 
356
357 Q: What about using GNU Lightning?
358
359 A: We are also researching <a
360    href="http://www.gnu.org/software/lightning/lightning.html">GNU
361    Lightning</a>.
362
363 ** Ximian and Microsoft
364
365 Q: Didn't Miguel de Icaza say that `Unix Sucks'?
366    
367 A: Yes, he did, as a catch phrase in his opening remark on the Ottawa
368    Linux Symposium.  His talk focused on various ways to improve Unix.
369
370    There is a paper describing some ways to improve Unix at:
371
372         <a href="http://primates.ximian.com/~miguel/bongo-bong.html">
373         http://primates.ximian.com/~miguel/bongo-bong.html</a>
374
375 Q: Didn't Ximian's Miguel work for Microsoft?
376
377 A: No, he did not.  Nat Friedman (Ximian's co-founder) did work as an
378    intern for Microsoft.
379
380 Q: Did Nat and Miguel meet at Microsoft?
381
382 A: They met online on the Linux IRC network;  They met in person for
383    the first time in 1997.
384
385
386 ** Acronyms
387
388 Q: What is the difference between CLR (Common Language Runtime) and
389    CLI (Common Language Infrastructure)?
390
391 A: CLI is the specification of an execution system.  The Microsoft
392    implementation of this specification is named CLR. 
393
394    Unless we come up with our own acronym, we could just call ours
395    also CLR, just because it would do exactly the same thing the
396    Microsoft implementation does.