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