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