d1c48690fced3c164638e1798999bc0dfbda0671
[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="#asp">Mono and ASP.NET</a><br>
9 <a href="#ado">Mono and ADO.NET</a><br>
10 <a href="#monodoc">MonoDoc</a><br>
11 <a href="#devel">Development Tools and Issues</a><br>
12 <a href="#java">Mono and Java</a><br>
13 <a href="#extending">Extending Mono</a><br>
14 <a href="#portability">Portability</a><br>
15 <a href="#reuse">Reusing Existing Code</a><br>
16 <a href="#gcc">Mono and GCC</a><br>
17 <a href="#performance">Performance</a><br>
18 <a href="#licensing">Licensing</a><br>
19 <a href="#patents">Patents</a><br>
20 <a href="#etc">Miscellaneous Questions</a><br>
21 <a href="#problems">Mono Common Problems</a><br>
22
23 A <a
24 href="http://www.es.gnome.org/documentacion/articulos/mono-puf/mono-puf/">Spanish
25 translation</a> is also available
26
27 <a name="basics"></a>
28 ** Basics
29
30 Q: What is Mono exactly?
31
32 A: The Mono Project is an open development initiative sponsored by
33    Ximian that is working to develop an open source, Unix
34    version of the Microsoft .NET development platform.  Its objective
35    is to enable Unix developers to build and
36    deploy cross-platform .NET Applications.  The project will
37    implement various technologies developed by Microsoft that have now
38    been submitted to the ECMA for standardization.
39
40 Q: What is the difference between Mono and the .NET Initiative?
41
42 A: The ".NET Initiative" is a somewhat nebulous company-wide effort by
43    Microsoft, one part of which is a cross-platform development
44    framework.  Mono is an implementation of the development framework,
45    but not an implementation of anything else related to the .NET
46    Initiative, such as Passport, software-as-a-service, or
47    corporate re-branding.
48
49 Q: What technologies are included in Mono?
50
51 A: Mono contains a number of components useful for building new
52    software:
53
54         <ul>
55                 * A Common Language Infrastructure (CLI) virtual
56                   machine that contains a class loader, Just-in-time
57                   compiler, and a garbage collecting runtime.
58
59                 * A class library that can work with any language
60                   which works on the CLR.
61
62                 * A compiler for the C# language.  In the future we
63                   might work on other compilers that target the Common
64                   Language Runtime.
65         </ul>
66
67
68    Windows has compilers that target the virtual machine from <a
69    href="http://msdn.microsoft.com/net/thirdparty/default.asp#lang">a
70    number of languages:</a> Managed C++, Java Script, Eiffel,
71    Component Pascal, APL, Cobol, Perl, Python, Scheme,
72    Smalltalk, Standard ML, Haskell, Mercury and Oberon.
73
74    The CLR and the Common Type System (CTS) enables applications and
75    libraries to be written in a collection of different languages that
76    target the byte code
77
78    This means for example that if you define a class to do algebraic
79    manipulation in C#, that class can be reused from any other
80    language that supports the CLI.  You could create a class in C#,
81    subclass it in C++ and instantiate it in an Eiffel program. 
82
83    A single object system, threading system, class libraries, and
84    garbage collection system can be shared across all these languages.
85    
86 Q: Where can I find the specification for these technologies?
87
88 A: You can find the information here:
89  
90
91    C# <a href="http://www.ecma.ch/ecma1/STAND/ecma-334.htm">http://www.ecma.ch/ecma1/STAND/ecma-334.htm</a>
92
93    CLI <a href="http://www.ecma.ch/ecma1/STAND/ecma-335.htm">http://www.ecma.ch/ecma1/STAND/ecma-335.htm</a>
94
95 Q: Will you implement the .NET Framework SDK class libraries?
96
97 A: Yes, we will be implementing the APIs of the .NET Framework SDK
98    class libraries. 
99
100 Q: Will you offer an ECMA-compliant set of class libraries?
101
102 A: Eventually we will.  Our current focus is on inter-operating
103    with the Microsoft SDK, but we will also offer an ECMA compliant
104    set of libraries. 
105
106 Q: What does the name "Mono" mean?
107
108 A: Mono is the word for `monkey' in Spanish. We like monkeys.
109
110 Q: Is Mono usable?
111
112 A: The JIT engine is usable on Intel x86 machines.  An interpreter
113    can be used on other non-Intel x86 machines.  
114
115    The class libraries are mature enough to run some real applications
116    (the compiler for instance, and every day more and more applications
117    are natively developed with Mono).
118
119 Q: When will you ship it?
120
121 A: Different parts of Mono will achieve usability at different stages,
122    once we are comfortable with the compiler, we will release "Mono Core",
123    which contains everything needed to develop applications with the base
124    class libraries.  This should be available at some point during 2002.
125
126    Other higher level class libraries (ASP.NET, ADO.NET) will
127    be released when they become stable. 
128
129 Q: What major components will you include in Mono?
130
131 A: Hopefully everything that Microsoft ships on their Framework
132    (ADO.NET, ASP.NET), and
133    we encourage third party developers to create reusable components that
134    work on both Mono and Windows.
135
136 Q: How can I contribute?
137
138 A: Check the <a href="contributing.html">contributing</a> section. 
139
140 Q: Aren't you just copying someone else's work?
141
142 A: We are interested in providing the best tools for programmers to
143    develop applications for Free Operating Systems.  We also want to help
144    provide the interoperability that will allow those systems to fit in
145    with other standards.
146
147    For more background, read the <a href="http://www.go-mono.com/rationale.html">Mono
148    Project white paper</a>.
149    the project.
150
151 Q: Miguel said once that Mono was being implemented in COBOL. Is that true?.
152
153 A: No. It was a joke.
154
155
156 <a name="ximian"></a> 
157
158 ** The Ximian Role in the Mono Project
159
160 Q: Why is Ximian working on .NET?
161
162 A: Ximian is interested in providing the best tools for programmers to
163    develop applications for Free Operating Systems.  
164
165    For more information, read the project <a
166    href="rationale.html">rationale</a> page.
167
168 Q: Will Ximian be able to take on a project of this size?  
169
170 A: Of course not. Ximian a supporter of the Mono project, but the only way
171    to implement something of this size is for the entire free software
172    community to get involved. Visit the <a href="contributing.html">contributing</a> 
173    page if you'd like to help out.
174
175 Q: What pieces will Ximian be working on?
176
177 A: We will devote most of our resources to work on the pieces which are
178    on the critical path to release a development and execution
179    environment. Once the project is at a stage where it is useful in
180    the real world, it will achieve a critical mass of developers to
181    improve it further.
182
183 Q: Will Ximian offer Mono commercially?
184
185 A: When Mono is ready to be shipped Ximian will offer a commercial
186    support and services for Mono. 
187
188 Q: Does Ximian provide consulting services around Mono?
189
190 A: Yes, Ximian does provide consulting services around Mono to
191    make it suitable to your needs.  Porting the runtime engine,
192    customizing it, working on specific classes or tuning the code
193    for your particular needs. 
194
195 Q: Will you wait until Mono is finished?
196
197 A: Mono will ship on various stages as they mature.  Some people
198    require only a subset of the technologies, those will ship first.
199
200    More advanced features will take more time to develop.  A support
201    time line will be available in June 2002.
202
203 <a name="gnome"></a> 
204 ** Mono and GNOME
205
206 Q: How is Mono related to GNOME?
207
208 A: In a number of ways.  This project was born out of the need of
209    providing improved tools for the GNOME community, and will use
210    existing components that have been developed for GNOME when they
211    are available.  For example, we plan to use Gtk+ and Libart to
212    implement Winforms and the Drawing2D API and are considering
213    GObject support.
214
215 Q: Has the GNOME Foundation or the GNOME team adopted Mono?
216
217 A: Mono is too new to be adopted by those groups. We hope that the
218    tools that we will provide will be adopted by free software
219    programmers including the GNOME Foundation members and the GNOME
220    project generally.
221
222 Q: Should GNOME programmers switch over to Mono now?
223
224 A: It is still far to early for discussions of "switching over."  No
225    pieces of Mono will be ready within the next six months, and a
226    complete implementation is roughly one year away.
227
228    We encourage GNOME developers to continue using the existing tools,
229    libraries and components.  Improvements made to GNOME will have an
230    impact on Mono, as they would be the "back-end" for various classes.
231
232 Q: Will Mono include compatibility with Bonobo components? What is the
233    relationship between Mono and Bonobo?
234
235 A: Yes, we will provide a set of classes for implementing and using
236    Bonobo components from within Mono.  Mono should allow you to write
237    Bonobo components more easily, just like .NET on Windows allows you
238    to export .NET components to COM.
239
240 Q: Does Mono depend on GNOME?
241
242 A: No, Mono does not depend on GNOME.  We use a few packages produced by
243    the GNOME team like the `glib' library.  
244
245 Q: But will I be able to build GNOME applications?
246
247 A: Yes, we will enable people to write GNOME applications using Mono.
248
249 Q: Do you have C# bindings for GNOME?.
250
251 A: Yes, we currently bind libgnome, libgnomecanvas, and libgnomeui --
252    although I dare say I have no idea how functional the bindings are
253    outside of what I tested in the sample app. I imagine other libraries 
254    under the GNOME framework will be added on an as-needed (and as-requested) 
255    basis...although a truly good bonobo binding will have to wait on the CORBA 
256    remoting support which has been started recently.
257
258 <a name="gui"></a>
259 ** GUI applications
260
261 Q: Will Mono enable GUI applications to be authored?
262
263 A: Yes, you will be able to build GUI applications.  Indeed, that is our
264    main focus.  We will provide both the Windows.Forms API and the Gtk# API.
265
266 Q: What is the difference between Gtk# and System.Windows.Forms?
267
268 A: Gtk# is a set of bindings for the Gtk+ toolkit for C# (and other
269    CIL-enabled languages).  System.Windows.Forms is an API defined
270    by Microsoft to build GUI applications.
271
272 Q: Will I be able to run my smart clients on systems powered by Mono?
273
274 A: As long as your applications are 100% .NET and do not make use
275    of P/Invoke to call Win32 functions, your smart client applications
276    will run on Mono platforms.
277
278 Q: Where can I learn more about Gtk#?
279
280 A: The following <a href="http://gtk-sharp.sourceforge.net>link</a> sends you to the page of the project.
281
282 Q: What can I do with Gtk#?. 
283
284 A: Gtk# is becoming very usable and you can create applications and
285    applets like those you see in a GNOME desktop environment. It's 
286    easy to install so it's worth a try. 
287
288 Q: How can I compile my HelloWorld.cs which uses Gtk#?.
289
290 A: Try: mcs --unsafe -o HelloWorld.exe -r glib-sharp -r pango-sharp -r
291         atk-sharp -r gdk-sharp -r gtk-sharp -r gdk-imaging-sharp
292         HelloWorld.cs
293
294 Q: Is there any way how to connect DataAdapter to some GTK# controls?
295
296 A: There is a sample file called `DbClient' in gtk-sharp/samples that you
297    might to look at.  It is a sample program in Gtk# that adds/updates/deletes 
298    information on a Postgress database. When we have the new table/tree widgets, 
299    I am sure someone would write an adapter for System.Data (in Gtk2 the 
300    tree/list widgets are written using a view/model, so you only need to write 
301    a model that maps to the database). You can have a look at 
302    gtk-sharp/sample/DbClient, where there is a GTK# application that uses 
303    System.Data. It does not use DataAdapter, but DataReader though.
304
305 Q: Do you have an estimate for when Windows.Forms will be released?
306
307 A: We do not know, volunteers are working on this, but there is no set
308    date yet.  The current approach is using the Wine Library to implement
309    it.
310
311 <a name="msft"></a>
312 ** Mono and Microsoft
313
314 Q: Is Microsoft helping Ximian with this project?
315
316 A: No. Ximian CTO Miguel de Icaza had a friendly conversation with
317    Microsoft software architect David Stutz, but that's about the
318    extent of the contact. Microsoft is interested in other
319    implementations of .NET and are willing to help make the ECMA spec
320    more accurate for this purpose.
321
322    Ximian representatives have also spoken with Sam Ruby at the ECMA
323    TG3 committee to discuss the same issues.
324
325 Q: Is Microsoft or Corel paying Ximian to do this?
326
327 A: No.
328
329 Q: Do you fear that Microsoft will change the spec and render Mono
330    useless?
331
332 A: No.  Microsoft proved with the CLI and the C# language that it was
333    possible to create a powerful foundation for many languages to
334    inter-operate.  We will always have that.  
335
336    Even if changes happened in the platform which were undocumented,
337    the existing platform would a value on its own.
338
339 Q: Are you writing Mono from the ECMA specs?
340
341 A: Yes, we are writing them from the ECMA specs and the published
342    materials in print about .NET.
343
344 Q: If my applications use Mono, will I have to pay a service fee?
345
346 A: No.  Mono is not related to Microsoft's initiative of
347    software-as-a-service.
348
349 Q: Is the Mono Project is related to the Microsoft Hailstorm effort?  Is
350    Ximian endorsing Hailstorm?  
351
352 A: No.  The Mono Project is focused on providing a compatible set of
353    tools for the Microsoft .NET development platform.  It does not
354    address, require, or otherwise endorse the MS Passport-based
355    Hailstorm single sign-on system that is part of Windows XP and
356    other services.
357
358 Q: Will Mono or .NET applications depend on Microsoft Passport?
359
360 A: No. MS Passport is unrelated to running .NET compatible applications
361    produced with the Mono tools.  The only thing you will need is a
362    just-in-time compiler (JIT).
363
364 Q: What is a 100% .NET application?
365
366 A: A `100% .NET application' is one that only uses the APIs defined
367    under the System namespace and does not use PInvoke.  These
368    applications would in theory run unmodified on Windows, Linux,
369    HP-UX, Solaris, MacOS X and others. 
370
371 Q: If Microsoft will release a port of their .NET platform under the
372    `Shared Source' license, why should I bother with anything else?
373
374 A: The Shared Source implementation will be expensive and its uses
375    will be tightly restricted, especially for commercial use. We are
376    working towards an implementation that will grant a number of
377    important rights to recipients: use for any purpose,
378    redistribution, modification, and redistribution of modifications.
379
380    This is what we call <a
381    href="http://www.gnu.org/philosophy/free-sw.html">Free Software</a>
382
383 Q: Is Mono a free implementation of Passport?
384
385 A: No. Mono is just a runtime, a compiler and a set of class
386    libraries.
387
388 Q: Will the System.Web.Security.PassportIdentity class mean
389    that my software will depend on Passport?
390    
391 A: No.  Applications may use that API to contact a Passport site, but
392    are not required to do so.
393
394    As long as your application does not use Passport, you will not
395    need Passport.  
396
397 Q: Will Mono running on Linux make Passport available for Linux?
398
399 A: No.  However, the Passport toolkit for Linux-based web servers is
400    available from Microsoft.
401
402 Q: Will Mono allow me to run Microsoft Office on Linux?
403
404 A: No, it will not.  Microsoft Office is a Windows application.  To
405    learn more about running Windows applications on Intel Unix systems
406    refer to <a href="http://www.winehq.com">the Wine Project</a>.
407
408 Q: Will I be able to compile a Microsoft VB.NET application and execute 
409    the resultant MSIL file under MONO on Linux without converting to C# 
410    and recompiling?
411
412 A: Once we have a complete VisualBasic runtime, yes.
413
414 Q: Can mono run the WebMatrix?
415
416 A: No. That requires System.Windows.Forms support which is not
417    currently implemented.
418
419 Q: Does mono have something like Passport? 
420    Will mono have a server side Passport/Similar framework for XSP as well as client classes?
421
422 A: Not yet, but the client side API for authentication is not the problem. 
423    We will likely have a lot of other authentication APIs, like the Liberty
424    Alliance APIs. The problem is people on the web provider end that might use 
425    this for authentication.
426
427 <a name="pnpproject"></a>
428 ** Mono and Portable.NET
429
430 Q: What are the differences between Mono and Portable.NET?
431
432 A: Most of Mono is being written using C#, with only
433    a few parts written in C (The JIT engine, the runtime, the
434    interfaces to the garbage collection system).  
435
436    It is easier to describe what is unique about Mono:
437    <ul>
438      <li> A self-hosting C# compiler written in C#, which is clean, easy
439           to maintain.
440
441      <li> A multi-platform runtime engine: both a JIT engine and an
442           interpreter exist.  The JIT engine runs currently on x86
443           systems, while the interpreter works on SPARC, StrongARM and
444           PowerPC systems.  
445
446      <li> Supports Linux, Windows and Solaris at this point.
447
448      <li> The JIT engine is written using a portable instruction
449           selector which not only generates good code (we are told
450           that we are faster than Rotor, but it is hard to tell) but
451           is also the foundation to re-target the JIT engine to other
452           systems.  
453
454           The system employed is described in various compiler
455           books and it is very similar to what is described in the 
456           book that covers LCC, the ANSI C retargetable C compiler.
457
458      <li> The JIT engine supports in-lining, constant folding and propagation,
459
460      <li> Full support for remoting in the runtime, but the class 
461           libraries are still behind.
462
463      <li> The C# compiler, the JIT engine and the class libraries are
464           mature enough that the whole system is self-hosting.  This means that
465           we develop Mono completely with itself at this point.
466
467      <li> We are not yet done, and there is a lot of work left to be
468           done
469
470      <li> We have a great community of developers, without which Mono
471           would not be possible.
472
473      <li> We will provide an ahead of time compilation mode in the 
474           future.
475    </ul>
476
477 <a name="webservices"></a>
478 ** Web Services
479
480 Q: How is Mono related to Web Services?
481
482 A: Mono is only related to Web Services in that it will implement the
483    same set of classes that have been authored in the .NET Framework
484    to simplify and streamline the process of building Web Services.
485
486    But most importantly, Mono is an Open Source implementation of the
487    .NET Framework.
488
489 Q: Can I author Web Services with Mono?
490
491 A: You will be able to write Web Services on .NET that run on Mono and
492    vice-versa. 
493
494 Q: If Mono implements the SDK classes, will I be able to write and
495    execute .NET Web Services with it?
496    
497 A: Yes.  When the project is finished, you will be able to use the
498    same technologies that are available through the .NET Framework SDK
499    on Windows to write Web Services.
500
501 Q: What about Soup?  Can I use Soup without Mono?
502
503 A: Soup is a library for GNOME applications to create SOAP servers and
504    SOAP clients, and can be used without Mono.  You can browse the
505    source code for soup using <a
506    href="http://cvs.gnome.org/bonsai">GNOME's Bonsai</a>.
507
508 Q: Can I use CORBA?
509
510 A: Yes. The CLI contains enough information about a class that
511    exposing it to other RPC systems (like CORBA) is really simple, and
512    does not even require support from an object.  
513
514    We will be implementing CORBA inter-operation as an extension to the
515    Mono classes so that we can integrate with Bonobo, just like
516    Microsoft provides COM inter-operation classes and support
517    mechanisms. 
518
519 Q: Can I serialize my objects to other things other than XML?
520
521 A: Yes, although the serializing tools have not yet been planned, and
522    you would probably have to implement them yourself.
523
524 Q: Will Mono use ORBit?
525
526 A: No. Mono will be using a new implementation of CORBA that isn't still started. 
527
528 <a name="monodoc"></a>
529 ** MonoDoc
530
531 Q: What is MonoDoc?
532
533 A: MonoDoc is a graphical documentation editor and viewer. Currently, MonoDoc 
534    consists of a Gtk# application and is in heavy development. There is also a 
535    Qt# version of it.
536
537
538 <a name="devel"></a>
539 ** Development Tools and Issues
540
541 Q: Will it be possible to use the CLI features without using byte codes
542    or the JIT?
543
544 A: Yes. The CLI engine will be made available as a shared library.
545    The garbage collection engine, the threading abstraction, the
546    object system, the dynamic type code system and the JIT will be
547    available for C developers to integrate with their applications if
548    they wish to do so. 
549
550 Q: Will you have new development tools?
551
552 A: With any luck, Free Software enthusiasts will contribute tools to
553    improve the developer environment.  These tools could be developed
554    initially using the Microsoft implementation of the CLI and then
555    executed later with Mono.
556
557 Q: What kind of rules make the Common Intermediate Language useful for
558    JITers?
559
560 A: The main rule is that the stack in the CLI is not a general purpose
561    stack.   You are not allowed to use it for other purposes than
562    computing values and passing arguments to functions or return
563    values.  
564
565    At any given call or return instruction, the types on the stack
566    have to be the same independently of the flow of execution of your
567    code. 
568
569 Q: Is it true that the CIL is ideal for JITing and not efficient for
570    interpreters?
571
572 A: The CIL is better suited to be JITed than JVM byte codes, but you
573    can interpret them as trivially as you can interpret JVM byte
574    codes. 
575
576 Q: Isn't it a little bit confusing to have the name of "XSP" (the same 
577    as in the Apache Project) for the ASP.NET support in Mono?.
578
579 A: In Mono, xsp is just the name of the C# code generator for ASP.NET 
580    pages. In the Apache Project, it is a term for the "eXtensible Server 
581    Pages" technology so as they are very different things, they don't 
582    conflict.
583
584 Q: What about using something like Jabber instead of the System.Messaging 
585    namespace?.
586
587 A: In short, MSMQ is not something like Jabber, but asynchronous messaging 
588    through queues. Useful queues do more than serialize messages, they are 
589    also platform bridges.
590
591 Q: Are you supporting XMLDocument and relatives?.
592
593 A: Currently, we aren't implementing them yet. It would require updates to 
594    most of the XmlNode derivatives so it's not a trivial task. We are 
595    currently focusing on getting XPath support working. 
596
597 Q: Is there any plan to develop an aspx server for Mono?.
598
599 A: The web server turned out to be very simple compared to the rest of the 
600    work. Gonzalo has got the page generator mostly done (a module called 
601    xsp, who has nothing to do with the XSP term used in the Apache Project).
602    Patrik has done a lot of the work to get the ProcessRequest to work.
603    You can try to help in the final touches to the System.Web classes and
604    writing regression tests for the widgets we have.
605
606 Q: Is there any way I can develop the class libraries using Linux yet?
607
608 A: Yes. Some class libraries can be developed on Linux. Search for
609    Paolo's post (he lists which classes can be compiled fine now).
610
611 Q: Is there any way I can install a known working copy of mono in /usr, 
612    and an experimental copy somewhere else, and have both copies use 
613    their own libraries? (I'm still not very good at library paths in 
614    Linux)
615
616 A: Yes. Just use two installation prefixes.
617
618 Q: How should I write tests or a tests suite?
619
620 A: If you do a test suite for C#, you might want to keep it 
621    independent of the Mono C# compiler, so that other compiler 
622    implementations can later use it.  
623
624 Q: Would it be too terrible to have another corlib signed as mscorlib? 
625
626 A: We rename corlib to mscorlib also when saving the PE files, in fact, 
627    the runtime can execute program created by mono just fine.  
628
629 Q: Is there a relatively straightforward way to repeat the steps taken 
630    by Paolo to get Mono completely self-hosted on Linux?
631
632 A: To build the compiler and class libraries in Linux, run:
633    <ul><li>make -f makefile.gnu. To install them, run: </li>
634        <li>make -f makefile.gnu install prefix=/opt/mono</li>
635    </ul>
636
637    If you want to produce and distribute a monocharge tarball, run:
638    make -f makefile.gnu dist
639    Of course you have to run these in the top level mcs directory.
640
641 Q: Is it possible to build a C# file to some sort of intermediate format which 
642    can linked into a final module, like the traditional .c -> .o -> .so path? 
643    
644 A: You could do: mcs /target:module file1.cs, mcs /target:module file2.cs, 
645    mcs /target:exe file1.dll file2.dll /out:mybin.exe
646
647 Q: Is there any plans for implementing remoting in the near future?, When will 
648    work in System.Runtime.Remoting.dll start?
649
650 A: The remoting infrastructure is in place. Some of the channels and 
651    formatters are not.
652
653 Q: I'm wondering if there are any plans to start using nant to build the
654    class lib + test lib. i think that every project need/should use an
655    automated build process and nant + a couple of tools enables this. is
656    the problem that the compiler can't run nant yet?
657
658 A: Maybe well be doing some sort of automated build process + testing when
659    the summer finish.
660
661 <a name="asp">
662 ** Mono and ASP.NET
663
664 Q: Is Mono supporting ASP.NET?
665
666 A: Yes. The development of the support for ASP.NET comes in various stages, 
667    here is what Gonzalo has been working on: 1. The Parser. 2. Getting the 
668    parser to generate output compatible with ASP.NET. 3. Running the sample 
669    output with the real Microsoft runtime but using our generated page. 4. 
670    Running the sample with our classes with the .NET runtime. 5. Running 
671    our sample code with our classes with our runtime. This is the process 
672    we are following. Currently Gonzalo has reached point 5.
673
674 Q: Do I need install cygwin to work on ASP.NET in mono or Linux is enough since 
675    it is self host right now.
676
677 A: Linux is enough.
678
679 Q: Any plan to make ASP.NET in mono works with Apache in Linux?.
680
681 A: Yes, we have plans to do so, but we need to wait for Patrik's patches to
682    HttpRuntime. Once that is there, writing a mod_mono should be trivial 
683    (look at mono/samples/embed for a sample embedded application).
684
685 <a name="ado">
686 ** Mono and ADO.NET
687
688 Q: What is the status of ADO.NET support?. Could I start migrating 
689    applications from MS.NET to Mono?.
690
691 A: You could start right now using the ADO.NET support in mono, of course,
692    if you want to help filling the missing gaps while you develop your app
693    :-) Well, what I mean is that we're not that far to having full ADO.NET
694    support in Mono, and we've got a lot of working things, so if we could
695    get more help, we'd finish it really soon :-)
696
697 Q: In developing the data architecture for the application are there and
698    objects I should stay away from in order to insure the smoothest possible
699    transition (minimum code rewrite) to Mono's ADO.NET implementation?  (For
700    example, strongly typed datasets versus untyped datasets, etc...)
701
702 A: We are implementing all the classes in Microsoft .NET's System.Data, so
703    you can be sure that things will work the same in Mono as with the Microsoft
704    implementation. 
705
706 <a name="java">
707 ** Mono and Java
708    
709 Q: Why don't you use Java?  After all, there are many languages that
710    target the Java VM.
711
712 A: You can get very good tools for doing Java development on free
713    systems right now.  <a href="http://www.redhat.com">Red Hat</a> has
714    contributed a <a href="http://gcc.gnu.org">GCC</a> <a
715    href="http://gcc.gnu.org/java">front-end for Java</a> that can take
716    Java sources or Java byte codes and generate native executables; <a
717    href="http://www.transvirtual.com">Transvirtual</a> has implemented
718    <a href="http://www.kaffe.org">Kaffe</a> a JIT engine for Java;
719    Intel also has a Java VM called <a
720    href="http://www.intel.com/research/mrl/orp">ORP</a>.
721
722    The JVM is not designed to be a general purpose virtual machine.
723    The Common Intermediate Language (CIL), on the other hand, is
724    designed to be a target for a
725    wide variety of programming languages, and has a set of rules
726    designed to be optimal for JITers.
727
728 Q: Could Java target the CLI?
729
730 A: Yes, Java could target the CLI.  We have details on a <a
731    href="ideas.html#guavac">project</a> that someone could take on to
732    make this happen.  
733
734    Microsoft has an implementation of the Java language called J# that
735    can target the CIL execution engine. 
736
737 Q: Is it possible to write a JVM byte code to CIL converter?
738
739 A: Yes, it is possible.  Here are a few starting point:
740
741         <ul>
742                 * A byte code representation is really a flattened forest of
743                   trees.  Look at the Mono JIT engine to see how we compute
744                   the basic blocks (this is used to figure out the "trees").
745
746                   The forest is just an array of trees.
747
748                   Indeed, run the JIT engine with -d (mono -d prog.exe) and
749                   you will see how these trees look like.
750
751                   You will have to do something similar for Java.
752
753                 * Each "forest of trees" has a meaning.  This meaning can now
754                   be translated into the equivalent "meaning" in CLR-land.
755         </ul>
756
757 Q: Could mono become a hybrid CIL/java platform?
758
759 A: No. It is quite far from the philosophy of the project. The idea of Mono 
760    is, to have only _one_ VM, on which all can run. And if there existing a 
761    binary-converter from Java-.class to IL and if there existing something 
762    like J-Sharp on Mono, you can write programs in Java, which than can run 
763    on Mono. You do not need two bindings (like your example: GTK-Sharp _and_ 
764    Java-Gnome). You need only _one_ of it (GTK-Sharp). Thats the idea of Mono.
765    An other point is, that there are no people, who use Open Source-JVMs. They 
766    all prefer Suns original. But for Unix there don't exist a .NET-Framework. 
767    So it is possible, that in the future Mono is the standard .NET for Unixes.
768
769 Q: Do you plan to implement a Javascript compiler?
770
771 A: Yes. Eto Demerzal has started a Rhino port to C#.
772    After this is completed, we will begin developing
773    the JavaScript compiler.
774
775 <a name="extending"></a>
776 ** Extending Mono
777
778 Q: Would you allow other classes other than those in the
779    specification?
780
781 A: Yes.  The Microsoft class collection is very big, but it is by no
782    means complete.  It would be nice to have a port of `Camel' (the
783    Mail API used by Evolution inspired by Java Mail) for Mono
784    applications.  
785
786    You might also want to look into implementing CORBA for Mono.  Not
787    only because it would be useful, but because it sounds like a fun
788    thing to do, given the fact that the CLI is such a type rich
789    system. 
790
791    For more information on extending Mono, see our <a
792    href="ideas.html">ideas</a> page.
793
794 Q: Do you plan to Embrace and Extend .NET?
795
796 A: Embracing a good technology is good.  Extending technologies in
797    incompatible ways is bad for the users, so we do not plan on 
798    extending the technologies.
799
800    If you have innovative ideas, and want to create new classes, we 
801    encourage you to make those classes operate correctly well in both
802    Mono and .NET.
803
804 Q: Is there any way I can develop the class libraries using Linux yet?
805
806 A: Yes. Some class libraries can be developed on Linux. Search for
807    Paolo's post (he lists which classes can be compiled fine now).
808
809 Q: Is there any way I can install a known working copy of mono in /usr, 
810    and an experimental copy somewhere else, and have both copies use 
811    their own libraries? (I'm still not very good at library paths in 
812    Linux)
813
814 A: Yes. Just use two installation prefixes.
815
816
817 <a name="portability"></a>
818 ** Portability
819
820 Q: Will Mono only work on Linux?
821
822 A: Currently, we are doing our work on Linux-based systems and
823    Windows.  We do not expect many Linux-isms in the code, so it
824    should be easy to port Mono to other UNIX variants.   
825
826 Q: What about Mono on non Linux-based systems?
827
828 A: Our main intention at Ximian is to be able to develop GNOME
829    applications with Mono, but if you are interested in providing a
830    port of the Winforms classes to other platforms (frame buffer or
831    MacOS X for example), we would gladly integrate them, as long
832    they are under an open source license.  
833
834 Q: What operating systems/CPUs do you support
835
836 A: Mono currently runs on Linux, Windows, Solaris and FreeBSD.
837    There is a JIT engine available for x86 processors that can
838    generate code and optimizations tailored for a particular CPU.
839
840    Interpreters exist for the SPARC, PowerPC and StrongARM CPUs.
841
842 Q: Does Mono run on Windows?
843
844 A: Yes.   You can get pre-compiled
845    binaries from <a href="http://www.go-mono.com/download.html">http://www.go-mono.com/download.html</a>
846
847 Q: Does Mono run on Linux?
848
849 A: Yes.  You can get pre-compiled
850    binaries from <a href="http://www.go-mono.com/download.html">http://www.go-mono.com/download.html</a>
851
852 Q: Will I require Cygwin to run mono?
853
854 A: No.  Cygwin is only required to build Mono.
855
856 Q: Will Mono depend on GNOME?
857
858 A: It will depend only if you are using a particular assembly (for
859    example, for doing GUI applications).  If you are just interested
860    in Mono for implementing a `Hello World Enterprise P2P Web
861    Service', you will not need any GNOME components.
862
863 Q: Is anyone working on porting Mono to IA-64?
864
865 A: Nobody is working on such port.
866
867 Q: If I were about to start a Mono port to IA-64,would the same lburg code 
868    generator work for IA-64 also? or anything else need to be used for code 
869    generation(as the processor architecture is totally different from IA32)
870
871 A: The lburg approach can be use for any processor architecture. But you might
872    think in another better approach.
873
874 Q: Do you plan to port Rhino to C#?.
875
876 A: Eto Demerzal has started a Rhino port to C#.
877
878 Q: Has anyone succeeded in building a Mac version of the C# environment. 
879    If so can you explain how?  
880
881 A: You could try to check with the Darwin people, or the Fink people.
882    Mono/C# is self hosting on Linux/PPC which is the hard part, so it
883    should be relatively simple to get it to work on MacOS
884
885 <a name="reuse"></a>
886 ** Reusing Existing Code
887
888 Q: What projects will you reuse or build upon?
889
890 A: We want to get Mono in the hands of programmers soon.  We are
891    interested in reusing existing open source software.
892
893 Q: What about Intel's research JIT framework, ORP?
894
895 A: At this time, we are investigating whether we can use elements of
896    ORP for Mono.   ORP is a research JIT engine that has a clearly
897    defined API that splits the JIT from the GC system and the actual
898    byte code implementation.
899
900    We are using some pieces of ORP (Their code generation interface)
901    and we use it as a source of inspiration for optimizations.  Paolo
902    and Dietmar consider ORP as being one of the best JIT engines out
903    there (and their research work and papers are very useful if you are
904    interested in JIT technology).
905
906 Q: What about using GNU Lightning?
907
908 A: We are not using GNU Lightning.  Our JIT is using an instruction
909    selector based on tree-pattern matching, and a code generation
910    interface that is very tied to the current architecture.
911
912 Q: Will I be able to use Microsoft SQL Server 2000 or will I need to switch
913    to a specific Open Source Database. Will I need to recode?
914
915 A: There should not be any need to recode.
916
917 Q: What do I need to watch out for when programming in VB.NET so that I'm
918    sure to be able to run those apps on Linux?
919
920 A: Not making any PInvoke or DLL calls should and not using anything in
921    the Microsoft.* namespaces should suffice. Also do not use any 
922    Methods/Classes marked as "This type/method supports the .NET Framework 
923    infrastructure and is not intended to be used directly from your code." 
924    even if you know what these classes/methods do.
925
926 Q: Will built-in reporting be supported for crystal reports? This is a
927    heavily used part of our system.
928
929 A: Probably not. Crystal Reports are propriety. Someone may try to emulate
930    the behavior, but no-one has yet volunteered.
931
932 Q: Who about writing to the registry? As I understand it, Linux does not have
933    a counterpart to the registry. Should I avoid relying on that feature?
934
935 A: Try to avoid it. Although there would be a emulation for registry in
936    Mono too. GNOME does have a registry like mechanism for configuration. But
937    Even if gnome has a configuration system similar to the registry, the keys 
938    will not be equal, so you will probably end up having to do some runtime 
939    detection, and depending on this load an assembly that has your 
940    platform-specific hacks.
941
942 Q: System.Data.SqlClient with FreeTDS, will you port parts of these to C# and 
943    use them?
944
945 A: if their license is compatible with mono's, yes, we'd think about porting 
946    them. If not, we'll continue with the plan of using FreeTDS.
947
948 <a name="gcc"></a>
949 ** Mono and GCC
950
951 Q: Are you working on a GCC front-end to C#? A GCC back-end that will
952    generate CIL images? What about making a front-end to GCC that
953    takes CIL images and generates native code?
954
955 A: We are currently seeking volunteers for those projects.
956    Visit the <a href="contributing.html">contributing</a> section if
957    you are interested.
958
959 Q: But would this work around the GPL in the GCC compiler and allow
960    people to work on non-free front-ends?
961
962 A: People can already do this by targeting the JVM byte codes (there
963    are about 130 compilers for various languages that target the JVM).
964
965 Q: Why are you writing a JIT engine instead of a front-end to GCC?
966
967 A: We want the JIT engine and runtime engine because they will be able
968    to execute CIL executables generated on Windows, and so no recompilation 
969    will be necessary.
970
971 <a name="performance"></a>
972 ** Performance
973
974 Q: How fast will Mono be?
975
976 A: We can not predict the future, but a conservative estimate is that
977    it would be at least `as fast as other JIT engines'.
978
979    We would like to ship various JIT engines with Mono, just like
980    Microsoft has done with their .NET development platform. We could
981    provide a faster, JIT for fast load times but lower performance,
982    and an and an optimizing JIT that would be slower at generating
983    code but produce more optimal output.
984
985    The CIL has some advantages over the Java byte code:  it is really
986    an intermediate representation and there are a number of
987    restrictions on how you can emit CIL code that simplify creating
988    better JIT engines.
989
990    For example, on the CIL, the stack is not really an abstraction
991    available for the code generator to use at will.  Rather, it is a
992    way of creating a postfix representation of the parsed tree.  At
993    any given call point or return point, the contents of the stack are
994    expected to contain the same object types independently of how the
995    instruction was reached.
996
997 <a name="licensing"></a>
998 ** Licensing
999
1000 Q: Will I be able to write proprietary applications that run with
1001    Mono?
1002
1003 A: Yes.  The licensing scheme is planned to allow proprietary
1004    developers to write applications with Mono.
1005    
1006 Q: What license or licenses are you using for the Mono Project?
1007
1008 A: The C# Compiler is released under the terms of the <a 
1009    href="http://www.opensource.org/licenses/gpl-license.html">GNU GPL</a>.  The runtime
1010    libraries are under the <a
1011    href="http://www.opensource.org/licenses/lgpl-license.html">GNU
1012    Library GPL</a>.  And the class libraries are released
1013    under the terms of the <a
1014    href="http://www.opensource.org/licenses/mit-license.html">MIT X11</a>
1015    license.
1016
1017    The Mono runtime and the Mono C# Compiler are also available under
1018    a proprietary license for those who can not use the LGPL and the
1019    GPL in their code.  
1020
1021    For licensing details, contact <a
1022    href="mailto:mono-licensing@ximian.com">mono-licensing@ximian.com</a>
1023
1024
1025 Q: I would like to contribute code to Mono under a particular
1026    license. What licenses will you accept?
1027
1028 A: We will have to evaluate the licenses for compatibility first,
1029    but as a general rule, we will accept the code under the same
1030    terms of the "container" module. 
1031
1032 Q: Is the Mono 
1033
1034
1035 <a name="patents"></a>
1036 ** Patents
1037
1038 Q: Could patents be used to completely disable Mono (either submarine
1039    patents filed now, or changes made by Microsoft specifically to
1040    create patent problems)?
1041
1042 A: No.  First, its basic functional capabilities have pre-existed too
1043    long to be held up by patents.  The basic components of Mono are
1044    technologically equivalent to Sun's Java technology, which has been
1045    around for years.  
1046
1047    Mono will also implement multi-language and
1048    multi-architecture support, but there are previous technologies
1049    such as UCSD p-code and ANDF that also support multiple languages
1050    using a common intermediate language.  The libraries are similar
1051    to other language's libraries, so again, they're too similar to
1052    be patentable in large measure.
1053
1054    However, if Microsoft does patent some technology, then our plan is
1055    to either (1) work around it, (2) chop out patented pieces, (3) 
1056    find prior art that would render the patent useless.
1057  
1058    Not providing a patented capability would weaken the
1059    interoperability, but it would still provide the free software /
1060    open source software community with good development tools, which
1061    is the primary reason for developing Mono.  
1062
1063 <a name="etc"></a> 
1064 ** Miscellaneous Questions
1065
1066 Q: You say that the CLI allows multiple languages to execute on the
1067    same environment.  Isn't this the purpose of CORBA?
1068
1069 A: The key difference between CORBA (and COM) and the CLI is that the
1070    CLI allows "data-level interoperability" because every
1071    language/component uses the same data layout and memory management.
1072
1073    This means you can operate directly upon the data types that someone
1074    else provides, without having to go via their interfaces.  It also
1075    means you don't have to "marshal" (convert) parameters (data
1076    layouts are the same, so you can just pass components directly) and
1077    you don't have to worry about memory management, because all
1078    languages/components share the same garbage collector and address
1079    space.  This means much less copying and no need for reference
1080    counting.
1081
1082 Q: Will you support COM?
1083
1084 A: The runtime will support XPCOM on Unix systems and COM on Windows.
1085    Most of the code for dynamic trampolines exists already.
1086
1087 Q: Will Ximian offer certifications on Mono or related technologies?. 
1088
1089 A: It's possible. But there is no plan about this. So the short answer is no.
1090
1091 Q: Are there any Boehm's GC binaries?
1092
1093 A: Yes. You can find RPMs <a href="http://java.thn.htu.se/~toor/">here</a>, though
1094    if your distribution provides the correct packages, you should use those.
1095    The suggested version of the Boehm GC is 6.1.
1096
1097 Q: How can I report a bug?
1098
1099 A: The best thing is to track down the bug and provide a simple test to
1100    reproduce the bug. You can then add the bug to the 
1101    <a href="http://bugzilla.ximian.com/enter_bug.cgi">bugtracking system</a>.
1102
1103    Please provide information about what version of mono you're using
1104    and any relevant details to be able to reproduce the bug. Note that
1105    bugs reported on the mailing-list may be easily forgotten, so it's
1106    better to file them in the <a href="http://bugzilla.ximian.com/enter_bug.cgi">bug tracking system</a>.
1107
1108 Q: Does mcs support the same command line options as the MS C# 
1109    compiler?
1110
1111 A: The Mono C# compiler now supports the same command line
1112    arguments as the Microsoft C# compiler does.
1113
1114 Q: How about getting searchable archives on lists.ximian.com? 
1115
1116 A: You can perform a search on the mono-related mailing lists 
1117    <a href="http://www.go-mono.com/mailing-lists.html">here</a>.
1118
1119 Q: When using mono from cvs or from a snapshot, I get an error messaage
1120    saying that Mono and the runtime are out of sync. How do I fix that?
1121
1122 A: If you use mono from cvs, you need to be prepared for changes in the
1123    runtime internals. This means that you should keep a working setup 
1124    before blindling updating (a working setup may just be the last released
1125    tarball or a recent binary snapshot).
1126    Usually, compiling corlib with mcs before recompiling the C runtime does
1127    the right thing (but occasionally you may need to do it the other 
1128    way around).
1129
1130 Q: Why are you going for a GtkHtml implementation?
1131
1132 A: GtkHTML is just a lightweight HTML rendering engine that does not
1133    support CSS, so we need it to look decent for those of us that will 
1134    be using the documentation in our day-to-day work on Linux. The 
1135    Web-based interfaces lack the agility that you get from a native GUI
1136    tool to browse your documentation. Probably later on, we will write 
1137    scripts and generate a full documentation set that is web-browsable, 
1138    but we need a command-line and GUI tools that we can use natively on 
1139    Linux when disconnected from the Web (and that has better 
1140    interactions than a web page).
1141
1142 <a name="problems"></a>
1143 ** Mono Common Problems
1144
1145    If you are having problems compiling or running Mono software
1146    or if you think that you found a bug, etc. Please visit the
1147    <a href="http://geneura.ugr.es/~jaime/deploy/mono-common-problems.html">Mono Common Problems</a> document and try there. 
1148