| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722 |
- ** Basics
- Q: Is Mono the same as Microsoft's .NET initiative?
- A: It is not.
- .NET is a company-wide initiative at Microsoft that
- encompasses many different areas. The .NET development framework,
- Passport, Biztalk, new server products, and anything that is
- remotely connected to .NET gets the ".NET-stamping" treatment.
- Some components of Microsoft's .NET initiative have been announced
- and some others are in the works.
- Mono is a project to implement several technologies developed by
- Microsoft that have now been submitted to the ECMA Standards Body.
- 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.
- 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.
- </ul>
- The CLR and the Common Type System (CTS) enables applications and
- libraries to be written in a number of languages. Classes and
- methods created in one language can be used from a different
- language.
- 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: What does Mono stand for?
- A: Mono is the word for `Monkey' in Spanish. We like monkeys.
- It only means a number of other things: monochromatic (hence the
- gray theme used in the Web site).
- Q: When will you ship it?
- A: We do not know when the code will be shipped. The more
- contributions we get to the project, the sooner it will ship.
- A rough estimate is that we might be able to run our C# compiler on
- Linux by the end of the year. That means running the Windows
- Executable generated by a Microsoft .NET compiler on the Linux
- platform.
- We expect that doing GUI applications will require more work on the
- class libraries. That could take another six months.
- Q: How can I contribute?
- A: Check the <a href="contributing.html">contributing</a> section.
- Q: You guys should innovate instead of copying.
- A: In this particular case, we see a clear advantage in the platform
- and we are interested in using the features of the CLI on open source systems.
- We have decided that we should spend our limited resources towards
- implementing an existing specification instead of designing and
- implementing our own.
- Designing and implementing our own would be possible, but it doesn't make
- sense to do that just because the specification comes from a
- proprietary vendor.
- ** Ximian
- Q: Why is Ximian working on .NET?
- A: We are 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: Ximian will not be able to taken on the whole project on its own.
- Mono will be a free software/open source community project, that is
- the only way we can hope to implement something of this size. You
- can <a href="contributing.html">contribute</a> to this effort.
- Q: What pieces will Ximian be working on?
- A: We will focus on building a development and execution
- environment.
- The idea is to get Mono to a state of that would allow
- third parties to actually be able to use it real-world development.
- Q: Why does Ximian even care?
- A: We like the features that the CLI and its related technologies
- bring to the table. An exciting addition to the developer toolkit.
- The goal of Mono is to bring this technology to non-Windows
- platforms (although we hope Mono will also run on Windows, for
- debugging and comparative purposes).
- ** 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 is Mono on?
- A: The C# Compiler is released under the terms of the GPL. The class
- libraries will be under the LGPL or the GPL with a special
- exception. The runtime libraries are under the LGPL.
- Since the LGPL is not suitable for embedded systems development, we
- are also licensing the libraries under the GPL with the following exception:
- If you link this library against your own program, then you do not
- need to release the source code for that program. However, any
- changes that you make to the library itself, or to any native
- methods upon which the library relies, must be re-distributed in
- accordance with the terms of the GPL.
- This is similar in spirit to <a
- href="http://www.gnu.org/software/classpath/classpath.html">GNU
- Classpath.</a>
- Q: But in Object Oriented Programming I need to subclass your library
- functions, does that mean that I am making modifications to your
- library and hence I would have to distribute my sources under the
- LGPL?
- A: No. Object Oriented Programming in the class library is a well
- understood interface barrier, so you can actually develop
- proprietary applications with the Mono libraries.
- Q: Will you accept code under the XXX License?
- A: If the XXX License is compatible with the license we use in that
- specific piece of code, then yes. If you want to use the BSD license, make
- sure you use the BSD license without the advertisement clause (The
- `Ousterhout License').
- ** Mono and .NET
- Q: If applications use Mono, does that mean that I have to pay a service fee?
- A: No. Mono is not related to Microsoft's initiative of
- software-as-a-service.
- Q: If you implement .NET, will I depend on Microsoft Passport to run my software?
- A: No. The .NET Framework is a runtime infrastructure and collection
- of class libraries. Passport may be required to access certain web
- services written for that framework, but only if the programmer
- chooses Passport as the authentication mechanism.
- Q: Is .NET just a bunch of marketing slogans?
- A: Although the `.NET initiative' is still quite nebulous, The .NET Framework
- has been available for some time. Mono is not an implementation of the .NET
- initiative, just the development framework.
- 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: But Microsoft will release a port of the real thing under the
- `Shared Source' license, why bother with anything else?
- A: The Shared Source implementation will not be usable for commercial
- purposes. We are working towards an implementation that will grant
- a number of 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>
- ** Passport
- Q: Is this a free implementation of Passport?
- A: No. Passport is part of Microsoft's Hailstorm initiative. 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. That just means that applications might use that API to
- contact a Passport site.
- As long as your application does not use Passport, you will not
- need Passport.
- It might even be possible to implement that class with
- a set of dummy functions, or use an alternate Passport implementation.
- We do not know at this time whether the Passport protocol is
- documented and whether we will be able to talk to
- passport.com
- Q: But that must mean that you are tied to Passport!
- A: All the contrary. The implementation could keep the interface (for
- the sake of simplicity, lets say it implements the method `Login'
- and `GetUserName').
- We could implement `Login' and `GetUserName' by talking to XNS or
- any other decentralized systems. Or any other system that the
- industry standarizes on.
- Q: What is your opinion?
- A: You can read my personal <a href="passport.html">opinion on
- passport</a>.
- Q: Will Mono running on Linux make Passport available for Linux?
- A: The Passport toolkit for Linux-based web servers is available from
- Microsoft.
- Again, Mono has nothing to do with Passport.
- ** Mono and Windows
- Q: Will Mono allow me to run Microsoft Office on Linux?
- A: No, it will not. Microsoft Office is a Windows application. To
- run Windows applications on Intel Unix systems refer to <a
- href="http://www.winehq.com">the Wine Project</a>
- ** GNOME
- Q: How is this related to GNOME?
- A: In a number of ways:
- * Mono will use existing
- components that have been developed for GNOME when it makes
- sense. For example on X systems, we will use Gtk+ and
- Libart to implement Winforms and the Drawing2D API.
- For database access, we will use LibGDA (not really
- depending on GNOME, but related to).
- * This project was born out of the need of providing improved
- tools for the GNOME community.
- * We would like to add support to our CLR implementation to
- deal with GObjects (in GNOME 1.x, they are called
- GtkObjects), and allow Mono developers to provide GObjects
- or use and extend existing GObjects.
- 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?
- A: Mono will not be ready even within the next six months, and a
- complete implementation is probably 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 will provide the "backend" for various
- classes.
- Q: Will Mono include compatibility with Bonobo components?
- A: Yes, we will provide a set of classes for implementing and using
- Bonobo components from within Mono.
- Q: Does Mono replace Bonobo?
- A: Bonobo is very focused on cross-application component reuse. Mono
- will provide a Bonobo framework to allow you to develop Bonobo
- components and use Bonobo components on Unix.
- Mono should allow you to write Bonobo components more easily, just
- like .NET on Windows allows you to export .NET components to COM.
- ** Mono and the Web
- Q: Is Mono a way of running Java applets?
- A: No.
- ** Web Services
- Q: Is Mono just a new way of writing Web Services?
- A: No.
- Q: If this implements the SDK classes, will I be able to write and
- execute .NET Web Services with this?
-
- A: Yes, you will.
- 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?
- A: Soup is a library for GNOME applications to create SOAP server and
- SOAP clients. 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.
- ** Development Tools
- 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: Hopefully Free Software enthusiasts will contribute tools to
- improve the developer environment. These tools could be developed
- initially using Microsoft implementation of the CLI and then
- executed later with Mono.
- ** Mono and Java
-
- Q: What about using 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: 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: I heard that the CIL is ideal for JITing and not efficient for
- interpreters, is this the case?
- 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: 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.
- ** 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.
- ** Mono and 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 a Free Software License.
- ** 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 clear
- defined API that splits the JIT from the GC system and the actual
- byte code implementation. It is a research product.
- 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="ximian-and-microsoft">
- ** Ximian and Microsoft
- Q: I read that Microsoft is helping out Ximian, is this true?
- A: Initial contact between David Stutz and Miguel de Icaza happened.
- It was a friendly conversation. Microsoft is interested in other
- implementing .NET and are willing to help make the ECMA spec more
- accurate for this purpose.
- We were initially contacted by Sam Ruby at the ECMA TG3 committee
- to discuss the same issue. And we are glad to have good contacts
- to ask questions about the specs.
- Q: Is Microsoft paying Ximian to do this?
- A: No, we are doing this for purely selfish reasons. We are upgrading
- our development platform to build better applications on Unix and other
- systems.
- 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
- (which is very unlikely), the existing platform has a value on its
- own.
- Miguel once explained its motivation for working on Mono to Dave
- Winer, and his mail got posted <a
- href="http://scriptingnews.userland.com/stories/storyReader$1275">here</a>
- Q: Didn't Miguel de Icaza say that `Unix Sucks'?
- A: Yes, he did, as a catch phrase in his opening remark on the Ottawa
- Linux Symposium. His talk focused on various ways to improve Unix.
- There is a paper describing some ways to improve Unix at:
- <a href="http://primates.ximian.com/~miguel/bongo-bong.html">
- http://primates.ximian.com/~miguel/bongo-bong.html</a>
- Q: Didn't Ximian's Miguel work for Microsoft?
- A: Actually, Nat Friedman (Ximian's co-founder) did work as an
- intern for Microsoft for one summer but Miguel did not.
- Q: Did Nat and Miguel meet at Microsoft?
- A: They met online on the Linux IRC network; They met in person for
- the first time in 1997.
- ** Mono and Microsoft
-
- Q: How can you expect Mono to compete with Microsoft, wont this
- require an effort too large?
- A: You are right. Mono will never become a reality without the help
- of other contributors. Ximian is a small company that can not
- finish Mono alone. We will be working with members of the
- community to deliver the product.
- Q: Is Microsoft and Corel involved in the Mono implementation?
- A: No, they are not.
- 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: What happens if Microsoft `Embraces and Extends' the CLI standard
- and keeps Mono out of the play?
- A: There are various explanations to this question. The first one is
- that the benefits that you can get from the CLI are going to be
- there with or without `embracing and extending'. We might not be
- able to run every .NET Windows application on Mono. But remember:
- it was already easy for someone to just use PInvoke to tie their
- application to Windows.
- The bottom line is that the advantages of having a CLI runtime will
- be with us, no matter if Microsoft forks their version to be
- incompatible.
- Q: What if Microsoft changes the interface, and all of a sudden
- applications break?
- A: If they change their released API, every application that was
- developed against it will break.
- That being said, Microsoft have a pretty good record of keeping
- backwards binary compatibility.
- ** Acronyms
- Q: What is the difference between CLR (Common Language Runtime) and
- CLI (Common Language Infrastructure)?
- A: CLI is the specification of an execution system. The Microsoft
- implementation of this specification is named CLR.
- Unless we come up with our own acronym, we could just call ours
- also CLR, just because it would do exactly the same thing the
- Microsoft implementation does.
- <a name="gcc">
- ** Mono and GCC
- Q: Should someone work on a GCC front-end to C#?
- A: I would love if someone does, and we would love to help anyone that
- takes on that task, but we do not have the time or expertise to
- build a C# compiler with the GCC engine. I find it a lot more fun
- personally to work on C# on a C# compiler, which has an intrinsic
- beauty.
- We can provide help and assistance to anyone who would like to work
- on this task.
- Q: Should someone make a GCC backend that will generate CIL images?
- A: I would love to see a backend to GCC that generates CIL images. It
- would provide a ton of free compilers that would generate CIL
- code. This is something that people would want to look into
- anyways for Windows interoperation in the future.
- Again, we would love to provide help and assistance to anyone
- interested in working in such a project.
- Q: What about making a front-end to GCC that takes CIL images and
- generates native code?
- A: I would love to see this, specially since GCC supports this same
- feature for Java Byte Codes. You could use the metadata library
- from Mono to read the byte codes (ie, this would be your
- "front-end") and generate the trees that get passed to the
- optimizer.
- Ideally our implementation of the CLI will be available as a shared
- library that could be linked with your application as its runtime
- support.
- Again, we would love to provide help and assistance to anyone
- interested in working in such a project.
-
- 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: The JIT engine and runtime engine will be able to execute CIL
- executables generated on Windows.
- ** Mono and Portability
- Q: Will Mono work on other variants of Unix?
- A: Yes. We do not expect to add any gratuitous incompatibilities.
- Q: Will Mono run on Windows?
- A: Hopefully yes. 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 component.
- ** Performance
- Q: How fast will be Mono?
- A: We can not predict the future, but a conservative estimate is that
- it would be at least `as fast as other JIT engines'.
- Now, wishfully thinking I hope that we will ship various JITs with
- Mono just like Microsoft has done. A fast JITer when maximum
- performance is not needed, but fast load times are important; And
- an optimizing JITer 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: it is just 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
- instructions was reached.
- ** Mono and Portable.NET
- Q: What are the differences between Mono and Portable.NET?
- A: Most of Mono is being written using C#, the only pieces written in
- C are those who have to absolutely be built using C (The JIT
- engine, the runtime, the interfaces to the garbage collection
- system).
- The C# compiler and the tools will become reusable C# components.
- Portable.NET is building its components out of C pieces.
- ** Assorted 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.
|