| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698 |
- <a href="#basics">Basics</a><br>
- <a href="#ximian">The Ximian 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="#pnpproject">Mono and the Portable.NET Project</a><br>
- <a href="#webservices">Web Services</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 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, Linux-based
- version of the Microsoft .NET development platform. Its objective
- is to enable Linux 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.
- 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, software-as-a-service, or
- corporate rebranding.
- 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.
- * 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, Oberon, 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 work-in-progress documentation from the T3G ECMA
- group here:
-
- <a href="http://www.dotnetexperts.com">http://www.dotnetexperts.com</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 interoperating
- with the Microsoft SDK, but we will also offer an ECMA compliant
- set of libraries.
- Q: What does the name "Mono" mean?
- A: Mono is the word for `monkey' in Spanish. We like monkeys.
- Q: Is Mono usable?
- A: The JIT engine is usable on Intel x86 machines. An interpreter
- can be used on other non-Intel x86 machines.
- The class libraries are not yet mature enough to run real applications,
- but if you are interested in trying out Mono, you can definetly start
- testing things out as many programs run.
- The C# compiler has made significant progress, it can even compile
- itself now, but it can not yet be ran with our class libraries as
- they are missing some features.
- Q: When will you ship it?
- A: It is premature to target a shipdate for the code, but we
- anticipate that it will be available some time in the middle of
- 2002.
- 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.
- <a name="ximian"></a>
- ** The Ximian Role in the Mono Project
- Q: Why is Ximian working on .NET?
- A: Ximian 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 Ximian be able to take on a project of this size?
- A: Of course not. Ximian 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 will Ximian be 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 Ximian offer Mono commercially?
- A: When Mono is ready to be shipped Ximian will offer a commercial
- support and services for Mono.
- 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.
- More advanced features will take more time to develop. A support
- timeline will be available in June 2002.
- <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.
- 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 "backend" 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.
- Q: But will I be able to build GNOME applications?
- A: Yes, we will enable people to write GNOME applications using Mono.
- <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. We will provide both the Windows.Forms API and the Gtk# API.
- 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). System.Windows.Forms is an API defined
- by Microsoft to build GUI applications.
- 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.
- <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.
- Ximian representatives have also spoken with Sam Ruby at the ECMA
- TG3 committee to discuss the same issues.
- Q: Is 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
- interoperate. 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: 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?
- 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>.
- <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). The Portable.NET
- Project is using C for development.
- <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
- viceversa.
- 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.
- We will be implementing CORBA interoperation as an extension to the
- Mono classes so that we can integrate with Bonobo, just like
- Microsoft provides COM interoperation classes and support
- mechanisms.
- 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: No. Mono will be using a new implementation of CORBA that isn't still started.
- <a name="devel"></a>
- ** Development Tools and Issues
- Q: Will it be possible to use the CLI features without using bytecodes
- 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 will be
- available for C developers to integreate 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.
- 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.
- <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">frontend for Java</a> that can take
- Java sources or Java byte codes and generate native executables; <a
- href="http://www.transvirtual.com">Transvirtual</a> has 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. We have details on a <a
- href="ideas.html#guavac">project</a> that someone could take on to
- make this happen.
- Microsoft has an implemenation of the Java language called J# that
- can target the CIL execution engine.
- Q: Is it possible to write a JVM byte code to CIL convertor?
- A: Yes, it is possible. Here are a few starting point:
- <ul>
- * A byte code representation is really a flattened forest of
- trees. Look at the Mono JIT engine to see how we compute
- the basic blocks (this is used to figure out the "trees").
- The forest is just an array of trees.
- Indeed, run the JIT engine with -d (mono -d prog.exe) and
- you will see how these trees look like.
- You will have to do something similar for Java.
- * Each "forest of trees" has a meaning. This meaning can now
- be translated into the equivalent "meaning" in CLR-land.
- </ul>
- <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
- extending 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
- <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 X-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 Winform 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: Will Mono run on Windows?
- A: We hope so. Currently some parts of Mono only run on Windows
- (the C# compiler is a .NET executable) and other parts have only
- been compiled on Linux, but work on Windows with Cygwin.
- 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.
- <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: What about Intel's research JIT framework, ORP?
- A: At this time, we are investigating whether we can use elements of
- ORP for Mono. ORP is a research JIT engine that has a clearly
- defined API that splits the JIT from the GC system and the actual
- byte code implementation.
- Q: What about using GNU Lightning?
- A: We are also researching <a
- href="http://www.gnu.org/software/lightning/lightning.html">GNU
- Lightning</a>.
- <a name="gcc"></a>
- ** Mono and GCC
- Q: Are you working on a GCC front-end to C#? A GCC backend that will
- generate CIL images? What about making a front-end to GCC that
- takes CIL images and generates native code?
- A: We are currently seeking volunteers for those projects.
- Visit the <a href="contributing.html">contributing</a> section if
- you are interested.
- Q: But would this work around the GPL in the GCC compiler and allow
- people to work on non-free front-ends?
- A: People can already do this by targeting the JVM byte codes (there
- are about 130 compilers for various languages that target the JVM).
- Q: Why are you writing a JIT engine instead of a front-end to GCC?
- A: We want the JIT engine and runtime engine because they will be able
- to execute CIL executables generated on Windows, and so no recompilation
- will be necessary.
- <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'.
- We would like to ship various JIT engines with Mono, just like
- Microsoft has done with their .NET development platform. We could
- provide a faster, JIT for fast load times but lower performance,
- and an and an optimizing JIT that would be slower at generating
- code but produce more optimal output.
- The CIL has some advantages over the Java byte code: it 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.
- 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: 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.
-
- 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.
- <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 datatypes that someone
- else provides, without having to go via their interfaces. It also
- means you don't have to "marshall" (convert) parameters (data
- layouts are the same, so you can just pass components directly) and
- you don't have to worry about memory managment, 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.
|