[Mono-list] Re: CLI Comparisons

Miguel de Icaza miguel@ximian.com
03 May 2002 01:00:19 -0400


> 1. Why did you or your company decide to build the implementation?

Its roots are on the GNOME project, and the needs to have a better
development platform for end-user desktop applications.  Here is in more
detail:

    The GNOME project goal was to bring missing technologies to Unix and
    make it competitive in the current market place for desktop
    applications. We also realized early on that language independence
    was important, and that is why GNOME APIs were coded using a
    standard that allowed the APIs to be easily wrapped for other
    languages. Our APIs are available to most programming languages on
    Unix (Perl, Python, Scheme, C++, Objective-C, Ada).
    
    Later on we decided to use better methods for encapsulating our
    APIs, and we started to use CORBA to define interfaces to
    components. We complemented it with policy and a set of standard
    GNOME interfaces for easily creating reusable, language independent
    components, controls and compound documents. This technology is
    known as Bonobo. Interfaces to Bonobo exist for C, Perl, Python, and
    Java.
    
    CORBA is good when you define coarse interfaces, and most Bonobo
    interfaces are coarse. The only problem is that Bonobo/CORBA
    interfaces are not good for small interfaces. For example, an XML
    parsing Bonobo/CORBA component would be inefficient compared to a C
    API.
    
    I also wrote at some point:
    My interest in .NET comes from the attempts that we have made before
    in the GNOME project to achieve some of the things .NET does:
    
        * APIs that are exposed to multiple languages
        * Cross-language integration
        * Contract/interface based programming
    
    And on top of things, I always loved various things about Java. I
    just did not love the Java combo that you were supposed to give or
    take.
    
    We tried APIs exposed to many languages by having a common object
    base (GtkObject) and then following an API contract and a format
    that would allow others to wrap the APIs easily for their
    programming language. We even have a Scheme-based definition of the
    API that is used to generate wrappers on the fly. This solution is
    sub-optimal for many reasons.
    
    The cross-language integration we have been doing with CORBA, sort
    of like COM, but with an imposed marshalling penalty. It works
    pretty well for non-inProc components. But for inProc components the
    story is pretty bad: since there was no CORBA ABI that we could use,
    the result is so horrible, that I have no words to describe it.
    
    On top of this problem, we have a proliferation of libraries. Most
    of them follow our coding conventions pretty accurately. Every once
    in a while they either wouldn't or we would adopt a library written
    by someone else. This lead to a mix of libraries that, although
    powerful in result, implement multiple programming models, sometimes
    different allocation and ownership policies and after a while you
    are dealing with 5 different kind of "ref/unref" behaviors (CORBA
    local references, CORBA object references on Unknown objects,
    reference count on object wrappers) and this was turning into a
    gigantic mess.
    
    We have of course been trying to fix all these issues, and things
    are looking better (the GNOME 2.x platform does solve many of these
    issues, but still).
    
    .NET seemed to me like an upgrade for Win32 developers: they had the
    same problems we had when dealing with APIs that have been designed
    over many years, a great deal of inconsistency. So I want to have
    some of this new "fresh air" available for building my own
    applications. 
    
> 2. What's different or unique about your implementation?

Well, I do not know what you are comparing things to, so it is hard to
tell you what it is that you are looking for.  I can give you some
"attributes" of Mono:

	* A self-hosting C# compiler written in C#, which is clean, easy
	  to maintain.

	* A multi-platform runtime engine: both a JIT engine and an
	  interpreter exist.  The JIT engine runs currently on x86
	  systems, while the interpreter works on Sparc, StrongARM and
	  PowerPC systems.  

	* Supports Linux, Windows and Solaris at this point.

	* The JIT engine is written using a portable instruction
 	  selector which not only generates good code (we are told
	  that we are faster than Rotor, but it is hard to tell) but
	  is also the foundation to retarget the JIT engine to other
	  systems.  

	  The system employed is described in various compiler
	  books and it is very similar to what is described in the 
	  book that covers LCC, the Ansi C retargetable C compiler.

	* The JIT engine supports inlining, constant folding and 	 
propagation,

	* Full support for remoting in the runtime, but the class 
	  libraries are still behind.

	* The C# compiler, the JIT engine and the class libraries are
	  mature enough that the whole system is self-hosting, ie, that
	  it can be fully developed with itself at this point.

	* We are not yet done, and there is a lot of work left to be
	  done

	* We have a great community of developers, without which Mono
	  would not be possible.

	* We will provide an ahead of time compilation mode in the 
	  future.

> 3. On which platform(s) will it run?

Ideally all platforms.  Ximian will make sure we run at a reasonable
speed on x86 systems, so a lot of our work is on optimizing our code
generator for the JIT engine.

Third parties have contributed ports to other systems, and we will
likely be working on a SPARC or PowerPC JITer ourselves in the future. 
We have not decided yet which platform will be next. 

> 4. Are you testing with code built on the Microsoft platform?

Yes.  Many developers use Mono purely, while others are still using a
combination of Microsoft and Mono: sometimes to isolate bugs it helps to
be able to pin point where the problem originates: our compiler, our jit
engine, our class libraries.  So we try to keep things fully
compatible.  As soon as we can point out an incompatibility we file a
bug to fix it later on.

> 5. What (if any) IDE(s) are you planning to ship with the product--or
> which one do you recommend?

Mono will be the equivalent of the .NET Framework: compiler tools and
runtime environment for applications (console, winforms, asp.net).  We
will work with third parties to integrate the development environment
into their product.

Some people like SharpDevelop because it is a light-weight IDE written
in C#.  

Other people like Eclipse/WebSphere and NetBeans/Forte which are both in
the Visual-Studio kind of realm: larger systems, but with a more
complete set of tools for professional developers. 

Eclipse and NetBeans both have open source communities built around
those and big companies backing the code, so you can see a fairly large
amount of development going on there as well as many plugins and
extensions that are available both commercially and freely.

This is a big difference from Visual Studio, because anyone can write
IDE extensions with these projects (even with their proprietary
brothers).  

Eclipse also has a Gtk2 user interface, which means that it is
accessible and fully unicode aware, and integrates nicely with GNOME. 
And finally, GNOME has its own Anjuta IDE, which is based around Bonobo
components, and its goal is to integrate with the existing various GNOME
components.  A lot more focused on building GNOME desktop applications
though.

Eclipse and NetBeans are both cross platform products, and in the case
of Eclipse, the user interface matches perfectly your user interface in
your target system, which makes it a lot more pleasant for users to
start using it.

> 6. Which parts of the framework are you not supporting -- for example,
> Windows Forms, ASP.NET, ADO.NET, etc.?

We have started work on all those three major components, but nothing is
finished at this point.  Windows.Forms will be based on Gtk# for Unix
systems, and on Cocoa for MacOS X.  

ASP.NET is something that we just started looking at, but with the help
of Patrick we got a long way.

> 7. Give a brief description of the primary audience for your
> implementation.

Although Ximian has one specific concern: which is to ease the
development of applications for Linux, and to ease the migration of
developers from Windows to Linux, other contributors (which is
responsible for a large body of the code in Mono) might have different
interests.

So it is hard to answer your questions briefly: as with any other open
source/free software project, the interests of the groups are wide and
different. 

> 8. What are the estimated completion or beta dates?

We do not have any dates to announce at this point.

> 9. How will this product be licensed? Which license will you be using,
> and why?

The compiler is under the GPL license;  The runtime is under the LGPL
license and the class libraries under the X11 license.  

We have considered relicensing the runtime and the compiler under
licenses that are more suitable for commercial/embedded developers if
they wish us to do so, but so far everyone seems pleased with our
licensing choice.

> 10. How many programmers and architects have bee involved in the beta
> development?

Ximian has five full time developers working on various Mono
components.  And about ninety people have contributed code to the Mono
project during the time it has been under development.

As Mono has advanced, contributions have peeked up, as the project
becomes more useful for other people, and the full open source effect
comes into play.

> 11. What has been your biggest frustration with this project up to now?

It has been an extremely fun project to work on, and everyone who has
contributed to Mono has made every minute of it a worthwhile project:
from the people writing code, to the people providing cvs mirrors, to
the people who have setup the daily builds/snapshots, to the people
teaching you new assembly tricks, to those answering questions on the
mailing lists.  

So, it is hard to tell what is frustrating ;-)

> 12. How would rate the support you've received from Microsoft thus far?

Well, I have made some friends at Microsoft, but I do not know if they
are acting as official Microsoft representatives or just plain good
friends.  So far those people I have met have been very nice and
helpful. 

> 13. Have you found any parts of the ECMA specification too vague and
> thus open to interpretation? If so, how are you resolving these
> differences with the other implementations?

I can not think of something right now.

> 14. Will your implementation offer additional functionality that is not
> covered under the ECMA specification?

Yes, as detailed above. 

> 15. What programming language(s) are you using for your implementation?

Cobol.  Mostly Cobol, specially for the JIT engine.

C and C#.

Miguel.