kick off
[mono.git] / doc / faq
diff --git a/doc/faq b/doc/faq
index 90b918bf477bb44928b08dca2176b5a8c277a71f..00bb0989ccefb4eb82e54189e297c6fb2b8bc046 100644 (file)
--- a/doc/faq
+++ b/doc/faq
@@ -1,21 +1,46 @@
+<a href="#basics">Basics</a><br>
+<a href="#ximian">The Ximian Role in the Mono project</a><br>
+<a href="#gnome">Mono and GNOME</a><br>
+<a href="#gui">Building GUI applications with Mono</a><br>
+<a href="#msft">Mono and Microsoft</a><br>
+<a href="#pnpproject">Mono and the Portable.NET Project</a><br>
+<a href="#webservices">Web Services</a><br>
+<a href="#devel">Development Tools and Issues</a><br>
+<a href="#java">Mono and Java</a><br>
+<a href="#extending">Extending Mono</a><br>
+<a href="#portability">Portability</a><br>
+<a href="#reuse">Reusing Existing Code</a><br>
+<a href="#gcc">Mono and GCC</a><br>
+<a href="#performance">Performance</a><br>
+<a href="#licensing">Licensing</a><br>
+<a href="#patents">Patents</a><br>
+<a href="#etc">Miscellaneous Questions</a><br>
+
+
+<a name="basics"></a>
 ** Basics
 
-Q: Is Mono the same as Microsoft's .NET initiative?
-   
-A: It is not. 
+Q: What is Mono exactly?
+
+A: The Mono Project is an open development initiative sponsored by
+   Ximian that is working to develop an open source, Linux-based
+   version of the Microsoft .NET development platform.  Its objective
+   is to enable Linux developers to build and
+   deploy cross-platform .NET Applications.  The project will
+   implement various technologies developed by Microsoft that have now
+   been submitted to the ECMA for standardization.
 
-   .NET is a company-wide initiative at Microsoft that
-   encompasses many different areas. The .NET development framework,
-   Passport, Biztalk, new server products, and anything that is
-   remotely connected to .NET gets the ".NET-stamping" treatment.
-   Some components of Microsoft's .NET initiative have been announced
-   and some others are in the works.
+Q: What is the difference between Mono and the .NET Initiative?
 
-  Mono is a project to implement several technologies developed by
-   Microsoft that have now been submitted to the ECMA Standards Body.   
+A: The ".NET Initiative" is a somewhat nebulous company-wide effort by
+   Microsoft, one part of which is a cross-platform development
+   framework.  Mono is an implementation of the development framework,
+   but not an implementation of anything else related to the .NET
+   Initiative, such as Passport, software-as-a-service, or
+   corporate rebranding.
 
 Q: What technologies are included in Mono?
-   
+
 A: Mono contains a number of components useful for building new
    software:
 
@@ -30,20 +55,18 @@ A: Mono contains a number of components useful for building new
                * A compiler for the C# language.  In the future we
                  might work on other compilers that target the Common
                  Language Runtime.
-
-                 Windows has compilers that target the
-                 virtual machine from
-                 <a href="http://msdn.microsoft.com/net/thirdparty/default.asp#lang">a
-                 number of languages:</a> Managed C++, Java Script,
-                 Eiffel, Component Pascal, APL, Cobol, Oberon, Perl,
-                 Python, Scheme, Smalltalk, Standard ML, Haskell,
-                 Mercury and Oberon.
        </ul>
 
+
+   Windows has compilers that target the virtual machine from <a
+   href="http://msdn.microsoft.com/net/thirdparty/default.asp#lang">a
+   number of languages:</a> Managed C++, Java Script, Eiffel,
+   Component Pascal, APL, Cobol, Oberon, Perl, Python, Scheme,
+   Smalltalk, Standard ML, Haskell, Mercury and Oberon.
+
    The CLR and the Common Type System (CTS) enables applications and
-   libraries to be written in a number of languages.  Classes and
-   methods created in one language can be used from a different
-   language. 
+   libraries to be written in a collection of different languages that
+   target the byte code
 
    This means for example that if you define a class to do algebraic
    manipulation in C#, that class can be reused from any other
@@ -54,54 +77,69 @@ A: Mono contains a number of components useful for building new
    garbage collection system can be shared across all these languages.
    
 Q: Where can I find the specification for these technologies?
-   
+
 A: You can find the work-in-progress documentation from the T3G ECMA
    group here:
  
    <a href="http://www.dotnetexperts.com">http://www.dotnetexperts.com</a>
 
 Q: Will you implement the .NET Framework SDK class libraries?
-   
+
 A: Yes, we will be implementing the APIs of the .NET Framework SDK
    class libraries. 
 
-Q: What does Mono stand for?
-   
-A: Mono is the word for `Monkey' in Spanish. We like monkeys.
+Q: Will you offer an ECMA-compliant set of class libraries?
 
-Q: When will you ship it?
+A: Eventually we will.  Our current focus is on interoperating
+   with the Microsoft SDK, but we will also offer an ECMA compliant
+   set of libraries. 
+
+Q: What does the name "Mono" mean?
+
+A: Mono is the word for `monkey' in Spanish. We like monkeys.
 
-A: We do not know when the code will be shipped.  The more
-   contributions we get to the project, the sooner it will ship.
+Q: Is Mono usable?
 
-   A rough estimate is that we might be able to run our C# compiler on
-   Linux by the end of the year.  That means running the Windows
-   Executable generated by a Microsoft .NET compiler on the Linux
-   platform.
+A: The JIT engine is usable on Intel x86 machines.  An interpreter
+   can be used on other non-Intel x86 machines.  
 
-   We expect that doing GUI applications will require more work on the
-   class libraries. That could take another six months.
+   The class libraries are not yet mature enough to run real applications,
+   but if you are interested in trying out Mono, you can definetly start
+   testing things out as many programs run.
+
+   The C# compiler has made significant progress, it can even compile
+   itself now, but it can not yet be ran with our class libraries as
+   they are missing some features. 
+
+Q: When will you ship it?
+
+A: It is premature to target a shipdate for the code, but we
+   anticipate that it will be available some time in the middle of
+   2002.
 
 Q: How can I contribute?
 
 A: Check the <a href="contributing.html">contributing</a> section. 
 
-Q: You guys should innovate instead of copying.
+Q: Aren't you just copying someone else's work?
+
+A: We are interested in providing the best tools for programmers to
+   develop applications for Free Operating Systems.  We also want to help
+   provide the interoperability that will allow those systems to fit in
+   with other standards.
+
+   For more background, read the <a href="http://www.go-mono.com/rationale.html">Mono
+   Project white paper</a>.
+   the project.
 
-A: 
-   We have decided that we should spend our limited resources towards
-   implementing an existing specification instead of designing and
-   implementing our own.
 
-   Designing and implementing our own would be possible, but it doesn't make
-   sense to do that just because the specification comes from a
-   proprietary vendor.  
+<a name="ximian"></a> 
 
-** Ximian
+** The Ximian Role in the Mono Project
 
 Q: Why is Ximian working on .NET?
-   
-A: We are interested in providing the best tools for programmers to
+
+A: Ximian is interested in providing the best tools for programmers to
    develop applications for Free Operating Systems.  
 
    For more information, read the project <a
@@ -109,127 +147,235 @@ A: We are interested in providing the best tools for programmers to
 
 Q: Will Ximian be able to take on a project of this size?  
 
-A: Ximian will not be able to taken on the whole project on its own.
-   Mono will be a free software/open source community project, that is
-   the only way we can hope to implement something of this size.  You
-   can <a href="contributing.html">contribute</a> to this effort.
+A: Of course not. Ximian a supporter of the Mono project, but the only way
+   to implement something of this size is for the entire free software
+   community to get involved. Visit the <a href="contributing.html">contributing</a> 
+   page if you'd like to help out.
 
 Q: What pieces will Ximian be working on?
 
-A: We will focus on building a development and execution
-   environment.  
+A: We will devote most of our resources to work on the pieces which are
+   on the critical path to release a development and execution
+   environment. Once the project is at a stage where it is useful in
+   the real world, it will achieve a critical mass of developers to
+   improve it further.
 
-   The idea is to get Mono to a state of that would allow
-   third parties to actually be able to use it real-world development.
+Q: Will Ximian offer Mono commercially?
 
-** Mono and .NET
+A: When Mono is ready to be shipped Ximian will offer a commercial
+   support and services for Mono. 
 
-Q: If applications use Mono, does that mean that I have to pay a service fee?
-   
-A: No.  Mono is not related to Microsoft's initiative of
-   software-as-a-service. 
+Q: Will you wait until Mono is finished?
 
-Q: If you implement .NET, will I depend on Microsoft Passport to run my software?
+A: Mono will ship on various stages as they mature.  Some people
+   require only a subset of the technologies, those will ship first.
 
-A: No.  The .NET Framework is a runtime infrastructure and collection
-   of class libraries.  Passport may be required to access certain web
-   services written for that framework, but only if the programmer
-   chooses Passport as the authentication mechanism.
+   More advanced features will take more time to develop.  A support
+   timeline will be available in June 2002.
 
-Q: Is .NET just a bunch of marketing slogans?
-   
-A: Although the `.NET initiative' is still quite nebulous, The .NET Framework
-   has been available for some time.  Mono is not an implementation of the .NET
-   initiative, just the development framework.
+<a name="gnome"></a> 
+** Mono and GNOME
 
-** Passport
+Q: How is Mono related to GNOME?
 
-Q: Is this a free implementation of Passport?
-   
-A: No.  Passport is part of Microsoft's Hailstorm initiative.  Mono
-   is just a runtime, a compiler and a set of class libraries. 
+A: In a number of ways.  This project was born out of the need of
+   providing improved tools for the GNOME community, and will use
+   existing components that have been developed for GNOME when they
+   are available.  For example, we plan to use Gtk+ and Libart to
+   implement Winforms and the Drawing2D API and are considering
+   GObject support.
 
-Q: Will the System.Web.Security.PassportIdentity class, mean
-   that my software will depend on Passport?
-   
-A: No.  That just means that applications might use that API to
-   contact a Passport site.  
+Q: Has the GNOME Foundation or the GNOME team adopted Mono?
 
-   As long as your application does not use Passport, you will not
-   need Passport.  
+A: Mono is too new to be adopted by those groups. We hope that the
+   tools that we will provide will be adopted by free software
+   programmers including the GNOME Foundation members and the GNOME
+   project generally.
+
+Q: Should GNOME programmers switch over to Mono now?
+
+A: It is still far to early for discussions of "switching over."  No
+   pieces of Mono will be ready within the next six months, and a
+   complete implementation is roughly one year away.
 
-   It might even be possible to implement that class with
-   a set of dummy functions, or use an alternate Passport implementation.
+   We encourage GNOME developers to continue using the existing tools,
+   libraries and components.  Improvements made to GNOME will have an
+   impact on Mono, as they would be the "backend" for various classes.
 
-   We do not know at this time whether the Passport protocol is
-   documented and whether we will be able to talk to
-   passport.com 
+Q: Will Mono include compatibility with Bonobo components? What is the
+   relationship between Mono and Bonobo?
 
-** GNOME
+A: Yes, we will provide a set of classes for implementing and using
+   Bonobo components from within Mono.  Mono should allow you to write
+   Bonobo components more easily, just like .NET on Windows allows you
+   to export .NET components to COM.
 
-Q: How is this related to GNOME?
-   
-A: In a number of ways:
+Q: Does Mono depend on GNOME?
 
-       * Mono will use existing
-         components that have been developed for GNOME (Gtk+, Libart,
-         Gnome-DB and maybe others).
+A: No, Mono does not depend on GNOME.  We use a few packages produced by
+   the GNOME team like the `glib' library.  
 
-       * This project was born out of the need of providing improved
-         tools for the GNOME community. 
+Q: But will I be able to build GNOME applications?
 
-       * We would like to add support to our CLR implementation to
-         deal with GObjects (in GNOME 1.x, they are called
-         GtkObjects), and allow Mono developers to provide GObjects
-         or use and extend existing GObjects.
+A: Yes, we will enable people to write GNOME applications using Mono.
 
-Q: Has the GNOME Foundation or the GNOME team adopted Mono?
+<a name="gui"></a>
+** GUI applications
 
-A: Mono is too new to be adopted by those groups. We hope that the
-   tools that we will provide will be adopted by free software
-   programmers including the GNOME Foundation members and the GNOME
-   project generally.
+Q: Will Mono enable GUI applications to be authored?
 
-Q: Should GNOME programmers switch over to Mono?
+A: Yes, you will be able to build GUI applications.  Indeed, that is our
+   main focus.  We will provide both the Windows.Forms API and the Gtk# API.
 
-A: Mono will not be ready even within the next six months, and a
-   complete implementation is probably one year away.  
+Q: What is the difference between Gtk# and System.Windows.Forms?
 
-   We encourage GNOME developers to continue using the existing tools,
-   libraries and components.  Improvements made to GNOME will have an
-   impact on Mono, as they will provide the "backend" for various
-   classes. 
+A: Gtk# is a set of bindings for the Gtk+ toolkit for C# (and other
+   CIL-enabled languages).  System.Windows.Forms is an API defined
+   by Microsoft to build GUI applications.
 
-Q: Will Mono include compatibility with Bonobo components?
-   
-A: Yes, we will provide a set of classes for implementing and using
-   Bonobo components from within Mono. 
+Q: Will I be able to run my smart clients on systems powered by Mono?
 
-** Mono and the Web
+A: As long as your applications are 100% .NET and do not make use
+   of P/Invoke to call Win32 functions, your smart client applications
+   will run on Mono platforms.
 
-Q: Is Mono a way of running Java applets?
+<a name="msft"></a>
+** Mono and Microsoft
 
-A: No.
+Q: Is Microsoft helping Ximian with this project?
 
-** Web Services
+A: No. Ximian CTO Miguel de Icaza had a friendly conversation with
+   Microsoft software architect David Stutz, but that's about the
+   extent of the contact. Microsoft is interested in other
+   implementations of .NET and are willing to help make the ECMA spec
+   more accurate for this purpose.
+
+   Ximian representatives have also spoken with Sam Ruby at the ECMA
+   TG3 committee to discuss the same issues.
+
+Q: Is Microsoft or Corel paying Ximian to do this?
 
-Q: Is Mono just a new way of writing Web Services?
-   
 A: No.
 
-Q: If this implements the SDK classes, will I be able to write and
-   execute .NET Web Services with this?
+Q: Do you fear that Microsoft will change the spec and render Mono
+   useless?
+
+A: No.  Microsoft proved with the CLI and the C# language that it was
+   possible to create a powerful foundation for many languages to
+   interoperate.  We will always have that.  
+
+   Even if changes happened in the platform which were undocumented,
+   the existing platform would a value on its own.
+
+Q: Are you writing Mono from the ECMA specs?
+
+A: Yes, we are writing them from the ECMA specs and the published
+   materials in print about .NET.
+
+Q: If my applications use Mono, will I have to pay a service fee?
+
+A: No.  Mono is not related to Microsoft's initiative of
+   software-as-a-service.
+
+Q: Is the Mono Project is related to the Microsoft Hailstorm effort?  Is
+   Ximian endorsing Hailstorm?  
+
+A: No.  The Mono Project is focused on providing a compatible set of
+   tools for the Microsoft .NET development platform.  It does not
+   address, require, or otherwise endorse the MS Passport-based
+   Hailstorm single sign-on system that is part of Windows XP and
+   other services.
+
+Q: Will Mono or .NET applications depend on Microsoft Passport?
+
+A: No. MS Passport is unrelated to running .NET compatible applications
+   produced with the Mono tools.  The only thing you will need is a
+   just-in-time compiler (JIT).
+
+Q: What is a 100% .NET application?
+
+A: A `100% .NET application' is one that only uses the APIs defined
+   under the System namespace and does not use PInvoke.  These
+   applications would in theory run unmodified on Windows, Linux,
+   HP-UX, Solaris, MacOS X and others. 
+
+Q: If Microsoft will release a port of their .NET platform under the
+   `Shared Source' license, why should I bother with anything else?
+
+A: The Shared Source implementation will be expensive and its uses
+   will be tightly restricted, especially for commercial use. We are
+   working towards an implementation that will grant a number of
+   important rights to recipients: use for any purpose,
+   redistribution, modification, and redistribution of modifications.
+
+   This is what we call <a
+   href="http://www.gnu.org/philosophy/free-sw.html">Free Software</a>
+
+Q: Is Mono a free implementation of Passport?
+
+A: No. Mono is just a runtime, a compiler and a set of class
+   libraries.
+
+Q: Will the System.Web.Security.PassportIdentity class mean
+   that my software will depend on Passport?
    
-A: Yes, you will.
+A: No.  Applications may use that API to contact a Passport site, but
+   are not required to do so.
+
+   As long as your application does not use Passport, you will not
+   need Passport.  
+
+Q: Will Mono running on Linux make Passport available for Linux?
+
+A: No.  However, the Passport toolkit for Linux-based web servers is
+   available from Microsoft.
+
+Q: Will Mono allow me to run Microsoft Office on Linux?
+
+A: No, it will not.  Microsoft Office is a Windows application.  To
+   learn more about running Windows applications on Intel Unix systems
+   refer to <a href="http://www.winehq.com">the Wine Project</a>.
+
+<a name="pnpproject"></a>
+** Mono and Portable.NET
+
+Q: What are the differences between Mono and Portable.NET?
+
+A: Most of Mono is being written using C#, with only
+   a few parts written in C (The JIT engine, the runtime, the
+   interfaces to the garbage collection system).  The Portable.NET
+   Project is using C for development.
+
+<a name="webservices"></a>
+** Web Services
 
-   When the project is finished, you will be able to use the same
-   technologies that are available through the .NET Framework SDK on
-   Windows to write Web Services.
+Q: How is Mono related to Web Services?
 
-Q: What about Soup?
+A: Mono is only related to Web Services in that it will implement the
+   same set of classes that have been authored in the .NET Framework
+   to simplify and streamline the process of building Web Services.
 
-A: Soup is a library for GNOME applications to create SOAP server and
-   SOAP clients.  You can browse <a href=Soup here
+   But most importantly, Mono is an Open Source implementation of the
+   .NET Framework.
+
+Q: Can I author Web Services with Mono?
+
+A: You will be able to write Web Services on .NET that run on Mono and
+   viceversa. 
+
+Q: If Mono implements the SDK classes, will I be able to write and
+   execute .NET Web Services with it?
+   
+A: Yes.  When the project is finished, you will be able to use the
+   same technologies that are available through the .NET Framework SDK
+   on Windows to write Web Services.
+
+Q: What about Soup?  Can I use Soup without Mono?
+
+A: Soup is a library for GNOME applications to create SOAP servers and
+   SOAP clients, and can be used without Mono.  You can browse the
+   source code for soup using <a
+   href="http://cvs.gnome.org/bonsai">GNOME's Bonsai</a>.
 
 Q: Can I use CORBA?
 
@@ -247,7 +393,12 @@ Q: Can I serialize my objects to other things other than XML?
 A: Yes, although the serializing tools have not yet been planned, and
 you would probably have to implement them yourself.
 
-** Development Tools 
+Q: Will Mono use ORBit?
+
+A: No. Mono will be using a new implementation of CORBA that isn't still started. 
+
+<a name="devel"></a>
+** Development Tools and Issues
 
 Q: Will it be possible to use the CLI features without using bytecodes
    or the JIT?
@@ -260,16 +411,36 @@ A: Yes. The CLI engine will be made available as a shared library.
 
 Q: Will you have new development tools?
 
-A: Hopefully Free Software enthusiasts will contribute tools to
+A: With any luck, Free Software enthusiasts will contribute tools to
    improve the developer environment.  These tools could be developed
-   initially using Microsoft implementation of the CLI and then
+   initially using the Microsoft implementation of the CLI and then
    executed later with Mono.
 
+Q: What kind of rules make the Common Intermediate Language useful for
+   JITers?
+
+A: The main rule is that the stack in the CLI is not a general purpose
+   stack.   You are not allowed to use it for other purposes than
+   computing values and passing arguments to functions or return
+   values.  
+
+   At any given call or return instruction, the types on the stack
+   have to be the same independently of the flow of execution of your
+   code. 
+
+Q: Is it true that the CIL is ideal for JITing and not efficient for
+   interpreters?
+
+A: The CIL is better suited to be JITed than JVM byte codes, but you
+   can interpret them as trivially as you can interpret JVM byte
+   codes. 
+
+<a name="java">
 ** Mono and Java
    
-Q: What about using Java?  After all there are many languages that
+Q: Why don't you use Java?  After all, there are many languages that
    target the Java VM.
-   
+
 A: You can get very good tools for doing Java development on free
    systems right now.  <a href="http://www.redhat.com">Red Hat</a> has
    contributed a <a href="http://gcc.gnu.org">GCC</a> <a
@@ -286,18 +457,36 @@ A: You can get very good tools for doing Java development on free
    wide variety of programming languages, and has a set of rules
    designed to be optimal for JITers.
 
-Q: What kind of rules make the Common Intermediate Language useful for
-   JITers?
+Q: Could Java target the CLI?
 
-A: The main rule is that the stack in the CLI is not a general purpose
-   stack.   You are not allowed to use it for other purposes than
-   computing values and passing arguments to functions or return
-   values.  
+A: Yes, Java could target the CLI.  We have details on a <a
+   href="ideas.html#guavac">project</a> that someone could take on to
+   make this happen.  
 
-   At any given call or return instruction, the types on the stack
-   have to be the same independently of the flow of execution of your
-   code. 
+   Microsoft has an implemenation of the Java language called J# that
+   can target the CIL execution engine. 
+
+Q: Is it possible to write a JVM byte code to CIL convertor?
+
+A: Yes, it is possible.  Here are a few starting point:
+
+       <ul>
+               * A byte code representation is really a flattened forest of
+                 trees.  Look at the Mono JIT engine to see how we compute
+                 the basic blocks (this is used to figure out the "trees").
+
+                 The forest is just an array of trees.
+
+                 Indeed, run the JIT engine with -d (mono -d prog.exe) and
+                 you will see how these trees look like.
+
+                 You will have to do something similar for Java.
 
+               * Each "forest of trees" has a meaning.  This meaning can now
+                 be translated into the equivalent "meaning" in CLR-land.
+       </ul>
+
+<a name="extending"></a>
 ** Extending Mono
 
 Q: Would you allow other classes other than those in the
@@ -306,12 +495,28 @@ Q: Would you allow other classes other than those in the
 A: Yes.  The Microsoft class collection is very big, but it is by no
    means complete.  It would be nice to have a port of `Camel' (the
    Mail API used by Evolution inspired by Java Mail) for Mono
-   applications.
+   applications.  
+
+   You might also want to look into implementing CORBA for Mono.  Not
+   only because it would be useful, but because it sounds like a fun
+   thing to do, given the fact that the CLI is such a type rich
+   system. 
 
    For more information on extending Mono, see our <a
    href="ideas.html">ideas</a> page.
 
-** Mono and portability
+Q: Do you plan to Embrace and Extend .NET?
+
+A: Embracing a good technology is good.  Extending technologies in
+   incompatible ways is bad for the users, so we do not plan on 
+   extending the technologies.
+
+   If you have innovative ideas, and want to create new classes, we 
+   encourage you to make those classes operate correctly well in both
+   Mono and .NET
+
+<a name="portability"></a>
+** Portability
 
 Q: Will Mono only work on Linux?
 
@@ -325,19 +530,35 @@ A: Our main intention at Ximian is to be able to develop GNOME
    applications with Mono, but if you are interested in providing a
    port of the Winform classes to other platforms (frame buffer or
    MacOS X for example), we would gladly integrate them, as long
-   they are under a Free Software License. 
+   they are under an open source license.  
+
+Q: Will Mono run on Windows?
+
+A: We hope so.  Currently some parts of Mono only run on Windows
+   (the C# compiler is a .NET executable) and other parts have only
+   been compiled on Linux, but work on Windows with Cygwin.
+
+Q: Will Mono depend on GNOME?
+
+A: It will depend only if you are using a particular assembly (for
+   example, for doing GUI applications).  If you are just interested
+   in Mono for implementing a `Hello World Enterprise P2P Web
+   Service', you will not need any GNOME components.
 
-** Reusing existing Code
+<a name="reuse"></a>
+** Reusing Existing Code
 
 Q: What projects will you reuse or build upon?
-   
+
 A: We want to get Mono in the hands of programmers soon.  We are
    interested in reusing existing open source software.
 
 Q: What about Intel's research JIT framework, ORP?
-   
+
 A: At this time, we are investigating whether we can use elements of
-   ORP for Mono. 
+   ORP for Mono.   ORP is a research JIT engine that has a clearly
+   defined API that splits the JIT from the GC system and the actual
+   byte code implementation.
 
 Q: What about using GNU Lightning?
 
@@ -345,36 +566,133 @@ A: We are also researching <a
    href="http://www.gnu.org/software/lightning/lightning.html">GNU
    Lightning</a>.
 
-** Ximian and Microsoft
+<a name="gcc"></a>
+** Mono and GCC
 
-Q: Didn't Miguel de Icaza say that `Unix Sucks'?
-   
-A: Yes, he did, as a catch phrase in his opening remark on the Ottawa
-   Linux Symposium.  His talk focused on various ways to improve Unix.
+Q: Are you working on a GCC front-end to C#? A GCC backend that will
+   generate CIL images? What about making a front-end to GCC that
+   takes CIL images and generates native code?
+
+A: We are currently seeking volunteers for those projects.
+   Visit the <a href="contributing.html">contributing</a> section if
+   you are interested.
+
+Q: But would this work around the GPL in the GCC compiler and allow
+   people to work on non-free front-ends?
+
+A: People can already do this by targeting the JVM byte codes (there
+   are about 130 compilers for various languages that target the JVM).
+
+Q: Why are you writing a JIT engine instead of a front-end to GCC?
+
+A: We want the JIT engine and runtime engine because they will be able
+   to execute CIL executables generated on Windows, and so no recompilation 
+   will be necessary.
 
-   There is a paper describing some ways to improve Unix at:
+<a name="performance"></a>
+** Performance
+
+Q: How fast will Mono be?
+
+A: We can not predict the future, but a conservative estimate is that
+   it would be at least `as fast as other JIT engines'.
+
+   We would like to ship various JIT engines with Mono, just like
+   Microsoft has done with their .NET development platform. We could
+   provide a faster, JIT for fast load times but lower performance,
+   and an and an optimizing JIT that would be slower at generating
+   code but produce more optimal output.
+
+   The CIL has some advantages over the Java byte code:  it is really
+   an intermediate representation and there are a number of
+   restrictions on how you can emit CIL code that simplify creating
+   better JIT engines.
+
+   For example, on the CIL, the stack is not really an abstraction
+   available for the code generator to use at will.  Rather, it is a
+   way of creating a postfix representation of the parsed tree.  At
+   any given call point or return point, the contents of the stack are
+   expected to contain the same object types independently of how the
+   instruction was reached.
+
+<a name="licensing"></a>
+** Licensing
+
+Q: Will I be able to write proprietary applications that run with
+   Mono?
+
+A: Yes.  The licensing scheme is planned to allow proprietary
+   developers to write applications with Mono.
+   
+Q: What license or licenses are you using for the Mono Project?
+
+A: The C# Compiler is released under the terms of the <a 
+   href="http://www.opensource.org/licenses/gpl-license.html">GNU GPL</a>.  The runtime
+   libraries are under the <a
+   href="http://www.opensource.org/licenses/lgpl-license.html">GNU
+   Library GPL</a>.  And the class libraries are released
+   under the terms of the <a
+   href="http://www.opensource.org/licenses/mit-license.html">MIT X11</a>
+   license.
+
+Q: I would like to contribute code to Mono under a particular
+   license. What licenses will you accept?
+
+A: We will have to evaluate the licenses for compatibility first,
+   but as a general rule, we will accept the code under the same
+   terms of the "container" module. 
+
+<a name="patents></a>
+** Patents
+
+Q: Could patents be used to completely disable Mono (either submarine
+   patents filed now, or changes made by Microsoft specifically to
+   create patent problems)?
+
+A: No.  First, its basic functional capabilities have pre-existed too
+   long to be held up by patents.  The basic components of Mono are
+   technologically equivalent to Sun's Java technology, which has been
+   around for years.  Mono will also implement multi-language and
+   multi-architecture support, but there are previous technologies
+   such as UCSD p-code and ANDF that also support multiple languages
+   using a common intermediate language.  The libraries are similar
+   to other language's libraries, so again, they're too similar to
+   be patentable in large measure.
+
+   However, if Microsoft does patent some technology, then our plan is
+   to either (1) work around it, (2) chop out patented pieces, (3) 
+   find prior art that would render the patent useless.
+   Not providing a patented capability would weaken the
+   interoperability, but it would still provide the free software /
+   open source software community with good development tools, which
+   is the primary reason for developing Mono.  
 
-       <a href="http://primates.ximian.com/~miguel/bongo-bong.html">
-        http://primates.ximian.com/~miguel/bongo-bong.html</a>
+<a name="etc"></a> **
+Miscellaneous Questions
 
-Q: Didn't Ximian's Miguel work for Microsoft?
+Q: You say that the CLI allows multiple languages to execute on the
+   same environment.  Isn't this the purpose of CORBA?
 
-A: Actually, Nat Friedman (Ximian's co-founder) did work as an
-   intern for Microsoft for one summer but Miguel did not.
+A: The key difference between CORBA (and COM) and the CLI is that the
+   CLI allows "data-level interoperability" because every
+   language/component uses the same data layout and memory management.
 
-Q: Did Nat and Miguel meet at Microsoft?
+   This means you can operate directly upon the datatypes that someone
+   else provides, without having to go via their interfaces.  It also
+   means you don't have to "marshall" (convert) parameters (data
+   layouts are the same, so you can just pass components directly) and
+   you don't have to worry about memory managment, because all
+   languages/components share the same garbage collector and address
+   space.  This means much less copying and no need for reference
+   counting.
 
-A: They met online on the Linux IRC network;  They met in person for
-   the first time in 1997.
+Q: Will you support COM?
 
-** Acronyms
+A: The runtime will support XPCOM on Unix systems and COM on Windows.
+   Most of the code for dynamic trampolines exists already.
 
-Q: What is the difference between CLR (Common Language Runtime) and
-   CLI (Common Language Infrastructure)?
+Q: Will Ximian offer certifications on Mono or related technologies?. 
 
-A: CLI is the specification of an execution system.  The Microsoft
-   implementation of this specification is named CLR. 
+A: It's possible. But there is no plan about this. So the short answer is no.
 
-   Unless we come up with our own acronym, we could just call ours
-   also CLR, just because it would do exactly the same thing the
-   Microsoft implementation does.