| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670 |
- <a href="#basics">Basics</a><br>
- <a href="#novell">The Novell Role in the Mono project</a><br>
- <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>
- <a href="#ado">Mono and ADO.NET</a><br>
- <a href="#monodoc">MonoDoc</a><br>
- <a href="#devel">Development Tools and Issues</a><br>
- <a href="#java">Mono and Java</a><br>
- <a href="#extending">Extending Mono</a><br>
- <a href="#portability">Portability</a><br>
- <a href="#reuse">Reusing Existing Code</a><br>
- <a href="#gcc">Mono and GCC</a><br>
- <a href="#performance">Performance</a><br>
- <a href="#licensing">Licensing</a><br>
- <a href="#patents">Patents</a><br>
- <a href="#etc">Miscellaneous Questions</a><br>
- <a href="#obfuscation">Obfuscation</a></br>
- <a href="#problems">Mono Common Problems</a><br>
- A <a
- href="http://www.monohispano.org/tutoriales/mono-puf//">Spanish
- translation</a> is also available (it is outdated though)
- <a name="basics"></a>
- ** Basics
- Q: What is Mono exactly?
- A: The Mono Project is an open development initiative sponsored by
- Ximian that is working to develop an open source, Unix
- version of the Microsoft .NET development platform. Its objective
- is to enable Unix developers to build and
- deploy cross-platform .NET Applications. The project will
- 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
- Microsoft, one part of which is a cross-platform development
- framework. Mono is an implementation of the development framework,
- but not an implementation of anything else related to the .NET
- Initiative, such as Passport or software-as-a-service.
- Q: What technologies are included in Mono?
- A: Mono contains a number of components useful for building new
- software:
- <ul>
- * A Common Language Infrastructure (CLI) virtual
- machine that contains a class loader, Just-in-time
- compiler, and a garbage collecting runtime.
- * A class library that can work with any language
- 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
- Language Runtime.
- </ul>
- Windows has compilers that target the virtual machine from <a
- href="http://msdn.microsoft.com/net/thirdparty/default.asp#lang">a
- number of languages:</a> Managed C++, Java Script, Eiffel,
- Component Pascal, APL, Cobol, Perl, Python, Scheme,
- Smalltalk, Standard ML, Haskell, Mercury and Oberon.
- The CLR and the Common Type System (CTS) enables applications and
- libraries to be written in a collection of different languages that
- target the byte code
- This means for example that if you define a class to do algebraic
- manipulation in C#, that class can be reused from any other
- language that supports the CLI. You could create a class in C#,
- subclass it in C++ and instantiate it in an Eiffel program.
- A single object system, threading system, class libraries, and
- garbage collection system can be shared across all these languages.
-
- Q: Where can I find the specification for these technologies?
- A: You can find the information here:
-
- C# <a href="http://www.ecma.ch/ecma1/STAND/ecma-334.htm">http://www.ecma.ch/ecma1/STAND/ecma-334.htm</a>
- CLI <a href="http://www.ecma.ch/ecma1/STAND/ecma-335.htm">http://www.ecma.ch/ecma1/STAND/ecma-335.htm</a>
- Q: Will you implement the .NET Framework SDK class libraries?
- A: Yes, we will be implementing the APIs of the .NET Framework SDK
- class libraries.
- Q: Will you offer an ECMA-compliant set of class libraries?
- A: Eventually we will. Our current focus is on inter-operating
- with the Microsoft SDK, but we will also offer an ECMA compliant
- subset of the libraries.
- Q: What does the name "Mono" mean?
- A: Mono is the word for `monkey' in Spanish. We like monkeys.
- Q: Does Mono work today?
- A: The execution engine works on various platforms, we support
- Just-in-Time and Ahead-of-Time compilations on Intel x86 machines
- (and soon PowerPC).
- The class libraries are mature enough to run various real
- applications: our C# compiler, ASP.NET, and Gtk#-based
- applications.
- Q: When will you ship Mono?
- A: Please see the <a href="mono-roadmap.html">Mono Roadmap</a> for
- more details on the release plans.
- Q: How can I contribute?
- A: Check the <a href="contributing.html">contributing</a> section.
- Q: Aren't you just copying someone else's work?
- A: We are interested in providing the best tools for programmers to
- develop applications for Free Operating Systems. We also want to help
- provide the interoperability that will allow those systems to fit in
- with other standards.
- For more background, read the <a href="http://www.go-mono.com/rationale.html">Mono
- Project white paper</a>.
- the project.
- Q: Miguel said once that Mono was being implemented in COBOL. Is that true?.
- A: No. It was a joke.
- <a name="novell"></a>
- ** The Novell Role in the Mono Project
- Q: Why is Novell working on .NET?
- A: Novell is interested in providing the best tools for programmers to
- develop applications for Free Operating Systems.
- For more information, read the project <a
- href="rationale.html">rationale</a> page.
- Q: Will Novell be able to take on a project of this size?
- A: Of course not. Novell is a supporter of the Mono project, but the only way
- to implement something of this size is for the entire free software
- community to get involved. Visit the <a href="contributing.html">contributing</a>
- page if you'd like to help out.
- Q: What pieces is Novell working on?
- A: We will devote most of our resources to work on the pieces which are
- on the critical path to release a development and execution
- environment. Once the project is at a stage where it is useful in
- the real world, it will achieve a critical mass of developers to
- improve it further.
- Q: Will Novell offer Mono commercially?
- A: When Mono is ready to be shipped Ximian will offer a commercial
- support and services for Mono. Mono components are also
- available to be licensed commercially. For licensing details,
- contact <a
- href="mailto:[email protected]">[email protected]</a>
- Q: Does Novell provide consulting services around Mono?
- A: Yes, Novell does provide consulting services around Mono to
- make it suitable to your needs. Porting the runtime engine,
- customizing it, working on specific classes or tuning the code
- for your particular needs.
- Please contact <a
- href="mailto:[email protected]">[email protected]</a>
- for consulting services information.
- Q: Will you wait until Mono is finished?
- A: Mono will ship on various stages as they mature. Some people
- require only a subset of the technologies, those will ship first,
- see the <a href="mono-roadmap.html">Mono Roadmap</a> for details
- <a name="gnome"></a>
- ** Mono and GNOME
- Q: How is Mono related to GNOME?
- A: In a number of ways. This project was born out of the need of
- providing improved tools for the GNOME community, and will use
- existing components that have been developed for GNOME when they
- are available. For example, we plan to use Gtk+ and Libart to
- implement Winforms and the Drawing2D API and are considering
- GObject support.
- Mono team members work actively on the <a
- href="http://gtk-sharp.sf.net">Gtk#</a> project: a binding of the
- GNOME class libraries for .NET and Mono.
- Q: Has the GNOME Foundation or the GNOME team adopted Mono?
- A: Mono is too new to be adopted by those groups. We hope that the
- tools that we will provide will be adopted by free software
- programmers including the GNOME Foundation members and the GNOME
- project generally.
- Q: Should GNOME programmers switch over to Mono now?
- A: It is still far to early for discussions of "switching over." No
- pieces of Mono will be ready within the next six months, and a
- complete implementation is roughly one year away.
- We encourage GNOME developers to continue using the existing tools,
- libraries and components. Improvements made to GNOME will have an
- impact on Mono, as they would be the "back-end" for various classes.
- Q: Will Mono include compatibility with Bonobo components? What is the
- relationship between Mono and Bonobo?
- A: Yes, we will provide a set of classes for implementing and using
- Bonobo components from within Mono. Mono should allow you to write
- Bonobo components more easily, just like .NET on Windows allows you
- to export .NET components to COM.
- Q: Does Mono depend on GNOME?
- A: No, Mono does not depend on GNOME. We use a few packages produced by
- the GNOME team like the `glib' library, we also use other
- third-party open source libraries like Cairo and ICU.
- Q: But will I be able to build GNOME applications?
- A: Yes, we will enable people to write GNOME applications using Mono.
- Q: Do you have C# bindings for GNOME?.
- A: Yes, the <a href="http://gtk-sharp.sf.net">Gtk# project</a>
- provides bindings for Gtk+, Gdk, Atk, libgnome, libgnomecanvas, and
- libgnomeui. Other libraries under the GNOME framework will be
- added on an as-needed (and as-requested) basis.
- <a name="gui"></a>
- ** GUI applications
- Q: Will Mono enable GUI applications to be authored?
- A: Yes, you will be able to build GUI applications. Indeed, that is
- our main focus. Today you can use Gtk# or #WT to develop GUI
- applications, and support for Windows.Forms is underway.
- Q: What is the difference between Gtk# and System.Windows.Forms?
- A: Gtk# is a set of bindings for the Gtk+ toolkit for C# (and other
- CIL-enabled languages), it integrates natively with the Gnome
- desktop. System.Windows.Forms is an API defined by Microsoft to
- build GUI applications.
- Q: What are you using to implement Windows.Forms?
- A: Windows.Forms is currently being implemented on top of a modified
- version of Wine that can be used as a library: WineLib.
- Essentially Wine is used as a library that happens to implement the
- "Win32" toolkit and our Windows.Forms becomes a managed layer on
- top of this toolkit.
- There are several advantages in this approach: we get Wndproc
- message compatibility for free (Wndproc is an overridable method in
- the Control class and it is used to perform advanced tricks with
- the GUI toolkit) as well as allowing third-party controls that are
- used to P/Invoke into Win32 in the Windows world to work out of the
- box on Linux/MacOS.
- Q: Why not implement System.Windows.Forms on top of Gtk# or Qt#?
- A: Compatibility.
- Although it is possible to run simple Windows.Forms applications
- with the Gtk#-based backend of Windows.Forms, it is very unlikely
- that the implementation will ever implement everything needed for
- full compatibility with Windows.Forms.
- The reason is that Windows.Forms is not a complete toolkit, and to
- work around this problem some of the underlying Win32 foundation is
- exposed to the programmer in the form of exposing the Windows
- message handler (WndProc). Any control can override this method.
- Also developers often P/Invoke into Win32 to get to functionality
- that was not wrapped.
- To achieve full compatibility, we would have to emulate this, and
- it would take too long.
- For more details see the <a href="winforms.html">winforms 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
- of P/Invoke to call Win32 functions, your smart client applications
- will run on Mono platforms.
- Q: Where can I learn more about Gtk#?
- A: The following <a href="http://gtk-sharp.sourceforge.net">link</a> sends you to the page of the project.
- Q: What can I do with Gtk#?.
- A: Gtk# is becoming very usable and you can create applications and
- applets like those you see in a GNOME desktop environment. It's
- easy to install so it's worth a try.
- Q: How can I compile my HelloWorld.cs which uses Gtk#?.
- A: Try: mcs -r:gtk-sharp HelloWorld.cs
- Q: Is there any way how to connect DataAdapter to some GTK# controls?
- A: There is a sample file called `DbClient' in gtk-sharp/samples that you
- might to look at. It is a sample program in Gtk# that adds/updates/deletes
- information on a Postgress database. When we have the new table/tree widgets,
- I am sure someone would write an adapter for System.Data (in Gtk2 the
- tree/list widgets are written using a view/model, so you only need to write
- a model that maps to the database). You can have a look at
- gtk-sharp/sample/DbClient, where there is a GTK# application that uses
- System.Data. It does not use DataAdapter, but DataReader though.
- Q: Do you have an estimate for when Windows.Forms will be released?
- A: The plan currently is aimed at Q4/2004.
- 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: 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 was also invited to participate in the ECMA committee
- meetings for C# and the CLI.
- Q: Are Microsoft or Corel paying Ximian to do this?
- A: No.
- Q: Do you fear that Microsoft will change the spec and render Mono
- useless?
- A: No. Microsoft proved with the CLI and the C# language that it was
- possible to create a powerful foundation for many languages to
- inter-operate. We will always have that.
- Even if changes happened in the platform which were undocumented,
- the existing platform would a value on its own.
- Q: Are you writing Mono from the ECMA specs?
- A: Yes, we are writing them from the ECMA specs and the published
- materials in print about .NET.
- Q: If my applications use Mono, will I have to pay a service fee?
- A: No. Mono is not related to Microsoft's initiative of
- software-as-a-service.
- Q: Is the Mono Project is related to the Microsoft Hailstorm effort? Is
- Ximian endorsing Hailstorm?
- A: No. The Mono Project is focused on providing a compatible set of
- tools for the Microsoft .NET development platform. It does not
- address, require, or otherwise endorse the MS Passport-based
- Hailstorm single sign-on system that is part of Windows XP and
- other services.
- Q: Will Mono or .NET applications depend on Microsoft Passport?
- A: No. MS Passport is unrelated to running .NET compatible applications
- produced with the Mono tools. The only thing you will need is a
- just-in-time compiler (JIT).
- Q: If Microsoft will release a port of their .NET platform under the
- `Shared Source' license, why should I bother with anything else?
- A: The Shared Source implementation will be expensive and its uses
- will be tightly restricted, especially for commercial use. We are
- working towards an implementation that will grant a number of
- important rights to recipients: use for any purpose,
- redistribution, modification, and redistribution of modifications.
- This is what we call <a
- href="http://www.gnu.org/philosophy/free-sw.html">Free Software</a>
- Q: Is Mono a free implementation of Passport?
- A: No. Mono is just a runtime, a compiler and a set of class
- libraries.
- Q: Will the System.Web.Security.PassportIdentity class mean
- that my software will depend on Passport?
-
- A: No. Applications may use that API to contact a Passport site, but
- are not required to do so.
- As long as your application does not use Passport, you will not
- need Passport.
- Q: Will Mono running on Linux make Passport available for Linux?
- A: No. However, the Passport toolkit for Linux-based web servers is
- available from Microsoft.
- Q: Will Mono allow me to run Microsoft Office on Linux?
- A: No, it will not. Microsoft Office is a Windows application. To
- learn more about running Windows applications on Intel Unix systems
- refer to <a href="http://www.winehq.com">the Wine Project</a>.
- Q: Can mono run the WebMatrix?
- A: No. That requires System.Windows.Forms support which is not
- currently implemented.
- Q: Does mono have something like Passport?
- Will mono have a server side Passport/Similar framework for XSP as well as client classes?
- A: Not yet, but the client side API for authentication is not the problem.
- We will likely have a lot of other authentication APIs, like the Liberty
- 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: Can I run Mono applications without using `mono program.exe'?
- A: Yes, this is possible on Linux systems, to do this, use something like:
- <pre>
- if [ ! -e /proc/sys/fs/binfmt_misc/register ]; then
- /sbin/modprobe binfmt_misc
- mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
- fi
- if [ -e /proc/sys/fs/binfmt_misc/register ]; then
- echo ':CLR:M::MZ::/usr/bin/mono:' > /proc/sys/fs/binfmt_misc/register
- else
- echo "No binfmt_misc support"
- exit 1
- fi
- </pre>
- Q: What architectures does Mono support?
- A: Mono today ships with a Just-in-Time compiler for x86, PowerPC and
- SPARC-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, HPPA, StrongARM 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.)
- 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
- Q: What are the differences between Mono and Portable.NET?
- A: Most of Mono is being written using C#, with only
- a few parts written in C (The JIT engine, the runtime, the
- interfaces to the garbage collection system).
- 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,
- PowerPC Sparc and S390 systems, while the interpreter works on
- x86, SPARC, StrongARM, s390 and PowerPC systems.
- The JIT engine is being ported to amd64 systems as of this
- time.
- <li> Supports Linux, BSD, MacOS, Windows and Solaris at this point.
- <li> The JIT engine is written using a portable instruction
- selector which not only generates good code but
- is also the foundation to re-target the JIT engine to other
- systems.
- <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 has been self-hosting
- since April 2002. This means that we develop Mono
- completely with itself at this point.
- 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> Our class libraries are licensed under the terms of the MIT
- X11 license which is a very liberal license as opposed to
- the GNU GPL with exceptions, this means that Mono can be
- used in places where the GPL with exceptions is not
- permissible.
- <li> Mono has a complete Web Services stack: we implement ASP.NET
- web servers and web clients as well as implementing the
- Remoting-based SOAP infrastructure.
- <li> Remoting implementation: Mono has a complete remoting
- infrastructure that is used in our own codebase to provide
- added functionality and performance to our ASP.NET engine
- and more.
- <li> Mono has a complete <a href="c-sharp.html">C# 1.0</a>
- implementation and has been stress tested a lot more than
- Portable.NET's compiler.
- <li> Mono's C# compiler has strong error handling and has closer
- adherence to the specification with support for definite
- assignment (required to generate verifiable IL code) and
- CLS conformance checking.
- <li> Mono's C# compiler is written in C# which is easier for new
- developers to come in and improve, fix and tune. The Mono
- C# compiler in C# is faster than their C-based compiler.
- <li> Preview of C# 2.0: a work in progress for a 2.0
- implementation of our compiler is available (iterators,
- generics and anonymous methods are available in our
- "preview" compiler).
- <li> Mono has a complete Reflection and Reflection.Emit: these
- are important for advanced applications, compilers and
- dynamic code generation.
- <li> Mono has a <a href="xml-classes.html">complete managed XML
- stack</a>: XML, XPath, XML Serializer, XML Schema handling
- are fully functional, feature complete and tuned for
- performance.
- <li> Mono has a <a href="crypto.html">complete cryptography stack
- </a>: we implement the 1.0 and 1.1 APIs as well as using our
- fully managed stack to implement the SSL/TLS transports.
- <li> <a href="ado-net.html">Extensive database support</a>: Mono
- ships with database provides for <a
- href="firebird.html">Firebird</a>, <a href="ibmdb2.html">IBM
- DB2</a>, <a href="oracle.html">Oracle</a>, <a
- href="sybase.html">Sybase</a>, Microsoft <a
- href="tdsclient.html">SQL Server</a>, <a
- href="sqlite.html">SQL Lite</a>, <a
- href="mysql.html">MySQL</a>, <a
- href="postgresql.html">PostgresSQL</A>, <a href="oledb.html">Ole
- DB</a> and <a href="odbc.html">ODBC</a>.
- <li> Mono includes full LDAP support.
- <li> We have a great community of developers, without which Mono
- would not be possible.
- </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
- Q: How is Mono related to Web Services?
- A: Mono is only related to Web Services in that it will implement the
- same set of classes that have been authored in the .NET Framework
- to simplify and streamline the process of building Web Services.
- But most importantly, Mono is an Open Source implementation of the
- .NET Framework.
- Q: Can I author Web Services with Mono?
- A: You will be able to write Web Services on .NET that run on Mono and
- vice-versa.
- Q: If Mono implements the SDK classes, will I be able to write and
- execute .NET Web Services with it?
-
- A: Yes. When the project is finished, you will be able to use the
- same technologies that are available through the .NET Framework SDK
- on Windows to write Web Services.
- Q: What about Soup? Can I use Soup without Mono?
- A: Soup is a library for GNOME applications to create SOAP servers and
- SOAP clients, and can be used without Mono. You can browse the
- source code for soup using <a
- href="http://cvs.gnome.org/bonsai/">GNOME's Bonsai</a>.
- Q: Can I use CORBA?
- A: Yes. The CLI contains enough information about a class that
- exposing it to other RPC systems (like CORBA) is really simple, and
- does not even require support from an object.
- <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?
- A: Yes, although the serializing tools have not yet been planned, and
- you would probably have to implement them yourself.
- Q: Will Mono use ORBit?
- 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 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: To upgrade your class libraries and compiler, see the
- INSTALL.txt 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.
- For instance you just need to:
- 1.- Upgrade your Mono runtime (you might better do it with the
- mono-build.sh script available in the <a
- href="http://www.go-mono.com">download</a> page.
- 2.- Get the latest mono-lite tarball from the daily snapshots
- <a href="http://www.go-mono.com/daily/">page</a>, unzip and
- untar and copy all the dll files to your install path lib
- directory (typically pointed by the $MONO_PATH variable).
- Copy all the exe files to the install path bin directory.
- 3.- Then checkout or update your mcs CVS copy. Then follow
- the steps described in mcs/INSTALL.txt.
- Q: Will it be possible to use the CLI features without using byte codes or the JIT?
- A: Yes. The CLI engine will be made available as a shared library.
- The garbage collection engine, the threading abstraction, the
- object system, the dynamic type code system and the JIT are
- available for C developers to integrate with their applications if
- they wish to do so.
- Q: Will you have new development tools?
- A: With any luck, Free Software enthusiasts will contribute tools to
- improve the developer environment. These tools could be developed
- 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?
- A: The main rule is that the stack in the CLI is not a general purpose
- stack. You are not allowed to use it for other purposes than
- computing values and passing arguments to functions or return
- values.
- At any given call or return instruction, the types on the stack
- have to be the same independently of the flow of execution of your
- code.
- Q: Is it true that the CIL is ideal for JITing and not efficient for
- interpreters?
- A: The CIL is better suited to be JITed than JVM byte codes, but you
- can interpret them as trivially as you can interpret JVM byte
- codes.
- Q: Isn't it a little bit confusing to have the name of "XSP" (the same
- as in the Apache Project) for the ASP.NET support in Mono?.
- A: In Mono, xsp is just the name of the C# code generator for ASP.NET
- pages. In the Apache Project, it is a term for the "eXtensible Server
- Pages" technology so as they are very different things, they don't
- conflict.
- Q: Is there any plan to develop an aspx server for Mono?.
- 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. 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
- their own libraries? (I'm still not very good at library paths in
- Linux)
- A: Yes. Just use two installation prefixes.
- Q: How should I write tests or a tests suite?
- A: If you do a test suite for C#, you might want to keep it
- independent of the Mono C# compiler, so that other compiler
- implementations can later use it.
- Q: Would it be too terrible to have another corlib signed as mscorlib?
- 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 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 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>
- 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>)
- It works really good and lets you use wine also, it reads the .exe file
- headers and check if it's a .net executable.
- This way you just execute: ./my-cool-mono-application.exe and it works
- without the need of any wrapper.</i>
- 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: Does Mono support ASP.NET?
- 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: 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
- Q: What is the status of ADO.NET support?. Could I start migrating
- applications from MS.NET to Mono?.
- A: You could start right now using the ADO.NET support in mono, of course,
- if you want to help filling the missing gaps while you develop your app
- :-) Well, what I mean is that we're not that far to having full ADO.NET
- support in Mono, and we've got a lot of working things, so if we could
- get more help, we'd finish it really soon :-)
- Q: In developing the data architecture for the application are there and
- objects I should stay away from in order to insure the smoothest possible
- transition (minimum code rewrite) to Mono's ADO.NET implementation? (For
- example, strongly typed datasets versus untyped datasets, etc...)
- A: We are implementing all the classes in Microsoft .NET's System.Data, so
- 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: Why don't you use Java? After all, there are many languages that
- target the Java VM.
- A: You can get very good tools for doing Java development on free
- systems right now. <a href="http://www.redhat.com">Red Hat</a> has
- contributed a <a href="http://gcc.gnu.org">GCC</a> <a
- href="http://gcc.gnu.org/java/">front-end for Java</a> that can take
- Java sources or Java byte codes and generate native executables; <a
- href="http://www.google.com/search?q=transvirtual">Transvirtual</a>
- implemented
- <a href="http://www.kaffe.org">Kaffe</a> a JIT engine for Java;
- Intel also has a Java VM called <a
- href="http://www.intel.com/research/mrl/orp/">ORP</a>.
- The JVM is not designed to be a general purpose virtual machine.
- The Common Intermediate Language (CIL), on the other hand, is
- designed to be a target for a
- wide variety of programming languages, and has a set of rules
- designed to be optimal for JITers.
- Q: Could Java target the CLI?
- A: Yes, Java could target the CLI, Microsoft's J# compiler does that.
- 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?
- A: Yes, this is what <a href="http://weblog.ikvm.net">IKVM</a> does.
- Q: Could mono become a hybrid CIL/java platform?
- A: This can be obtained easily with IKVM.
- Q: Do you plan to implement a 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
- Q: Would you allow other classes other than those in the
- specification?
- A: Yes. The Microsoft class collection is very big, but it is by no
- means complete. It would be nice to have a port of `Camel' (the
- Mail API used by Evolution inspired by Java Mail) for Mono
- applications.
- You might also want to look into implementing CORBA for Mono. Not
- only because it would be useful, but because it sounds like a fun
- thing to do, given the fact that the CLI is such a type rich
- system.
- For more information on extending Mono, see our <a
- href="ideas.html">ideas</a> page.
- Q: Do you plan to Embrace and Extend .NET?
- A: Embracing a good technology is good. Extending technologies in
- incompatible ways is bad for the users, so we do not plan on
- making incompatible changes to the technologies.
- If you have innovative ideas, and want to create new classes, we
- 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.
- In some cases, we have found the bits from Microsoft to be
- incomplete, but we avoid breaking the API, instead we expose the
- missing functionality in new assemblies (See Mono.Security and
- System.Security).
- Q: Is there any way I can develop the class libraries using Linux yet?
- 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
- their own libraries? (I'm still not very good at library paths in
- Linux)
- A: Yes. Just use two installation prefixes.
- <a name="portability"></a>
- ** Portability
- Q: Will Mono only work on Linux?
- A: Currently, we are doing our work on Linux-based systems and
- Windows. We do not expect many Linux-isms in the code, so it
- should be easy to port Mono to other UNIX variants.
- Q: What about Mono on non Linux-based systems?
- A: Our main intention at Ximian is to be able to develop GNOME
- applications with Mono, but if you are interested in providing a
- port of the Winforms classes to other platforms (frame buffer or
- MacOS X for example), we would gladly integrate them, as long
- they are under an open source license.
- Q: What operating systems/CPUs do you support
- A: Mono currently runs on Linux, Windows, Solaris, FreeBSD, HP-UX and
- MacOS X.
- There is a JIT engine available for x86 processors that can
- generate code and optimizations tailored for a particular CPU.
- Interpreters exist for the SPARC v8, SPARC v9, Itanium, HP-PA,
- PowerPC and StrongARM CPUs.
- Q: Does Mono run on Windows?
- A: Yes. You can get pre-compiled
- binaries from <a href="http://www.go-mono.com/download.html">http://www.go-mono.com/download.html</a>
- Q: Does Mono run on Linux?
- A: Yes. You can get pre-compiled
- binaries from <a href="http://www.go-mono.com/download.html">http://www.go-mono.com/download.html</a>
- Q: Will I require Cygwin to run mono?
- A: No. Cygwin is only required to build Mono.
- Q: Will Mono depend on GNOME?
- A: It will depend only if you are using a particular assembly (for
- example, for doing GUI applications). If you are just interested
- in Mono for implementing a `Hello World Enterprise P2P Web
- Service', you will not need any GNOME components.
- Q: Do you plan to port Rhino to C#?.
- A: Eto Demerzal has started a Rhino port to C#.
- Q: Has anyone succeeded in building a Mac version of the C# environment.
- If so can you explain how?
- A: Yes, Mono works on Linux/PPC and MacOS X (10.2 and 10.3)
- <a name="reuse"></a>
- ** Reusing Existing Code
- Q: What projects will you reuse or build upon?
- A: We want to get Mono in the hands of programmers soon. We are
- interested in reusing existing open source software.
- Q: Will I be able to use Microsoft SQL Server 2000 or will I need to switch
- to a specific Open Source Database. Will I need to recode?
- A: There is no need to rewrite your code as long as you keep using
- Microsoft SQL Server. If you want to use an open source database,
- you might need to make changes to your code.
- 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 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."
- even if you know what these classes/methods do.
- Q: Will built-in reporting be supported for crystal reports? This is a
- heavily used part of our system.
- A: . Crystal Reports are propriety. Someone may try to emulate
- the behavior, but no-one has yet volunteered.
- Q: Who about writing to the registry? As I understand it, Linux does not have
- a counterpart to the registry. Should I avoid relying on that feature?
- A: Try to avoid it. Although there would be a emulation for registry in
- Mono too. GNOME does have a registry like mechanism for configuration. But
- Even if gnome has a configuration system similar to the registry, the keys
- will not be equal, so you will probably end up having to do some runtime
- detection, and depending on this load an assembly that has your
- platform-specific hacks.
- Q: System.Data.SqlClient with FreeTDS, will you port parts of these to C# and
- use them?
- A: This has been done.
- <a name="gcc"></a>
- ** Mono and GCC
- Q: Are you working on a GCC front-end to C#?
- A: We are not working on a GCC front-end for C#
- Q: Will you support C/C++ on the Mono VM?
- A:The open64 compiler effort from SGI helps a lot in this direction.
- The Open64 compiler is a modified version of GCC that
- generates a new intermediate language instead of RTL. This could be
- the foundation to generate CIL code, and to implement the upcoming
- Managed extensions to C++ from ECMA.
- Open64 (and other derivative forks of GCC) split the gcc front-ends
- from the backends by using the WHIRL intermediate representation.
- Kris has begun the implementation of a translator from WHIRL to CIL.
- So it will be possible to use the GCC compilers to target the CIL.
- Q: What about Managed C++?
- A: Once a full translator for WHIRL exists, we are interested in
- looking at expanding the GCC frontends to include extensions for
- Managed C++.
- Q: What about making a front-end to GCC that takes CIL images and
- generates native code?
- A: There is no active work on this area, but Mono already provides
- pre-compilation services (Ahead-of-Time compilation).
- <a name="performance"></a>
- ** Performance
- Q: How fast will Mono be?
- A: We can not predict the future, but a conservative estimate is that
- it would be at least `as fast as other JIT engines'.
- Mono's JIT engine has been recently re-architected, and it provides
- many new features, and layers suitable for optimization. It is
- relatively easy to add new optimizations to Mono.
- The CIL has some advantages over the Java byte code: The existance
- of structs in addition to classes helps a lot the performance and
- minimizes the memory footprint of applications.
- Generics in the CLI world are first-class citizens, they are not
- just a strong-typing addition to the language. The generic
- specifications are embedded into the instruction stream, the JIT
- uses this information to JIT a unique instances of a method that is
- optimized for the type arguments.
- The CIL is really an intermediate representation and there are a
- number of restrictions on how you can emit CIL code that simplify
- creating better JIT engines.
- For example, on the CIL, the stack is not really an abstraction
- available for the code generator to use at will. Rather, it is a
- way of creating a postfix representation of the parsed tree. At
- any given call point or return point, the contents of the stack are
- expected to contain the same object types independently of how the
- instruction was reached.
- <a name="licensing"></a>
- ** Licensing
- Q: Will I be able to write proprietary applications that run with
- Mono?
- A: Yes. The licensing scheme is planned to allow proprietary
- developers to write applications with Mono.
-
- Q: What license or licenses are you using for the Mono Project?
- A: The C# Compiler is released under the terms of the <a
- href="http://www.opensource.org/licenses/gpl-license.html">GNU GPL</a>. The runtime
- libraries are under the <a
- href="http://www.opensource.org/licenses/lgpl-license.html">GNU
- Library GPL</a>. And the class libraries are released
- under the terms of the <a
- href="http://www.opensource.org/licenses/mit-license.html">MIT X11</a>
- license.
- The Mono runtime and the Mono C# Compiler are also available under
- a proprietary license for those who can not use the LGPL and the
- GPL in their code.
- For licensing details, contact <a
- href="mailto:[email protected]">[email protected]</a>
- Q: I would like to contribute code to Mono under a particular
- license. What licenses will you accept?
- A: We will have to evaluate the licenses for compatibility first,
- but as a general rule, we will accept the code under the same
- terms of the "container" module.
- <a name="patents"></a>
- ** Patents
- Q: Could patents be used to completely disable Mono (either submarine
- patents filed now, or changes made by Microsoft specifically to
- create patent problems)?
- 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="http://web.archive.org/web/20030609164123/http://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="obfuscation"></a>
- ** Obfuscation
- Q: Are there any obfuscation programs for Mono/Linux?
- A: We are not aware of these, but some from Windows might work.
- Q: What could I do to avoid people decompiling my program?
- A: You can use the bundle functionality in Mono.
- This would bundle your binary inside a Mono runtime instance, so
- you distribute a single executable that contains the code inside.
- Notice that for this to work and be practical, you need to get a
- commercial license to the Mono runtime.
- The reason is that the bundle functionality is covered by the LGPL:
- so you would have to distribute your assemblies separatedly to allow
- developers to relink mono which would defeat the purpose of bundling
- for obscuring your code.
- It is not impossible to break, just like any other obfuscators.
- That being said, value these days does not lie in particular
- tiny routines, but lies in the large body of work, and if someone
- steals your code, you are likely going to find out anyways.
- Q: Any other option?
- A: You could precompile with --aot your code, then disassemble the
- original .exe, and remove all the code, then re-assemble and ship
- both the vessel .exe and the precompiled code.
- This is not a supported configuration of Mono, and you would be
- on your own in terms of dealing with bugs and problems here.
- Get the companies that build the obfuscation packages to read
- the ECMA spec and fix the bugs in their products that generate
- non-standard binaries (or, if they expose a bug in mono, please
- file a report in our bugzilla).
- Pay Ximian/Novell to spend the development time needed to get mono
- to support the broken binaries that some of the obfuscation
- packages generate (or contribute that support).
- <a name="etc"></a>
- ** Miscellaneous Questions
- Q: You say that the CLI allows multiple languages to execute on the
- same environment. Isn't this the purpose of CORBA?
- A: The key difference between CORBA (and COM) and the CLI is that the
- CLI allows "data-level interoperability" because every
- language/component uses the same data layout and memory management.
- This means you can operate directly upon the data types that someone
- else provides, without having to go via their interfaces. It also
- means you don't have to "marshal" (convert) parameters (data
- layouts are the same, so you can just pass components directly) and
- you don't have to worry about memory management, because all
- languages/components share the same garbage collector and address
- space. This means much less copying and no need for reference
- counting.
- Q: Will you support COM?
- A: The runtime will support XPCOM on Unix systems and COM on Windows.
- Most of the code for dynamic trampolines exists already.
- Q: Will Ximian offer certifications on Mono or related technologies?.
- A: It's possible. But there is no plan about this. So the short answer is no.
- Q: How can I report a bug?
- A: The best thing is to track down the bug and provide a simple test
- to reproduce the bug. You can then add the bug to our bug tracking
- system. You can use our <a href="bugs.html">Bug Form</a> to enter
- bugs for the appropriate component.
- Please provide information about what version of mono you're using
- and any relevant details to be able to reproduce the bug. Note that
- bugs reported on the mailing-list may be easily forgotten, so it's
- better to file them in the <a href="http://bugzilla.ximian.com/enter_bug.cgi">bug tracking system</a>.
- Q: Does mcs support the same command line options as the MS C#
- compiler?
- A: The Mono C# compiler now supports the same command line
- arguments as the Microsoft C# compiler does.
- Q: How about getting searchable archives on lists.ximian.com?
- A: You can perform a search on the mono-related mailing lists
- <a href="http://www.go-mono.com/mailing-lists.html">here</a>.
- Q: When using mono from cvs or from a snapshot, I get an error messaage
- saying that Mono and the runtime are out of sync. How do I fix that?
- A: If you use mono from cvs, you need to be prepared for changes in the
- runtime internals. This means that you should keep a working setup
- before blindling updating (a working setup may just be the last released
- tarball or a recent binary snapshot).
- Usually, compiling corlib with mcs before recompiling the C runtime does
- the right thing (but occasionally you may need to do it the other
- way around).
- Q: Why are you going for a GtkHtml implementation?
- A: GtkHTML is just a lightweight HTML rendering engine that does not
- support CSS, so we need it to look decent for those of us that will
- be using the documentation in our day-to-day work on Linux. The
- Web-based interfaces lack the agility that you get from a native GUI
- tool to browse your documentation. Probably later on, we will write
- scripts and generate a full documentation set that is web-browsable,
- but we need a command-line and GUI tools that we can use natively on
- 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.
- Q: Does Mono support generics?.
- A: Yes, the Mono runtime now supports the new Generics extensions, and
- there is also support for generics in our new compiler: `gmcs'.
- The Mono C# 1.0 compiler (mcs) will ship with various C# 2.0
- features, but generics will remain on the separate compiler (gmcs)
- as this code is not as tested as the main compiler.
- <a name="problems"></a>
- ** Mono Common Problems
- If you are having problems compiling or running Mono software
- or if you think that you found a bug, etc. Please visit the
- <a href="http://monoevo.sf.net/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.
|