Flush
[mono.git] / doc / faq
diff --git a/doc/faq b/doc/faq
index d1a2bd436c726bf413ba6254de3015ca6e9ae540..e08bae097ba8717ad1aa64923dbe593295bd96b0 100644 (file)
--- a/doc/faq
+++ b/doc/faq
@@ -5,6 +5,7 @@
 <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="#asp">Mono and ASP.NET</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>
@@ -13,6 +14,7 @@
 <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>
 
 
@@ -22,9 +24,9 @@
 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
+   Ximian that is working to develop an open source, Unix
    version of the Microsoft .NET development platform.  Its objective
-   is to enable Linux developers to build and
+   is to enable Unix 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.
@@ -102,19 +104,26 @@ Q: Is Mono usable?
 A: The JIT engine is usable on Intel x86 machines.  An interpreter
    can be used on other non-Intel x86 machines.  
 
-   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. 
+   The class libraries are mature enough to run some real applications
+   (the compiler for instance, and every day more and more applications
+   are natively developed with Mono).
 
 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.
+A: Different parts of Mono will achieve usability at different stages,
+   once we are comfortable with the compiler, we will release "Mono Core",
+   which contains everything needed to develop applications with the base
+   class libraries.  This should be available at some point during 2002.
+
+   Other higher level class libraries (ASP.NET, ADO.NET, Windows.Forms) will
+   be released when they become stable. 
+
+Q: What major components will you include in Mono?
+
+A: Hopefully everything that Microsoft ships on their Framework
+   (ADO.NET, ASP.NET, Windows.Forms), and
+   we encourage third party developers to create reusable components that
+   work on both Mono and Windows.
 
 Q: How can I contribute?
 
@@ -131,6 +140,10 @@ A: We are interested in providing the best tools for programmers to
    Project white paper</a>.
    the project.
 
+Q: Miguel said once that Mono was being implemented in COBOL. Is that true?.
+
+A: No. It was a joke.
+
 
 <a name="ximian"></a> 
 
@@ -164,6 +177,13 @@ Q: Will Ximian offer Mono commercially?
 A: When Mono is ready to be shipped Ximian will offer a commercial
    support and services for Mono. 
 
+Q: Does Ximian provide consulting services around Mono?
+
+A: Yes, Ximian does provide consulting services around Mono to
+   make it suitable to your needs.  Porting the runtime engine,
+   customizing it, working on specific classes or tuning the code
+   for your particular needs. 
+
 Q: Will you wait until Mono is finished?
 
 A: Mono will ship on various stages as they mature.  Some people
@@ -224,7 +244,7 @@ A: Yes, we will enable people to write GNOME applications using Mono.
 Q: Will Mono enable GUI applications to be authored?
 
 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# AP(I.
+   main focus.  We will provide both the Windows.Forms API and the Gtk# API.
 
 Q: What is the difference between Gtk# and System.Windows.Forms?
 
@@ -238,6 +258,23 @@ 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: Where can I learn mora about Gtk#?
+
+A: The following <a href="http://gtk-sharp.sourceforge.net>link</a> sends you to the page of the project.
+
+Q: What can I do with Gtk#?. 
+
+A: Gtk# is becoming very usable and you can create applications and
+   applets like those you see in a GNOME desktop environment. It's 
+   easy to install so it's worth a try. 
+
+Q: How can I compile my HelloWorld.cs which uses Gtk#?.
+
+A: Try: mcs --unsafe -o HelloWorld.exe -r glib-sharp -r pango-sharp -r
+        atk-sharp -r gdk-sharp -r gtk-sharp -r gdk-imaging-sharp
+        HelloWorld.cs
+
+
 <a name="msft"></a>
 ** Mono and Microsoft
 
@@ -342,8 +379,48 @@ 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.
+   interfaces to the garbage collection system).  
+
+   It is easier to describe what is unique about Mono:
+   <ul>
+     <li> A self-hosting C# compiler written in C#, which is clean, easy
+          to maintain.
+
+     <li> A multi-platform runtime engine: both a JIT engine and an
+          interpreter exist.  The JIT engine runs currently on x86
+          systems, while the interpreter works on Sparc, StrongARM and
+          PowerPC systems.  
+
+     <li> Supports Linux, Windows and Solaris at this point.
+
+     <li> The JIT engine is written using a portable instruction
+          selector which not only generates good code (we are told
+          that we are faster than Rotor, but it is hard to tell) but
+          is also the foundation to retarget the JIT engine to other
+          systems.  
+
+          The system employed is described in various compiler
+          books and it is very similar to what is described in the 
+          book that covers LCC, the Ansi C retargetable C compiler.
+
+     <li> The JIT engine supports inlining, constant folding and propagation,
+
+     <li> Full support for remoting in the runtime, but the class 
+          libraries are still behind.
+
+     <li> The C# compiler, the JIT engine and the class libraries are
+          mature enough that the whole system is self-hosting, ie, that
+          it can be fully developed with itself at this point.
+
+     <li> We are not yet done, and there is a lot of work left to be
+          done
+
+     <li> We have a great community of developers, without which Mono
+          would not be possible.
+
+     <li> We will provide an ahead of time compilation mode in the 
+          future.
+   </ul>
 
 <a name="webservices"></a>
 ** Web Services
@@ -392,6 +469,10 @@ 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.
 
+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
 
@@ -430,6 +511,54 @@ 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. 
 
+Q: Isn't it a little bit confusing to have the name of "XSP" (the same 
+   as in the Apache Project) for the ASP.NET support in Mono?.
+
+A: In Mono, xsp is just the name of the C# code generator for ASP.NET 
+   pages. In the Apache Project, it is a term for the "eXtensible Server 
+   Pages" technology so as they are very different things, they don't 
+   conflict.
+
+Q: What about using something like Jabber instead of the System.Messaging 
+   namespace?.
+
+A: In short, MSMQ is not something like Jabber, but asynchronous messaging 
+   through queues. Usefull queues do more than serialize messages, they are 
+   also platform bridges.
+
+Q: Are you supporting XMLDocument and relatives?.
+
+A: Currently, we aren't implementing them yet. It would require updates to 
+   most of the XmlNode derivatives so it's not a trivial task. We are 
+   currently focusing on getting XPath support working. 
+
+Q: Is there any plan to develop an aspx server for Mono?.
+
+A: The webserver turned out to be very simple compared to the rest of the 
+   work. Gonzalo has got the page generator mostly done (a module called 
+   xsp, who has nothing to do with the XSP term used in the Apache Project).
+   Patrik has done a lot of the work to get the ProcessRequest to work.
+   You can try to help in the final touches to the System.Web classes and
+   writing regression tests for the widgets we have.
+
+<a name="asp">
+** Mono and ASP.NET
+
+Q: Is Mono supporting ASP.NET?
+
+A: Yes. The development of the support for ASP.NET comes in various stages, 
+   here is what Gonzalo has been working on: 1. The Parser. 2. Getting the 
+   parser to generate output compatible with ASP.NET. 3. Running the sample 
+   output with the real Microsoft runtime but using our generated page. 4. 
+   Running the sample with our classes with the .NET runtime. 5. Running 
+   our sample code with our classes with our runtime. This is the process 
+   we are following. Currently Gonzalo has reached point 3.
+
+Q: I have heard that their is a webserver developed with Mono. Is it true?.
+
+A: Yes. You can find it <a href="http://home.adelphia.net/~aljames/webserver.htm">here</a>
+   Read the README for more info.
+
 <a name="java">
 ** Mono and Java
    
@@ -461,6 +590,38 @@ A: Yes, Java could target the CLI.  We have details on a <a
    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>
+
+Q: Could mono become a hybrid cil/java platform?
+
+A: No. It is quite far from the philosophy of the project. The idea of Mono 
+   is, to have only _one_ VM, on which all can run. And if there existing a 
+   binary-converter from Java-.class to IL and if there existing something 
+   like J-Sharp on Mono, you can write programs in Java, which than can run 
+   on Mono. You do not need two bindings (like your example: GTK-Sharp _and_ 
+   Java-Gnome). You need only _one_ of it (GTK-Sharp). Thats the idea of Mono.
+   An other point is, that there are no people, who use OpenSource-JVMs. They 
+   all prefer Suns original. But for Unix there don't exist a .NET-Framework. 
+   So it is possible, that in the future Mono is the standard .NET for unixes.
+
 <a name="extending"></a>
 ** Extending Mono
 
@@ -499,7 +660,7 @@ A: Currently, we are doing our work on Linux-based systems and
    Windows.  We do not expect many Linux-isms in the code, so it
    should be easy to port Mono to other UNIX variants.   
 
-Q: What about Mono on non X-based systems?
+Q: What about Mono on non Linux-based systems?
 
 A: Our main intention at Ximian is to be able to develop GNOME
    applications with Mono, but if you are interested in providing a
@@ -507,11 +668,27 @@ A: Our main intention at Ximian is to be able to develop GNOME
    MacOS X for example), we would gladly integrate them, as long
    they are under an open source license.  
 
-Q: Will Mono run on Windows?
+Q: What operating systems/CPUs do you support
+
+A: Mono currently runs on Linux, Windows, Solaris and FreeBSD.
+   There is a JIT engine available for x86 processors that can
+   generate code and optimizations tailored for a particular CPU.
+
+   Interpreters exist for the SPARC, PowerPC and StrongARM cpus.
+
+Q: Does Mono run on Windows?
+
+A: Yes.   The Compiler and the runtime both run on Windows.
+
+Q: When will mono and mcs compile on Linux?.
+
+A: That happend a long time ago. Know you can download and compile 
+   them or even install them from already made binary packages for 
+   Windows and for Linux (RPM/DEB).
 
-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 I require Cygwin to run mono?
+
+A: No.  While you'll need it to compile it, it runs without cygwin and does not even require cygwin1.dll
 
 Q: Will Mono depend on GNOME?
 
@@ -535,11 +712,17 @@ A: At this time, we are investigating whether we can use elements of
    defined API that splits the JIT from the GC system and the actual
    byte code implementation.
 
+   We are using some pieces of ORP (Their code generation interface)
+   and we use it as a source of inspiration for optimizations.  Paolo
+   and Dietmar consider ORP as being one of the best JIT engines out
+   there (and their research work and papers are very useful if you are
+   interested in JIT technology).
+
 Q: What about using GNU Lightning?
 
-A: We are also researching <a
-   href="http://www.gnu.org/software/lightning/lightning.html">GNU
-   Lightning</a>.
+A: We are not using GNU Lightning.  Our JIT is using an instruction
+   selector based on tree-pattern matching, and a code generation
+   interface that is very tied to the current architecture.
 
 <a name="gcc"></a>
 ** Mono and GCC
@@ -617,7 +800,33 @@ 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="etc"></a>
+<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 name="etc"></a> 
 ** Miscellaneous Questions
 
 Q: You say that the CLI allows multiple languages to execute on the
@@ -641,3 +850,11 @@ Q: Will you support COM?
 A: The runtime will support XPCOM on Unix systems and COM on Windows.
    Most of the code for dynamic trampolines exists already.
 
+Q: Will Ximian offer certifications on Mono or related technologies?. 
+
+A: It's possible. But there is no plan about this. So the short answer is no.
+
+Q: Are there any Boehm's gc binaries?
+
+A: Yes. You can find them <a href="http://java.thn.htu.se/~toor/">here</a>
+