<a href="#gnome">Mono and GNOME</a><br>
<a href="#gui">Building GUI applications with Mono</a><br>
<a href="#msft">Mono and Microsoft</a><br>
+<a href="#platforms">Mono platforms</a><br>
+<a href="#compatibility">Compatibility</a></br>
<a href="#pnpproject">Mono and the Portable.NET Project</a><br>
<a href="#webservices">Web Services</a><br>
<a href="#asp">Mono and ASP.NET</a><br>
implement various technologies developed by Microsoft that have now
been submitted to the ECMA for standardization.
+ The Mono project has also sparked a lot of interest in developing
+ C#-based components, libraries and frameworks. Today Mono is not
+ limited to implement the .NET Framework, but also contains other
+ components. Some of the components of the Mono platform were
+ developed by the Mono team, and some others we have incorporated
+ from other open source efforts, the most important ones:
+
+ <ul>
+ <li><a
+ href="http://remoting-corba.sourceforge.net/">Remoting.CORBA</a>: A
+ CORBA implementation for Mono.
+
+ <li>Ginzu: An implementation on top of Remoting for the <a
+ href="http://www.zeroc.com">ICE</a> stack
+
+ <li><a href="http://gtk-sharp.sf.net">Gtk#</a>: Bindings for
+ the popular Gtk+ GUI toolkit for Unix and Windows systems.
+ Other bindings are available: Diacanvas-Sharp and MrProject.
+
+ <li><a
+ href="http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx">#ZipLib</a>:
+ A library to manipulate various kinds of compressed files and
+ archives (Zip and tar).
+
+ <li>GlGen (available from the Mono CVS): Bindings for OpenGL.
+
+ <li>Mono.LDAP: LDAP access for .NET apps.
+
+ <li>Mono.Data: We ship support for Postgress, MySql, Sybase,
+ DB2, SqlLite, Tds (SQL server protocol) and Oracle databases.
+
+ <li>Mono.Cairo: Bindings for the <a
+ href="http://www.cairographics.org">Cairo</a> rendering
+ engine (Our System.Drawing is implemented on top of this).
+
+ <li>Mono.Posix: Bindings for building POSIX applications using
+ C#.
+
+ <li>Mono.Http: Support for creating custom, embedded HTTP
+ servers and common HTTP handlers for your applications.
+ </ul>
+
Q: What is the difference between Mono and the .NET Initiative?
A: The ".NET Initiative" is a somewhat nebulous company-wide effort by
compiler, and a garbage collecting runtime.
* A class library that can work with any language
- which works on the CLR.
+ which works on the CLR. Both .NET compatible class
+ libraries as well as Mono-provided class libraries
+ are included.
* A compiler for the C# language. In the future we
might work on other compilers that target the Common
Other higher level class libraries (ASP.NET, ADO.NET, WinForms) will
be released when they become stable.
+Q: When will Mono 1.0 ship?
+
+A: We are planning on releasing Mono 1.0 (Mono Core) which will ship all the
+ components of Mono that are known to be stable in Q4 2003/Q1 2004.
+
+ This release will lack System.Windows.Forms and
+ Enterprise.Services, as they will not be production ready on this timeframe.
+
+ Mono 1.2 should come in Q2 2004 and include the missing components
+ libraries that will make Mono feature-compatible with .NET 1.0
+
Q: What major components will you include in Mono?
A: Hopefully everything that Microsoft ships on their Framework
CIL-enabled languages). System.Windows.Forms is an API defined
by Microsoft to build GUI applications.
+Q: Why not implement System.Windows.Forms on top of Gtk# or Qt#?
+
+A: There are several reasons for this.
+
+ First of all, Gtk+ and Qt are standard toolkits on Linux, and their
+ proponents want to use their favorite toolkits when writing
+ applications.
+
+ Related to this is the idea that System.Windows.Forms is
+ brain-dead in certain areas, such as internationalization.
+ System.Windows.Forms uses explicit sizes for all controls, as opposed
+ to Gtk+ and Qt which use a box/packing model, which can better deal with
+ the different string lengths different languages will have.
+
+ Next is compatibility. It is not possible to implement
+ System.Windows.Forms on top of Gtk+/Qt and have 100% compatibility,
+ because System.Windows.Forms exposes some Win32-isms, such as the
+ Win32 message loop. In order to maintain compatibility, Wine must be used,
+ and this is being done; see the
+ <a href="/winforms.html">System.Windows.Forms effort page</a>.
+
+Q: Wine applications do not look like native applications, what are
+ you going to do about this?
+
+A: We have already a few patches into our version of Windows.Forms
+ that makes Wine use the colors and font settings from your desktop,
+ improving the integration a lot. In the future, we will continue
+ to improve this interoperability scenario.
+
Q: Will I be able to run my smart clients on systems powered by Mono?
A: As long as your applications are 100% .NET and do not make use
date yet. The current approach is using the Wine Library to implement
it.
+Q: Do you have a comparission chart about the various toolkit
+ offerings?
+
+A: A document explaining this is available at: <a
+ href="http://primates.ximian.com/~miguel/toolkits.html">http://primates.ximian.com/~miguel/toolkits.html</a>.
+
<a name="msft"></a>
** Mono and Microsoft
Q: Is Microsoft helping Ximian with this project?
-A: No. Ximian CTO Miguel de Icaza had a friendly conversation with
- Microsoft software architect David Stutz, but that's about the
- extent of the contact. Microsoft is interested in other
- implementations of .NET and are willing to help make the ECMA spec
- more accurate for this purpose.
+A: There is no high level communication between Ximian and Microsoft
+ at this point, but engineers who work on .NET or the ECMA groups
+ have been very friendly, and very nice to answer our questions, or
+ clarify part of the specification for us.
+
+ Microsoft is interested in other implementations of .NET and are
+ willing to help make the ECMA spec more accurate for this purpose.
- Ximian representatives have also spoken with Sam Ruby at the ECMA
- TG3 committee to discuss the same issues.
+ Ximian was also invited to participate in the ECMA committee
+ meetings for C# and the CLI.
Q: Is Microsoft or Corel paying Ximian to do this?
produced with the Mono tools. The only thing you will need is a
just-in-time compiler (JIT).
-Q: What is a 100% .NET application?
-
-A: A `100% .NET application' is one that only uses the APIs defined
- under the System namespace and does not use PInvoke. These
- applications would in theory run unmodified on Windows, Linux,
- HP-UX, Solaris, MacOS X and others.
-
Q: If Microsoft will release a port of their .NET platform under the
`Shared Source' license, why should I bother with anything else?
learn more about running Windows applications on Intel Unix systems
refer to <a href="http://www.winehq.com">the Wine Project</a>.
-Q: Will I be able to compile a Microsoft VB.NET application and execute
- the resultant MSIL file under MONO on Linux without converting to C#
- and recompiling?
-
-A: Once we have a complete VisualBasic runtime, yes.
-
Q: Can mono run the WebMatrix?
A: No. That requires System.Windows.Forms support which is not
Alliance APIs. The problem is people on the web provider end that might use
this for authentication.
+<a name="platforms"></a>
+** Mono Platforms
+
+Q: What operating systems does Mono run on?
+
+A: Mono is known to run on Linux, Unix and Windows systems.
+
+Q: What architectures does Mono support?
+
+A: Mono today ships with a Just-in-Time compiler for x86-based
+ systems. It is tested regularly on Linux, FreeBSD and Windows
+ (with the XP/NT core).
+
+ There is also an interpreter, which is slower that runs on the
+ s390, SPARC and PowerPC architectures.
+
+Q: Can Mono run on Windows 9x, or ME editions?
+
+A: Mono requires Unicode versions of Win32 APIs to run,
+ and only a handful of *W functions is supported under Win9x.
+
+ There is Microsoft Layer for Unicode that provides implementation
+ of these APIs on 9x systems.
+
+ Unfortunately it uses linker trick for delayed load that is not
+ supported by ld, so some sort of adapter is necessary.
+
+ You will need MSLU and one of the following libs to link Mono to
+ unicows.dll <a
+ href="http://mono.eurosoft.od.ua/files/unimono.zip">http://mono.eurosoft.od.ua/files/unimono.zip</a>
+ or alternatively search the net for "libunicows".
+
+ No changes to Mono source code required, the only thing is to make
+ sure that linker will resolve imports to adapter library instead of
+ Win32 libs. This is achieved by inserting -lunimono before
+ -lkerner32/user32 in the linker's specs file.
+
+Q: Why support Windows, when you can run the real thing?
+
+A: There are various reasons:
+
+ <ul>
+ <li> About half the contributors to Mono are Windows developers.
+ They have many different for contributing to the effort, and
+ we find it very important to let those developers run the runtime on Windows without forcing
+ them to use a new operating system.
+
+ <li> Supporting Windows helps us identify the portable portions
+ of Mono from the non-portable versions of it, helping Mono
+ become more portable in the future.
+
+ <li> Mono does not heavily modify the windows registry, update system DLLs,
+ install DLLs to the Windows/System32 path. Another words, I knew Mono would
+ not cause any legacy enterprise applications to stop working - and it
+ hasn't. However, our CIO er is againt it because of the changes that would
+ be made to Windows 2000, such as, affecting security.
+ </ul>
+
+<a name="compatibility"></a>
+** Compatibility
+
+Q: Can Mono run applications developed with the Microsoft.NET framework?
+
+A: Yes, Mono can run applications developed with the Microsoft .NET Framework
+ on Unix. There are a few caveats to keep in mind: Mono has not
+ been completed yet, so a few API calls might be missing; And in
+ some cases the Mono behavior *might* be incorrect.
+
+Q: Will missing API entry points be implemented?
+
+A: Yes, the goal of Mono is to implement precisely the .NET Framework
+ API (as well as compile-time selectable subsets, for those
+ interested in a lighter version of Mono).
+
+Q: If the behavior of an API call is different, will you fix it?
+
+A: Yes, we will. But we will need your assistance for this. If you find a bug
+ in the Mono implementation, please fill a bug report in <a
+ href="http://bugzilla.ximian.com">http://bugzilla.ximian.com</a>.
+ Do not assume we know about the problem, we might not, and using the bug tracking
+ system helps us organize the development process.
+
+Q: Can I develop my applications on Windows, and deploy on a supported
+ Mono platform (like Linux)?
+
+A: Yes, you can.
+
+ As of today, Mono is not 100% finished, so it is sometimes useful
+ to compile the code with Mono, to find out if your application
+ depends on unimplemented functionality.
+
+Q: Will applications run out the box with Mono?
+
+A: Sometimes they will. But sometimes a .NET application might invoke
+ Win32 API calls, or assume certain patterns that are not correct
+ for cross-platform applications.
+
+Q: What is a 100% .NET application?
+
+A: A `100% .NET application' is one that only uses the APIs defined
+ under the System namespace and does not use P/Invoke. These
+ applications would in theory run unmodified on Windows, Linux,
+ HP-UX, Solaris, MacOS X and others.
+
+ Note that this requirement also holds for all assemblies used by the
+ application. If one of them is Windows-specific, then the entire program
+ is not a 100% .NET application.
+
+ Furthermore, a 100% .NET application must not contain non-standard data
+ streams in the assembly. For example, Visual Studio .NET will insert a
+ <tt>#-</tt> stream into assemblies built under the "Debug" target.
+ This stream contains debugging information for use by Visual Studio .NET;
+ however, this stream can not be interpreted by Mono (unless you're willing
+ to donate support).
+
+ Thus, it is recommended that all Visual Studio .NET-compiled code be
+ compiled under the Release target before it is executed under Mono.
+
+Q: Can I execute my Visual Studio .NET program (Visual Basic .NET, Visual C#,
+ Managed Extensions for C++, etc.) under Mono?
+
+A: Yes, with some reservations.
+
+ The .NET program must either be a 100% .NET application, or (somehow) have
+ all dependent assemblies available on all desired platforms. (How to do so
+ is outside the bounds of this FAQ.)
+
+ For example, since Mono's System.Windows.Forms implementation will use
+ Wine, System.Windows.Forms is only as portable as Wine is. It's possible
+ that Mono may run on a platform, but Wine will not, in which case a
+ System.Windows.Forms app will not run on that platform. This is similarly
+ true for all assemblies that are not 100% managed code.
+
+ Mono must also have an implementation for the .NET assemblies used. For
+ example the System.EnterpriseServices namespace is part of .NET, but it
+ has not been implemented in Mono. Thus, any applications using this
+ namespace will not run under Mono.
+
+ With regards to languages, C# applications tend to be most portable.
+
+ Visual Basic .NET applications are portable, but Mono's
+ Microsoft.VisualBasic.dll implementation is incomplete. It is recommended
+ to either avoid using this assembly in your own code, only use the
+ portions that Mono has implemented, or to help implement the missing
+ features. Additionally, you can set 'Option Strict On', which
+ eliminates the implicit calls to the unimplemented
+ Microsoft.VisualBasic.CompilerServices.ObjectType class.
+ (Thanks to Jörg Rosenkranz.)
+
+ Managed Extensions for C++ is least likely to operate under Mono. Mono
+ does not support mixed mode assemblies (that is, assemblies containing both
+ managed and unmanaged code, which Managed C++ can produce). You need a
+ fully-managed assembly to run under Mono, and getting the Visual C++ .NET
+ compiler to generate such an executable can be difficult. You need to use
+ only the .NET-framework assemblies, not the C libraries (you can't use
+ <b>printf</b>(3) for example.), and you need to use
+ the linker options <tt>/nodefaultlib /entry:main mscoree.lib</tt> in
+ addition to the <tt>/clr</tt> compiler flag. You can still use certain
+ compiler intrinsic functions (such as <b>memcpy</b>(3)) and the STL.
+ You should also see <a
+ href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmex/html/vcgrfconvertingmanagedextensionsforcprojectsfrommixed-modetopureil.asp"
+ >Converting Managed Extensions for C++ Projects from Mixed Mode to Pure
+ Intermediate Language</a> at MSDN.
+ Finally, you can use PEVERIFY.EXE from the .NET SDK to determine if the
+ assembly is fully managed.
+
+ Thanks to Serge Chaban for the linker flags to use.
+
<a name="pnpproject"></a>
** Mono and Portable.NET
It is easier to describe what is unique about Mono:
<ul>
+ <li> An advanced native-code compilation engine: Both
+ just-in-time compilation (JIT) and pre-compilation of CIL
+ bytecodes into native code are supported.
+
+ <li> A foundation for code optimization: The new code generator in
+ Mono builds on the experience of our first JIT engine, and enables
+ us to implement various advanced compiler optimization
+ tricks. With an SSA-framework, plenty of new optimizations are possible.
+
+ The current list of optimizations are: Peephole postpass,
+ Branch optimizations, Inline method calls, Constant folding, Constant
+ propagation, Copy propagation, Dead code elimination, Linear scan
+ global reg allocation, Conditional moves, Emit per-domain code,
+ Instruction scheduling, Intrinsic method implementations, Tail
+ recursion and tail calls, Loop related optimizations, Fast x86 FP
+ compares, Leaf procedures optimizations
+
<li> A self-hosting C# compiler written in C#, which is clean, easy
to maintain.
+ <li> Focus on the .NET Framework: we are tracking down the .NET
+ Framework API definition, as we believe it is the API people
+ will be most familiar with.
+
<li> A multi-platform runtime engine: both a JIT engine and an
interpreter exist. The JIT engine runs currently on x86
- systems, while the interpreter works on SPARC, StrongARM and
- PowerPC systems.
+ systems, while the interpreter works on SPARC, StrongARM,
+ s390 and PowerPC systems.
+
+ Our new compilation engine is being ported to the PowerPC.
- <li> Supports Linux, Windows and Solaris at this point.
+ <li> Supports Linux, BSD, Windows and Solaris at this point.
<li> The JIT engine is written using a portable instruction
- selector which not only generates good code (we are told
- that we are faster than Rotor, but it is hard to tell) but
+ selector which not only generates good code but
is also the foundation to re-target the JIT engine to other
systems.
- The system employed is described in various compiler
- books and it is very similar to what is described in the
- book that covers LCC, the ANSI C retargetable C compiler.
-
- <li> The JIT engine supports in-lining, constant folding and propagation,
-
- <li> Full support for remoting in the runtime, but the class
- libraries are still behind.
+ <li> Full support for remoting in the runtime.
<li> The C# compiler, the JIT engine and the class libraries are
- mature enough that the whole system is self-hosting. This means that
- we develop Mono completely with itself at this point.
+ mature enough that the whole system has been self-hosting
+ since April 2002. This means that we develop Mono
+ completely with itself at this point.
- <li> We are not yet done, and there is a lot of work left to be
- done
+ By forcing ourselves to use our own code to develop our
+ tools, we bug fix problems rapidly, and the system is
+ overall more robust and tested than if we did not.
<li> We have a great community of developers, without which Mono
would not be possible.
-
- <li> We will provide an ahead of time compilation mode in the
- future.
</ul>
+ In general, Mono is more mature and complete since it has been used
+ to develop itself, which is a big motivator for stability and
+ correctness, while Portable.NET remains pretty much an untested
+ platform.
+
+Q: I hear Mono keeps changing the P/Invoke API, why?
+
+A: We are just fixing our implementation to be compatible with the
+ Microsoft implementation. In other words, the Mono P/Invoke API is
+ more complete when compared to the Portable.NET version, hence
+ various pieces of software that depend on this extended
+ functionality fail to work properly with Portable.NET.
+
<a name="webservices"></a>
** Web Services
exposing it to other RPC systems (like CORBA) is really simple, and
does not even require support from an object.
- We will be implementing CORBA inter-operation as an extension to the
- Mono classes so that we can integrate with Bonobo, just like
- Microsoft provides COM inter-operation classes and support
- mechanisms.
+ <a href="http://remoting-corba.sourceforge.net/">Remoting.CORBA</a> is
+ a CORBA implementation that is gaining momentum.
+
+ Building an implementation of the Bonobo interfaces once this is ready
+ should be relatively simple.
Q: Can I serialize my objects to other things other than XML?
Q: Will Mono use ORBit?
-A: No. Mono will be using a new implementation of CORBA that isn't still started.
+A: There are a few advantages in using ORBit, like reusing existing code
+ and leveraging all the work done on it. Michael Meeks has posted
+ a few <a href="http://lists.ximian.com/archives/public/mono-list/2002-September/008592.html">reasons</a>,
+ as well as some <a href="http://lists.ximian.com/archives/public/mono-list/2002-September/008657.html">ideas</a>
+ that could be used to reuse ORBit.
+
+ Most users are likely to choose a native .NET solution, like <a href="http://cvs.gnome.org/bonsai">Remoting.CORBA</a>
+
<a name="monodoc"></a>
** MonoDoc
Q: What is MonoDoc?
-A: MonoDoc is a graphical documentation editor and viewer. Currently, MonoDoc
- consists of a Gtk# application and is in heavy development. There is also a
- Qt# version of it.
-
+A: MonoDoc is a graphical documentation browser for the Mono class
+ libraries. Currently, monodoc consists of a Gtk# application and is
+ in heavy development.
<a name="devel"></a>
** Development Tools and Issues
+Q: I am having trouble compiling a new version of Mono from CVS, it
+ complains about my runtime being out of sync.
+
+A: Jonathan Pryor has provided the following answer:
+
+ To upgrade your class libraries and compiler, see the See
+ README.building in the MCS directory.
+
+ The single biggest source of confusion seems to be the "Your
+ runtime is out of sync" messages. Realize that this is *normal*
+ while BUILDING. Think about it: you're building a new class
+ library with the old runtime. If the new class library references
+ a function that the old runtime knows nothing about, the runtime
+ system issues this warning.
+
+ Basically what needs to happen is for a new mono runtime to be
+ compiled, then the corlib class library be compiled, and once this
+ is done, install the new runtime, followed by corlib.
+
+ Once this is done, you can continue building your entire
+ environment.
+
Q: Will it be possible to use the CLI features without using byte codes
or the JIT?
initially using the Microsoft implementation of the CLI and then
executed later with Mono.
+ We are recommending people to use and contribute to existing
+ projects like SharpDevelop, Anjuta and Eclipse.
+
Q: What kind of rules make the Common Intermediate Language useful for
JITers?
Pages" technology so as they are very different things, they don't
conflict.
-Q: What about using something like Jabber instead of the System.Messaging
- namespace?.
-
-A: In short, MSMQ is not something like Jabber, but asynchronous messaging
- through queues. Useful queues do more than serialize messages, they are
- also platform bridges.
-
-Q: Are you supporting XMLDocument and relatives?.
-
-A: Currently, we aren't implementing them yet. It would require updates to
- most of the XmlNode derivatives so it's not a trivial task. We are
- currently focusing on getting XPath support working.
-
Q: Is there any plan to develop an aspx server for Mono?.
-A: The web server turned out to be very simple compared to the rest of the
- work. Gonzalo has got the page generator mostly done (a module called
- xsp, who has nothing to do with the XSP term used in the Apache Project).
- Patrik has done a lot of the work to get the ProcessRequest to work.
- You can try to help in the final touches to the System.Web classes and
- writing regression tests for the widgets we have.
+A: The XSP reference server is available and you can also use mod_mono
+ with Apache.
Q: Is there any way I can develop the class libraries using Linux yet?
-A: Yes. Some class libraries can be developed on Linux. Search for
- Paolo's post (he lists which classes can be compiled fine now).
+A: Yes. Mono has been self hosting since May 2002.
Q: Is there any way I can install a known working copy of mono in /usr,
and an experimental copy somewhere else, and have both copies use
A: We rename corlib to mscorlib also when saving the PE files, in fact,
the runtime can execute program created by mono just fine.
-Q: Is there a relatively straightforward way to repeat the steps taken
- by Paolo to get Mono completely self-hosted on Linux?
-
-A: To build the compiler and class libraries in Linux, run:
- <ul><li>make -f makefile.gnu. To install them, run: </li>
- <li>make -f makefile.gnu install prefix=/opt/mono</li>
- </ul>
-
- If you want to produce and distribute a monocharge tarball, run:
- make -f makefile.gnu dist
- Of course you have to run these in the top level mcs directory.
-
Q: Is it possible to build a C# file to some sort of intermediate format which
can linked into a final module, like the traditional .c -> .o -> .so path?
-A: You could do: mcs /target:module file1.cs, mcs /target:module file2.cs,
- mcs /target:exe file1.dll file2.dll /out:mybin.exe
+A: You can use:
+
+ mcs /target:library file1.cs, mcs /target:library file2.cs,
+ mcs /target:exe file1.dll file2.dll /out:mybin.exe
+
+Q: Is there any plans for implementing remoting in the near future?
+
+A: The remoting infrastructure is in place. We have implementations
+ of the TcpChannel, HttpChannel and the Soap and Binary Formatters.
+ They are compatible with .NET.
+
+ However, some classes from the library may have a different binary
+ representation, because they may have a different internal data
+ structure, so for example you won't be able to exchange a Hastable
+ object between Mono and MS.NET. It should not be a problem if you
+ are using primitive types, arrays or your own classes. In any case,
+ could you post a test case?
+
+
+Q: My C code uses the __stdcall which is not availble on Linux, how can I
+ make the code portable Windows/Unix across platforms?
+
+A: Replace the __stdcall attribute with the STDCALL macro, and include this
+ in your C code for newer gcc versions:
+
+ #ifndef STDCALL
+ #define STDCALL __attribute__((stdcall))
+ #endif
+
+Q: I want to be able to execute Mono binaries, without having to use the "mono"
+ command. How can I do this?
+
+A: From Carlos Perelló:
+
+ <i>I think that the best solution is the binfmt feature with the
+ wrapper that exists with Debian packages at:
+
+ <a href="http://www.debianplanet.org/mono/dists/unstable/main/source/admin/">http://www.debianplanet.org/mono/dists/unstable/main/source/admin/</a>
-Q: Is there any plans for implementing remoting in the near future?, When will
- work in System.Runtime.Remoting.dll start?
+ If you want use it with Big endian machines, you should apply a patch
+ (<a href="http://carlos.pemas.net/debian/mono/binfmt-detector-cli.c.diff">http://carlos.pemas.net/debian/mono/binfmt-detector-cli.c.diff</a>)
-A: The remoting infrastructure is in place. Some of the channels and
- formatters are not.
+ It works really good and lets you use wine also, it reads the .exe file
+ headers and check if it's a .net executable.
-Q: I'm wondering if there are any plans to start using nant to build the
- class lib + test lib. i think that every project need/should use an
- automated build process and nant + a couple of tools enables this. is
- the problem that the compiler can't run nant yet?
+ This way you just execute: ./my-cool-mono-application.exe and it works
+ without the need of any wrapper.</i>
-A: Maybe well be doing some sort of automated build process + testing when
- the summer finish.
+Q: I see funny characters when I run programs, what is the problem?
+
+A: (From Peter Williams and Gonzalo Paniagua):
+
+ This is Red Hat 9 (probably) using UTF8 on its console; the bytes are
+ the UTF8 endianness markers. You can do:
+
+ LC_ALL=C mono myexe.exe
+
+ And they wont show up.
+
+ Alternatively, you can do:
+
+ $ echo -e "\033%G"
+
+ to enable UTF-8 on the console.
<a name="asp">
** Mono and ASP.NET
-Q: Is Mono supporting ASP.NET?
+Q: Does Mono support ASP.NET?
-A: Yes. The development of the support for ASP.NET comes in various stages,
- here is what Gonzalo has been working on: 1. The Parser. 2. Getting the
- parser to generate output compatible with ASP.NET. 3. Running the sample
- output with the real Microsoft runtime but using our generated page. 4.
- Running the sample with our classes with the .NET runtime. 5. Running
- our sample code with our classes with our runtime. This is the process
- we are following. Currently Gonzalo has reached point 5.
+A: Yes.
+
+ Mono supports ASP.NET, we have shown an unmodified IBuySpy
+ installation running on Mono as well as various other programs. You can
+ try it yourself downloading the XSP server.
Q: Do I need install cygwin to work on ASP.NET in mono or Linux is enough since
it is self host right now.
A: Linux is enough.
+Q: How can I run ASP.NET-based applications with Mono?
+
+A: You need the Mono runtime and a hosting web server. Currently we distribute a
+ small web server called `xsp' which is used to debug applications, or you can choose
+ to use Daniel's Apache 2 module.
+
Q: Any plan to make ASP.NET in mono works with Apache in Linux?.
-A: Yes, we have plans to do so, but we need to wait for Patrik's patches to
- HttpRuntime. Once that is there, writing a mod_mono should be trivial
- (look at mono/samples/embed for a sample embedded application).
+A: Daniel has authored an Apache2 Module for Mono that hosts the ASP.NET runtime
+ and is available here: <a
+ href="http://apacheworld.org/modmono/">http://apacheworld.org/modmono/</a>
+
+Q: Will you support Apache 1?
+
+A: Modules developed for Apache 2 are not compatible with Apache 1.3
+ Daniel plans to support Apache 1.3 in the future but the current focus is on
+ Apache 2, because of the better support for threading and Windows.
+
+Q: Can I run Apache 1 and Apache 2 on the same machine?
+
+ You can always keep a copy of Apache 2 running in parallel with your Apache
+ 1.3 (either different port or using a reverse proxy).
+
+ You can also bind the two servers to different IP addresses on the
+ same physical machine.
<a name="ado">
** Mono and ADO.NET
you can be sure that things will work the same in Mono as with the Microsoft
implementation.
+Q: Does Mono can to connect to Sybase by using Mono.Data.*?
+
+A: Yes. use Mono.Data.SybaseClient. First of all you have to create a
+ SybaseConnection, and then, from it, use it as any other
+ IDbConnection-based class.
+
<a name="java">
** Mono and Java
Q: Could Java target the CLI?
-A: Yes, Java could target the CLI. We have details on a <a
- href="ideas.html#guavac">project</a> that someone could take on to
- make this happen.
+A: Yes, Java could target the CLI, Microsoft's J# compiler does that.
- Microsoft has an implementation of the Java language called J# that
- can target the CIL execution engine.
+ The <a href="http://weblog.ikvm.net/">IKVM</a> project builds a
+ Java runtime that works on top of .NET and on top of Mono. IKVM is
+ essentially a JIT compiler that translates from JVM bytecodes into
+ CIL instructions, and then lets the native JIT engine take over.
Q: Is it possible to write a JVM byte code to CIL converter?
be translated into the equivalent "meaning" in CLR-land.
</ul>
+ See also the <a href="http://weblog.ikvm.net/">IKVM project</a>
+
Q: Could mono become a hybrid CIL/java platform?
A: No. It is quite far from the philosophy of the project. The idea of Mono
Q: Do you plan to implement a Javascript compiler?
-A: Yes. Eto Demerzal has started a Rhino port to C#.
- After this is completed, we will begin developing
- the JavaScript compiler.
+A: Yes. The beginnings of the JScript compiler can be found on CVS.
+ Cesar coordinates this effort.
+
+Q: Can Mono or .NET share system classes (loaded from mscore.dll and other
+ libs) or will it behave like Sun's Java VM?
+
+A: What you can do with mono is to load different applications in their own
+ application domain: this is a feature of the CLR that allows sandboxing
+ applications inside a single process space. This is usualy exploited to
+ compartmentalize different parts of the same app, but it can also be
+ effectively used to reduce the startup and memory overhead.
+ Using different appdomains the runtime representation of types and
+ methods is shared across applications.
<a name="extending"></a>
** Extending Mono
encourage you to make those classes operate correctly well in both
Mono and .NET.
+ Today Mono ships with a number of extra libraries that were
+ developed either by members of the Mono community, or other
+ groups.
+
Q: Is there any way I can develop the class libraries using Linux yet?
-A: Yes. Some class libraries can be developed on Linux. Search for
- Paolo's post (he lists which classes can be compiled fine now).
+A: Yes. Mono has been selfhosting since March 2002.
Q: Is there any way I can install a known working copy of mono in /usr,
and an experimental copy somewhere else, and have both copies use
Q: What do I need to watch out for when programming in VB.NET so that I'm
sure to be able to run those apps on Linux?
-A: Not making any PInvoke or DLL calls should and not using anything in
+A: Not making any P/Invoke or DLL calls should and not using anything in
the Microsoft.* namespaces should suffice. Also do not use any
Methods/Classes marked as "This type/method supports the .NET Framework
infrastructure and is not intended to be used directly from your code."
but as a general rule, we will accept the code under the same
terms of the "container" module.
-Q: Is the Mono
-
-
<a name="patents"></a>
** Patents
patents filed now, or changes made by Microsoft specifically to
create patent problems)?
-A: No. First, its basic functional capabilities have pre-existed too
- long to be held up by patents. The basic components of Mono are
- technologically equivalent to Sun's Java technology, which has been
- around for years.
-
- Mono will also implement multi-language and
- multi-architecture support, but there are previous technologies
- such as UCSD p-code and ANDF that also support multiple languages
- using a common intermediate language. The libraries are similar
- to other language's libraries, so again, they're too similar to
- be patentable in large measure.
-
- However, if Microsoft does patent some technology, then our plan is
- to either (1) work around it, (2) chop out patented pieces, (3)
- find prior art that would render the patent useless.
+A: First some background information.
+
+ The .NET Framework is divided in two parts: the ECMA/ISO covered
+ technologies and the other technologies developed on top of it like
+ ADO.NET, ASP.NET and Windows.Forms.
+
+ Mono implements the ECMA/ISO covered parts, as well as being a
+ project that aims to implement the higher level blocks like
+ ASP.NET, ADO.NET and Windows.Forms.
+
+ The Mono project has gone beyond both of those components and has
+ developed and integrated third party class libraries, the most
+ important being: Debugging APIs, integration with the Gnome
+ platform (Accessibility, Pango rendering, Gdk/Gtk, Glade, GnomeUI),
+ Mozilla, OpenGL, extensive database support (Microsoft only
+ supports a couple of providers out of the box, while Mono has
+ support for 11 different providers), our POSIX integration
+ libraries and finally the embedded API (used to add scripting to
+ applications and host the CLI, or for example as an embedded
+ runtime in Apache).
+
+ The core of the .NET Framework, and what has been patented by
+ Microsoft falls under the ECMA/ISO submission. Jim Miller at
+ Microsoft has made a statement on the patents covering ISO/ECMA,
+ (he is one of the inventors listed in the patent): <a
+ href="https://mailserver.di.unipi.it/pipermail/dotnet-sscli/msg00218.html">here</a>.
+
+ Basically a grant is given to anyone who want to implement those
+ components for free and for any purpose.
+
+ The controversial elements are the ASP.NET, ADO.NET and
+ Windows.Forms subsets. Those are convenient for people who need
+ full compatibility with the Windows platform, but are not required
+ for the open source Mono platform, nor integration with today's
+ Mono's rich support of Linux.
+
+ The Mono strategy for dealing with these technologies is as
+ follows: (1) work around the patent by using a different
+ implementation technique that retains the API, but changes the
+ mechanism; if that is not possible, we would (2) remove the pieces
+ of code that were covered by those patents, and also (3) find prior
+ art that would render the patent useless.
Not providing a patented capability would weaken the
interoperability, but it would still provide the free software /
open source software community with good development tools, which
is the primary reason for developing Mono.
+ The patents do not apply in countries where software patents are
+ not allowed.
+
+ For Linux server and desktop development, we only need the ECMA
+ components, and things that we have developed (like Gtk#) or Apache
+ integration.
+
+Q: Is Mono only an implementation of the .NET Framework?
+
+A: Mono implements both the .NET Framework, as well as plenty of class
+ libraries that are either Unix specific, <a
+ href="http://www.gnome.org">Gnome</a> specific, or that are not
+ part of the .NET Framework but people find useful.
+
+ The following map shows the relationship between the components:
+
+ <img src="http://primates.ximian.com/~miguel/tmp/map.png">
+
<a name="etc"></a>
** Miscellaneous Questions
Linux when disconnected from the Web (and that has better
interactions than a web page).
+Q: Is there a command-line tool that allows me to access .NET interactively?
+
+A: There are several but one that is free software and uses MCS is the one
+ Dennis Lu from Rice University is working on; a REPL C# interpreter.
+
+Q: Is it possible to use Visual C++ with Mono?.
+
+A: It's possible to run VC++ generated apps under Mono, but we do not
+ provide a Manager C++ compiler ourselves.
+
<a name="problems"></a>
** Mono Common Problems
or if you think that you found a bug, etc. Please visit the
<a href="http://geneura.ugr.es/~jaime/deploy/mono-common-problems.html">Mono Common Problems</a> document and try there.
+** Credits
+
+ The FAQ contains material contributed by Miguel de Icaza, Jaime Anguiano, Lluis Sánchez.