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