Flush
[mono.git] / doc / faq
1 <a href="#basics">Basics</a><br>
2 <a href="#ximian">The Ximian Role in the Mono project</a><br>
3 <a href="#gnome">Mono and GNOME</a><br>
4 <a href="#gui">Building GUI applications with Mono</a><br>
5 <a href="#msft">Mono and Microsoft</a><br>
6 <a href="#pnpproject">Mono and the Portable.NET Project</a><br>
7 <a href="#webservices">Web Services</a><br>
8 <a href="#asp">Mono and ASP.NET</a><br>
9 <a href="#devel">Development Tools and Issues</a><br>
10 <a href="#java">Mono and Java</a><br>
11 <a href="#extending">Extending Mono</a><br>
12 <a href="#portability">Portability</a><br>
13 <a href="#reuse">Reusing Existing Code</a><br>
14 <a href="#gcc">Mono and GCC</a><br>
15 <a href="#performance">Performance</a><br>
16 <a href="#licensing">Licensing</a><br>
17 <a href="#patents">Patents</a><br>
18 <a href="#etc">Miscellaneous Questions</a><br>
19
20
21 <a name="basics"></a>
22 ** Basics
23
24 Q: What is Mono exactly?
25
26 A: The Mono Project is an open development initiative sponsored by
27    Ximian that is working to develop an open source, Unix
28    version of the Microsoft .NET development platform.  Its objective
29    is to enable Unix developers to build and
30    deploy cross-platform .NET Applications.  The project will
31    implement various technologies developed by Microsoft that have now
32    been submitted to the ECMA for standardization.
33
34 Q: What is the difference between Mono and the .NET Initiative?
35
36 A: The ".NET Initiative" is a somewhat nebulous company-wide effort by
37    Microsoft, one part of which is a cross-platform development
38    framework.  Mono is an implementation of the development framework,
39    but not an implementation of anything else related to the .NET
40    Initiative, such as Passport, software-as-a-service, or
41    corporate rebranding.
42
43 Q: What technologies are included in Mono?
44
45 A: Mono contains a number of components useful for building new
46    software:
47
48         <ul>
49                 * A Common Language Infrastructure (CLI) virtual
50                   machine that contains a class loader, Just-in-time
51                   compiler, and a garbage collecting runtime.
52
53                 * A class library that can work with any language
54                   which works on the CLR.
55
56                 * A compiler for the C# language.  In the future we
57                   might work on other compilers that target the Common
58                   Language Runtime.
59         </ul>
60
61
62    Windows has compilers that target the virtual machine from <a
63    href="http://msdn.microsoft.com/net/thirdparty/default.asp#lang">a
64    number of languages:</a> Managed C++, Java Script, Eiffel,
65    Component Pascal, APL, Cobol, Oberon, Perl, Python, Scheme,
66    Smalltalk, Standard ML, Haskell, Mercury and Oberon.
67
68    The CLR and the Common Type System (CTS) enables applications and
69    libraries to be written in a collection of different languages that
70    target the byte code
71
72    This means for example that if you define a class to do algebraic
73    manipulation in C#, that class can be reused from any other
74    language that supports the CLI.  You could create a class in C#,
75    subclass it in C++ and instantiate it in an Eiffel program. 
76
77    A single object system, threading system, class libraries, and
78    garbage collection system can be shared across all these languages.
79    
80 Q: Where can I find the specification for these technologies?
81
82 A: You can find the work-in-progress documentation from the T3G ECMA
83    group here:
84  
85    <a href="http://www.dotnetexperts.com">http://www.dotnetexperts.com</a>
86
87 Q: Will you implement the .NET Framework SDK class libraries?
88
89 A: Yes, we will be implementing the APIs of the .NET Framework SDK
90    class libraries. 
91
92 Q: Will you offer an ECMA-compliant set of class libraries?
93
94 A: Eventually we will.  Our current focus is on interoperating
95    with the Microsoft SDK, but we will also offer an ECMA compliant
96    set of libraries. 
97
98 Q: What does the name "Mono" mean?
99
100 A: Mono is the word for `monkey' in Spanish. We like monkeys.
101
102 Q: Is Mono usable?
103
104 A: The JIT engine is usable on Intel x86 machines.  An interpreter
105    can be used on other non-Intel x86 machines.  
106
107    The class libraries are mature enough to run some real applications
108    (the compiler for instance, and every day more and more applications
109    are natively developed with Mono).
110
111 Q: When will you ship it?
112
113 A: Different parts of Mono will achieve usability at different stages,
114    once we are comfortable with the compiler, we will release "Mono Core",
115    which contains everything needed to develop applications with the base
116    class libraries.  This should be available at some point during 2002.
117
118    Other higher level class libraries (ASP.NET, ADO.NET, Windows.Forms) will
119    be released when they become stable. 
120
121 Q: What major components will you include in Mono?
122
123 A: Hopefully everything that Microsoft ships on their Framework
124    (ADO.NET, ASP.NET, Windows.Forms), and
125    we encourage third party developers to create reusable components that
126    work on both Mono and Windows.
127
128 Q: How can I contribute?
129
130 A: Check the <a href="contributing.html">contributing</a> section. 
131
132 Q: Aren't you just copying someone else's work?
133
134 A: We are interested in providing the best tools for programmers to
135    develop applications for Free Operating Systems.  We also want to help
136    provide the interoperability that will allow those systems to fit in
137    with other standards.
138
139    For more background, read the <a href="http://www.go-mono.com/rationale.html">Mono
140    Project white paper</a>.
141    the project.
142
143 Q: Miguel said once that Mono was being implemented in COBOL. Is that true?.
144
145 A: No. It was a joke.
146
147
148 <a name="ximian"></a> 
149
150 ** The Ximian Role in the Mono Project
151
152 Q: Why is Ximian working on .NET?
153
154 A: Ximian is interested in providing the best tools for programmers to
155    develop applications for Free Operating Systems.  
156
157    For more information, read the project <a
158    href="rationale.html">rationale</a> page.
159
160 Q: Will Ximian be able to take on a project of this size?  
161
162 A: Of course not. Ximian a supporter of the Mono project, but the only way
163    to implement something of this size is for the entire free software
164    community to get involved. Visit the <a href="contributing.html">contributing</a> 
165    page if you'd like to help out.
166
167 Q: What pieces will Ximian be working on?
168
169 A: We will devote most of our resources to work on the pieces which are
170    on the critical path to release a development and execution
171    environment. Once the project is at a stage where it is useful in
172    the real world, it will achieve a critical mass of developers to
173    improve it further.
174
175 Q: Will Ximian offer Mono commercially?
176
177 A: When Mono is ready to be shipped Ximian will offer a commercial
178    support and services for Mono. 
179
180 Q: Does Ximian provide consulting services around Mono?
181
182 A: Yes, Ximian does provide consulting services around Mono to
183    make it suitable to your needs.  Porting the runtime engine,
184    customizing it, working on specific classes or tuning the code
185    for your particular needs. 
186
187 Q: Will you wait until Mono is finished?
188
189 A: Mono will ship on various stages as they mature.  Some people
190    require only a subset of the technologies, those will ship first.
191
192    More advanced features will take more time to develop.  A support
193    timeline will be available in June 2002.
194
195 <a name="gnome"></a> 
196 ** Mono and GNOME
197
198 Q: How is Mono related to GNOME?
199
200 A: In a number of ways.  This project was born out of the need of
201    providing improved tools for the GNOME community, and will use
202    existing components that have been developed for GNOME when they
203    are available.  For example, we plan to use Gtk+ and Libart to
204    implement Winforms and the Drawing2D API and are considering
205    GObject support.
206
207 Q: Has the GNOME Foundation or the GNOME team adopted Mono?
208
209 A: Mono is too new to be adopted by those groups. We hope that the
210    tools that we will provide will be adopted by free software
211    programmers including the GNOME Foundation members and the GNOME
212    project generally.
213
214 Q: Should GNOME programmers switch over to Mono now?
215
216 A: It is still far to early for discussions of "switching over."  No
217    pieces of Mono will be ready within the next six months, and a
218    complete implementation is roughly one year away.
219
220    We encourage GNOME developers to continue using the existing tools,
221    libraries and components.  Improvements made to GNOME will have an
222    impact on Mono, as they would be the "backend" for various classes.
223
224 Q: Will Mono include compatibility with Bonobo components? What is the
225    relationship between Mono and Bonobo?
226
227 A: Yes, we will provide a set of classes for implementing and using
228    Bonobo components from within Mono.  Mono should allow you to write
229    Bonobo components more easily, just like .NET on Windows allows you
230    to export .NET components to COM.
231
232 Q: Does Mono depend on GNOME?
233
234 A: No, Mono does not depend on GNOME.  We use a few packages produced by
235    the GNOME team like the `glib' library.  
236
237 Q: But will I be able to build GNOME applications?
238
239 A: Yes, we will enable people to write GNOME applications using Mono.
240
241 <a name="gui"></a>
242 ** GUI applications
243
244 Q: Will Mono enable GUI applications to be authored?
245
246 A: Yes, you will be able to build GUI applications.  Indeed, that is our
247    main focus.  We will provide both the Windows.Forms API and the Gtk# API.
248
249 Q: What is the difference between Gtk# and System.Windows.Forms?
250
251 A: Gtk# is a set of bindings for the Gtk+ toolkit for C# (and other
252    CIL-enabled languages).  System.Windows.Forms is an API defined
253    by Microsoft to build GUI applications.
254
255 Q: Will I be able to run my smart clients on systems powered by Mono?
256
257 A: As long as your applications are 100% .NET and do not make use
258    of P/Invoke to call Win32 functions, your smart client applications
259    will run on Mono platforms.
260
261 Q: Where can I learn mora about Gtk#?
262
263 A: The following <a href="http://gtk-sharp.sourceforge.net>link</a> sends you to the page of the project.
264
265 Q: What can I do with Gtk#?. 
266
267 A: Gtk# is becoming very usable and you can create applications and
268    applets like those you see in a GNOME desktop environment. It's 
269    easy to install so it's worth a try. 
270
271 Q: How can I compile my HelloWorld.cs which uses Gtk#?.
272
273 A: Try: mcs --unsafe -o HelloWorld.exe -r glib-sharp -r pango-sharp -r
274         atk-sharp -r gdk-sharp -r gtk-sharp -r gdk-imaging-sharp
275         HelloWorld.cs
276
277
278 <a name="msft"></a>
279 ** Mono and Microsoft
280
281 Q: Is Microsoft helping Ximian with this project?
282
283 A: No. Ximian CTO Miguel de Icaza had a friendly conversation with
284    Microsoft software architect David Stutz, but that's about the
285    extent of the contact. Microsoft is interested in other
286    implementations of .NET and are willing to help make the ECMA spec
287    more accurate for this purpose.
288
289    Ximian representatives have also spoken with Sam Ruby at the ECMA
290    TG3 committee to discuss the same issues.
291
292 Q: Is Microsoft or Corel paying Ximian to do this?
293
294 A: No.
295
296 Q: Do you fear that Microsoft will change the spec and render Mono
297    useless?
298
299 A: No.  Microsoft proved with the CLI and the C# language that it was
300    possible to create a powerful foundation for many languages to
301    interoperate.  We will always have that.  
302
303    Even if changes happened in the platform which were undocumented,
304    the existing platform would a value on its own.
305
306 Q: Are you writing Mono from the ECMA specs?
307
308 A: Yes, we are writing them from the ECMA specs and the published
309    materials in print about .NET.
310
311 Q: If my applications use Mono, will I have to pay a service fee?
312
313 A: No.  Mono is not related to Microsoft's initiative of
314    software-as-a-service.
315
316 Q: Is the Mono Project is related to the Microsoft Hailstorm effort?  Is
317    Ximian endorsing Hailstorm?  
318
319 A: No.  The Mono Project is focused on providing a compatible set of
320    tools for the Microsoft .NET development platform.  It does not
321    address, require, or otherwise endorse the MS Passport-based
322    Hailstorm single sign-on system that is part of Windows XP and
323    other services.
324
325 Q: Will Mono or .NET applications depend on Microsoft Passport?
326
327 A: No. MS Passport is unrelated to running .NET compatible applications
328    produced with the Mono tools.  The only thing you will need is a
329    just-in-time compiler (JIT).
330
331 Q: What is a 100% .NET application?
332
333 A: A `100% .NET application' is one that only uses the APIs defined
334    under the System namespace and does not use PInvoke.  These
335    applications would in theory run unmodified on Windows, Linux,
336    HP-UX, Solaris, MacOS X and others. 
337
338 Q: If Microsoft will release a port of their .NET platform under the
339    `Shared Source' license, why should I bother with anything else?
340
341 A: The Shared Source implementation will be expensive and its uses
342    will be tightly restricted, especially for commercial use. We are
343    working towards an implementation that will grant a number of
344    important rights to recipients: use for any purpose,
345    redistribution, modification, and redistribution of modifications.
346
347    This is what we call <a
348    href="http://www.gnu.org/philosophy/free-sw.html">Free Software</a>
349
350 Q: Is Mono a free implementation of Passport?
351
352 A: No. Mono is just a runtime, a compiler and a set of class
353    libraries.
354
355 Q: Will the System.Web.Security.PassportIdentity class mean
356    that my software will depend on Passport?
357    
358 A: No.  Applications may use that API to contact a Passport site, but
359    are not required to do so.
360
361    As long as your application does not use Passport, you will not
362    need Passport.  
363
364 Q: Will Mono running on Linux make Passport available for Linux?
365
366 A: No.  However, the Passport toolkit for Linux-based web servers is
367    available from Microsoft.
368
369 Q: Will Mono allow me to run Microsoft Office on Linux?
370
371 A: No, it will not.  Microsoft Office is a Windows application.  To
372    learn more about running Windows applications on Intel Unix systems
373    refer to <a href="http://www.winehq.com">the Wine Project</a>.
374
375 <a name="pnpproject"></a>
376 ** Mono and Portable.NET
377
378 Q: What are the differences between Mono and Portable.NET?
379
380 A: Most of Mono is being written using C#, with only
381    a few parts written in C (The JIT engine, the runtime, the
382    interfaces to the garbage collection system).  
383
384    It is easier to describe what is unique about Mono:
385    <ul>
386      <li> A self-hosting C# compiler written in C#, which is clean, easy
387           to maintain.
388
389      <li> A multi-platform runtime engine: both a JIT engine and an
390           interpreter exist.  The JIT engine runs currently on x86
391           systems, while the interpreter works on Sparc, StrongARM and
392           PowerPC systems.  
393
394      <li> Supports Linux, Windows and Solaris at this point.
395
396      <li> The JIT engine is written using a portable instruction
397           selector which not only generates good code (we are told
398           that we are faster than Rotor, but it is hard to tell) but
399           is also the foundation to retarget the JIT engine to other
400           systems.  
401
402           The system employed is described in various compiler
403           books and it is very similar to what is described in the 
404           book that covers LCC, the Ansi C retargetable C compiler.
405
406      <li> The JIT engine supports inlining, constant folding and propagation,
407
408      <li> Full support for remoting in the runtime, but the class 
409           libraries are still behind.
410
411      <li> The C# compiler, the JIT engine and the class libraries are
412           mature enough that the whole system is self-hosting, ie, that
413           it can be fully developed with itself at this point.
414
415      <li> We are not yet done, and there is a lot of work left to be
416           done
417
418      <li> We have a great community of developers, without which Mono
419           would not be possible.
420
421      <li> We will provide an ahead of time compilation mode in the 
422           future.
423    </ul>
424
425 <a name="webservices"></a>
426 ** Web Services
427
428 Q: How is Mono related to Web Services?
429
430 A: Mono is only related to Web Services in that it will implement the
431    same set of classes that have been authored in the .NET Framework
432    to simplify and streamline the process of building Web Services.
433
434    But most importantly, Mono is an Open Source implementation of the
435    .NET Framework.
436
437 Q: Can I author Web Services with Mono?
438
439 A: You will be able to write Web Services on .NET that run on Mono and
440    viceversa. 
441
442 Q: If Mono implements the SDK classes, will I be able to write and
443    execute .NET Web Services with it?
444    
445 A: Yes.  When the project is finished, you will be able to use the
446    same technologies that are available through the .NET Framework SDK
447    on Windows to write Web Services.
448
449 Q: What about Soup?  Can I use Soup without Mono?
450
451 A: Soup is a library for GNOME applications to create SOAP servers and
452    SOAP clients, and can be used without Mono.  You can browse the
453    source code for soup using <a
454    href="http://cvs.gnome.org/bonsai">GNOME's Bonsai</a>.
455
456 Q: Can I use CORBA?
457
458 A: Yes. The CLI contains enough information about a class that
459    exposing it to other RPC systems (like CORBA) is really simple, and
460    does not even require support from an object.  
461
462    We will be implementing CORBA interoperation as an extension to the
463    Mono classes so that we can integrate with Bonobo, just like
464    Microsoft provides COM interoperation classes and support
465    mechanisms. 
466
467 Q: Can I serialize my objects to other things other than XML?
468
469 A: Yes, although the serializing tools have not yet been planned, and
470 you would probably have to implement them yourself.
471
472 Q: Will Mono use ORBit?
473
474 A: No. Mono will be using a new implementation of CORBA that isn't still started. 
475
476 <a name="devel"></a>
477 ** Development Tools and Issues
478
479 Q: Will it be possible to use the CLI features without using bytecodes
480    or the JIT?
481
482 A: Yes. The CLI engine will be made available as a shared library.
483    The garbage collection engine, the threading abstraction, the
484    object system, the dynamic type code system and the JIT will be
485    available for C developers to integreate with their applications if
486    they wish to do so. 
487
488 Q: Will you have new development tools?
489
490 A: With any luck, Free Software enthusiasts will contribute tools to
491    improve the developer environment.  These tools could be developed
492    initially using the Microsoft implementation of the CLI and then
493    executed later with Mono.
494
495 Q: What kind of rules make the Common Intermediate Language useful for
496    JITers?
497
498 A: The main rule is that the stack in the CLI is not a general purpose
499    stack.   You are not allowed to use it for other purposes than
500    computing values and passing arguments to functions or return
501    values.  
502
503    At any given call or return instruction, the types on the stack
504    have to be the same independently of the flow of execution of your
505    code. 
506
507 Q: Is it true that the CIL is ideal for JITing and not efficient for
508    interpreters?
509
510 A: The CIL is better suited to be JITed than JVM byte codes, but you
511    can interpret them as trivially as you can interpret JVM byte
512    codes. 
513
514 Q: Isn't it a little bit confusing to have the name of "XSP" (the same 
515    as in the Apache Project) for the ASP.NET support in Mono?.
516
517 A: In Mono, xsp is just the name of the C# code generator for ASP.NET 
518    pages. In the Apache Project, it is a term for the "eXtensible Server 
519    Pages" technology so as they are very different things, they don't 
520    conflict.
521
522 Q: What about using something like Jabber instead of the System.Messaging 
523    namespace?.
524
525 A: In short, MSMQ is not something like Jabber, but asynchronous messaging 
526    through queues. Usefull queues do more than serialize messages, they are 
527    also platform bridges.
528
529 Q: Are you supporting XMLDocument and relatives?.
530
531 A: Currently, we aren't implementing them yet. It would require updates to 
532    most of the XmlNode derivatives so it's not a trivial task. We are 
533    currently focusing on getting XPath support working. 
534
535 Q: Is there any plan to develop an aspx server for Mono?.
536
537 A: The webserver turned out to be very simple compared to the rest of the 
538    work. Gonzalo has got the page generator mostly done (a module called 
539    xsp, who has nothing to do with the XSP term used in the Apache Project).
540    Patrik has done a lot of the work to get the ProcessRequest to work.
541    You can try to help in the final touches to the System.Web classes and
542    writing regression tests for the widgets we have.
543
544 <a name="asp">
545 ** Mono and ASP.NET
546
547 Q: Is Mono supporting ASP.NET?
548
549 A: Yes. The development of the support for ASP.NET comes in various stages, 
550    here is what Gonzalo has been working on: 1. The Parser. 2. Getting the 
551    parser to generate output compatible with ASP.NET. 3. Running the sample 
552    output with the real Microsoft runtime but using our generated page. 4. 
553    Running the sample with our classes with the .NET runtime. 5. Running 
554    our sample code with our classes with our runtime. This is the process 
555    we are following. Currently Gonzalo has reached point 3.
556
557 Q: I have heard that their is a webserver developed with Mono. Is it true?.
558
559 A: Yes. You can find it <a href="http://home.adelphia.net/~aljames/webserver.htm">here</a>
560    Read the README for more info.
561
562 <a name="java">
563 ** Mono and Java
564    
565 Q: Why don't you use Java?  After all, there are many languages that
566    target the Java VM.
567
568 A: You can get very good tools for doing Java development on free
569    systems right now.  <a href="http://www.redhat.com">Red Hat</a> has
570    contributed a <a href="http://gcc.gnu.org">GCC</a> <a
571    href="http://gcc.gnu.org/java">frontend for Java</a> that can take
572    Java sources or Java byte codes and generate native executables; <a
573    href="http://www.transvirtual.com">Transvirtual</a> has implemented
574    <a href="http://www.kaffe.org">Kaffe</a> a JIT engine for Java;
575    Intel also has a Java VM called <a
576    href="http://www.intel.com/research/mrl/orp">ORP</a>.
577
578    The JVM is not designed to be a general purpose virtual machine.
579    The Common Intermediate Language (CIL), on the other hand, is
580    designed to be a target for a
581    wide variety of programming languages, and has a set of rules
582    designed to be optimal for JITers.
583
584 Q: Could Java target the CLI?
585
586 A: Yes, Java could target the CLI.  We have details on a <a
587    href="ideas.html#guavac">project</a> that someone could take on to
588    make this happen.  
589
590    Microsoft has an implemenation of the Java language called J# that
591    can target the CIL execution engine. 
592
593 Q: Is it possible to write a JVM byte code to CIL convertor?
594
595 A: Yes, it is possible.  Here are a few starting point:
596
597         <ul>
598                 * A byte code representation is really a flattened forest of
599                   trees.  Look at the Mono JIT engine to see how we compute
600                   the basic blocks (this is used to figure out the "trees").
601
602                   The forest is just an array of trees.
603
604                   Indeed, run the JIT engine with -d (mono -d prog.exe) and
605                   you will see how these trees look like.
606
607                   You will have to do something similar for Java.
608
609                 * Each "forest of trees" has a meaning.  This meaning can now
610                   be translated into the equivalent "meaning" in CLR-land.
611         </ul>
612
613 Q: Could mono become a hybrid cil/java platform?
614
615 A: No. It is quite far from the philosophy of the project. The idea of Mono 
616    is, to have only _one_ VM, on which all can run. And if there existing a 
617    binary-converter from Java-.class to IL and if there existing something 
618    like J-Sharp on Mono, you can write programs in Java, which than can run 
619    on Mono. You do not need two bindings (like your example: GTK-Sharp _and_ 
620    Java-Gnome). You need only _one_ of it (GTK-Sharp). Thats the idea of Mono.
621    An other point is, that there are no people, who use OpenSource-JVMs. They 
622    all prefer Suns original. But for Unix there don't exist a .NET-Framework. 
623    So it is possible, that in the future Mono is the standard .NET for unixes.
624
625 <a name="extending"></a>
626 ** Extending Mono
627
628 Q: Would you allow other classes other than those in the
629    specification?
630
631 A: Yes.  The Microsoft class collection is very big, but it is by no
632    means complete.  It would be nice to have a port of `Camel' (the
633    Mail API used by Evolution inspired by Java Mail) for Mono
634    applications.  
635
636    You might also want to look into implementing CORBA for Mono.  Not
637    only because it would be useful, but because it sounds like a fun
638    thing to do, given the fact that the CLI is such a type rich
639    system. 
640
641    For more information on extending Mono, see our <a
642    href="ideas.html">ideas</a> page.
643
644 Q: Do you plan to Embrace and Extend .NET?
645
646 A: Embracing a good technology is good.  Extending technologies in
647    incompatible ways is bad for the users, so we do not plan on 
648    extending the technologies.
649
650    If you have innovative ideas, and want to create new classes, we 
651    encourage you to make those classes operate correctly well in both
652    Mono and .NET
653
654 <a name="portability"></a>
655 ** Portability
656
657 Q: Will Mono only work on Linux?
658
659 A: Currently, we are doing our work on Linux-based systems and
660    Windows.  We do not expect many Linux-isms in the code, so it
661    should be easy to port Mono to other UNIX variants.   
662
663 Q: What about Mono on non Linux-based systems?
664
665 A: Our main intention at Ximian is to be able to develop GNOME
666    applications with Mono, but if you are interested in providing a
667    port of the Winform classes to other platforms (frame buffer or
668    MacOS X for example), we would gladly integrate them, as long
669    they are under an open source license.  
670
671 Q: What operating systems/CPUs do you support
672
673 A: Mono currently runs on Linux, Windows, Solaris and FreeBSD.
674    There is a JIT engine available for x86 processors that can
675    generate code and optimizations tailored for a particular CPU.
676
677    Interpreters exist for the SPARC, PowerPC and StrongARM cpus.
678
679 Q: Does Mono run on Windows?
680
681 A: Yes.   The Compiler and the runtime both run on Windows.
682
683 Q: When will mono and mcs compile on Linux?.
684
685 A: That happend a long time ago. Know you can download and compile 
686    them or even install them from already made binary packages for 
687    Windows and for Linux (RPM/DEB).
688
689 Q: Will I require Cygwin to run mono?
690
691 A: No.  While you'll need it to compile it, it runs without cygwin and does not even require cygwin1.dll
692
693 Q: Will Mono depend on GNOME?
694
695 A: It will depend only if you are using a particular assembly (for
696    example, for doing GUI applications).  If you are just interested
697    in Mono for implementing a `Hello World Enterprise P2P Web
698    Service', you will not need any GNOME components.
699
700 <a name="reuse"></a>
701 ** Reusing Existing Code
702
703 Q: What projects will you reuse or build upon?
704
705 A: We want to get Mono in the hands of programmers soon.  We are
706    interested in reusing existing open source software.
707
708 Q: What about Intel's research JIT framework, ORP?
709
710 A: At this time, we are investigating whether we can use elements of
711    ORP for Mono.   ORP is a research JIT engine that has a clearly
712    defined API that splits the JIT from the GC system and the actual
713    byte code implementation.
714
715    We are using some pieces of ORP (Their code generation interface)
716    and we use it as a source of inspiration for optimizations.  Paolo
717    and Dietmar consider ORP as being one of the best JIT engines out
718    there (and their research work and papers are very useful if you are
719    interested in JIT technology).
720
721 Q: What about using GNU Lightning?
722
723 A: We are not using GNU Lightning.  Our JIT is using an instruction
724    selector based on tree-pattern matching, and a code generation
725    interface that is very tied to the current architecture.
726
727 <a name="gcc"></a>
728 ** Mono and GCC
729
730 Q: Are you working on a GCC front-end to C#? A GCC backend that will
731    generate CIL images? What about making a front-end to GCC that
732    takes CIL images and generates native code?
733
734 A: We are currently seeking volunteers for those projects.
735    Visit the <a href="contributing.html">contributing</a> section if
736    you are interested.
737
738 Q: But would this work around the GPL in the GCC compiler and allow
739    people to work on non-free front-ends?
740
741 A: People can already do this by targeting the JVM byte codes (there
742    are about 130 compilers for various languages that target the JVM).
743
744 Q: Why are you writing a JIT engine instead of a front-end to GCC?
745
746 A: We want the JIT engine and runtime engine because they will be able
747    to execute CIL executables generated on Windows, and so no recompilation 
748    will be necessary.
749
750 <a name="performance"></a>
751 ** Performance
752
753 Q: How fast will Mono be?
754
755 A: We can not predict the future, but a conservative estimate is that
756    it would be at least `as fast as other JIT engines'.
757
758    We would like to ship various JIT engines with Mono, just like
759    Microsoft has done with their .NET development platform. We could
760    provide a faster, JIT for fast load times but lower performance,
761    and an and an optimizing JIT that would be slower at generating
762    code but produce more optimal output.
763
764    The CIL has some advantages over the Java byte code:  it is really
765    an intermediate representation and there are a number of
766    restrictions on how you can emit CIL code that simplify creating
767    better JIT engines.
768
769    For example, on the CIL, the stack is not really an abstraction
770    available for the code generator to use at will.  Rather, it is a
771    way of creating a postfix representation of the parsed tree.  At
772    any given call point or return point, the contents of the stack are
773    expected to contain the same object types independently of how the
774    instruction was reached.
775
776 <a name="licensing"></a>
777 ** Licensing
778
779 Q: Will I be able to write proprietary applications that run with
780    Mono?
781
782 A: Yes.  The licensing scheme is planned to allow proprietary
783    developers to write applications with Mono.
784    
785 Q: What license or licenses are you using for the Mono Project?
786
787 A: The C# Compiler is released under the terms of the <a 
788    href="http://www.opensource.org/licenses/gpl-license.html">GNU GPL</a>.  The runtime
789    libraries are under the <a
790    href="http://www.opensource.org/licenses/lgpl-license.html">GNU
791    Library GPL</a>.  And the class libraries are released
792    under the terms of the <a
793    href="http://www.opensource.org/licenses/mit-license.html">MIT X11</a>
794    license.
795
796 Q: I would like to contribute code to Mono under a particular
797    license. What licenses will you accept?
798
799 A: We will have to evaluate the licenses for compatibility first,
800    but as a general rule, we will accept the code under the same
801    terms of the "container" module. 
802
803 <a name="patents></a>
804 ** Patents
805
806 Q: Could patents be used to completely disable Mono (either submarine
807    patents filed now, or changes made by Microsoft specifically to
808    create patent problems)?
809
810 A: No.  First, its basic functional capabilities have pre-existed too
811    long to be held up by patents.  The basic components of Mono are
812    technologically equivalent to Sun's Java technology, which has been
813    around for years.  Mono will also implement multi-language and
814    multi-architecture support, but there are previous technologies
815    such as UCSD p-code and ANDF that also support multiple languages
816    using a common intermediate language.  The libraries are similar
817    to other language's libraries, so again, they're too similar to
818    be patentable in large measure.
819
820    However, if Microsoft does patent some technology, then our plan is
821    to either (1) work around it, (2) chop out patented pieces, (3) 
822    find prior art that would render the patent useless.
823  
824    Not providing a patented capability would weaken the
825    interoperability, but it would still provide the free software /
826    open source software community with good development tools, which
827    is the primary reason for developing Mono.  
828
829 <a name="etc"></a> 
830 ** Miscellaneous Questions
831
832 Q: You say that the CLI allows multiple languages to execute on the
833    same environment.  Isn't this the purpose of CORBA?
834
835 A: The key difference between CORBA (and COM) and the CLI is that the
836    CLI allows "data-level interoperability" because every
837    language/component uses the same data layout and memory management.
838
839    This means you can operate directly upon the datatypes that someone
840    else provides, without having to go via their interfaces.  It also
841    means you don't have to "marshall" (convert) parameters (data
842    layouts are the same, so you can just pass components directly) and
843    you don't have to worry about memory managment, because all
844    languages/components share the same garbage collector and address
845    space.  This means much less copying and no need for reference
846    counting.
847
848 Q: Will you support COM?
849
850 A: The runtime will support XPCOM on Unix systems and COM on Windows.
851    Most of the code for dynamic trampolines exists already.
852
853 Q: Will Ximian offer certifications on Mono or related technologies?. 
854
855 A: It's possible. But there is no plan about this. So the short answer is no.
856
857 Q: Are there any Boehm's gc binaries?
858
859 A: Yes. You can find them <a href="http://java.thn.htu.se/~toor/">here</a>
860