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