Hello everyone,
I am sorry that I have not been able to respond earlier. I would
like to apologize to anyone who might have been confused about my
strategy with Mono and what I am trying to do. Also, I want to thank
everyone on the mailing list that has contributed to the discussion, I
used a lot of your ideas on this email.
Before starting though, I would like to ask my readers to forget
everything they have heard about .NET, because it is a marketing term
used to describe many different Microsoft projects, and there is a lot
of information both correct and incorrect about it floating around.
My goals with Mono are very specific, and I will address those
shortly, but for the sake of getting things done, please forget
everything you have heard about .NET.
* First, the Facts
GNOME is not adopting Mono or .NET as an implementation
technology. The headline from the Register is misleading,
for a number of reasons:
* The headline does not reflect any statements I
made on the interview (if you read the interview
you will notice this).
* The only future plans that have been approved by the
GNOME team (which has 11 voting members on its
board) are found here:
http://developer.gnome.org/dotplan/
* I am not the GNOME foundation or control GNOME like
Linus controls his kernel, I am just its founder and
a contributor.
* GNOME is not built by an individual, its built by
a team of roughly 500 contributors in many areas.
* Decisions in the GNOME world are done by active
contributors and module maintainers. I have given
my maintainership status on every module I
maintained to other members of the GNOME team as
I got more involved with Ximian and later on with
Mono.
So effectively I have no "maintainer" control.
At this point on time, the GNOME team is working on shipping
version 2.0 of the desktop and the development platform, a major
upgrade to the desktop offering, and everyone is quite excited
with this.
* What is Mono?
Mono is an implementation of three pieces of technology:
* A compiler for a new programming language, similar
to Java, called C#.
* A virtual machine for the Common Intermediate
Language (CIL) byte codes.
* A set of libraries that encapsulate useful routines
and classes: from hash tables, to XML manipulation,
to database management, to GUI applications, to web
construction tools.
These are usually referred in the Microsoft world as the `.NET
Framework' as opposed to .NET. When I say `.NET Framework' here,
I am talking about these technologies.
Seasoned industry programmers will notice that the above is
very much like Java and the Java VM. They are right, the above
is just like Java.
The CIL has one feature not found in Java though: it is
byte code representation that is powerful enough to be used as a
target for many languages: from C++, C, Fortran and Eiffel to Lisp
and Haskell including things like Java, C#, JavaScript and Visual
Basic in the mix.
I wish I had the time to go in more detail, but for the sake
of this argument, the above will suffice.
Although Ximian can only finance the work of a C# compiler
(that is all the resource I have at my disposal), I want to
encourage other people to work on free implementations of other
compilers.
I want to encourage other developers to look at targeting
existing compilers and interpreters to the CLI: JavaScript, Basic,
Perl, Python, C++, and maybe even get gcc core to generate CIL
bytecodes.
* The CIL and the promise of language independence:
Bertrand Meyer (the father of Eiffel) wrote an interesting
article that encapsulates my excitement about the possibilities of
the CIL:
http://eiffel.com/doc/manuals/technology/bmarticles/sd/dotnet.html
This technology allows programming languages to be considered
on the basis of how they will perform for a given task, and not
based on the runtime libraries that you will depend. Any software
engineer should read this article:
http://www.fawcette.com/dotnetmag/2001_12/online/online_eprods/bmeyer/default.asp
So no longer should a software engineer pick Fortran, because
that is the only language where his math libraries are available:
he can now pick the right language for the problem at hand.
* Mono and GNOME.
GNOME had always tried to have a good support for multiple
programming languages, because we realize that no matter how much
we loved C as a programming language, there was a large crowd of
people out there that would like to use the GNOME libraries from
their favorite programming language, which might not necessarily be
C.
This strategy has paid off very well. There are healthy and
striving Python, Perl, Guile and Ada communities out there that
use the Gtk+ and Gnome bindings to build applications. From rapid
prototyping to robust applications: we wanted to empower
developers.
Keeping language bindings up to date and shipping them on time
has always been a consuming process, because no matter how
automated this process has turned out to be, there is still a
considerable amount of manual work that needs to be done.
I do go into more details about this at the following places:
http://www.go-mono.com/rationale.htmlhttp://scriptingnews.userland.com/stories/storyReader$1275
* An upgrade to the development platform: Part I.
Microsoft has terrible APIs to code against. Anyone who has
used Win32 and any combination of the various layered cakes that
have been built on top of it has stuck to that platform only
because of the size of the market, but it is one of the most
horrible APIs ever built.
To make things worse, an evolution of APIs, components, memory
management contracts and patched up versions of COM have made the
platform horrible.
Microsoft has injected fresh air into their platform by
building and designing a new programming platform that addresses
all these pains. They have incorporated many ideas from Java, and
they have extended it to address new needs that developers had.
They took where Java left off.
Now, the Unix platform, GNOME included has some of these
problems: our APIs have been evolving. Libraries have been built
by disconnected groups (PNG, JPEG, Gtk+, Xml, Bonobo, CORBA spec
apis, etc) and the end result is that a developer eventually has
to learn more than he wanted to in the course of developing a
large application.
Ximian funded for a long time the work on the Perl bindings,
and we had a lot of work going into Bonobo (more than we do today)
because we believed that this would help us achieve language
independence and empower scripting language developers (that is
why we were so psyched about CORBA/Bonobo support all this time).
When C#, the CLR and the class libraries were launched, we
looked at that, and we saw how they were solving the problem in a
very nice way. At least it appealed to me and others from a
purely technological standpoint. This new platform showed a lot
of promise.
After much researching and debating, we decided that a couple
of developers at Ximian will join me in working on a free
implementation of these specifications. These people came
precisely from the cross-language interoperability area: Dick
Porter had been working before on ORBit and our SOAP
implementation; Dietmar Maurer came from the Bonobo development
world and Paolo Molaro was working on Gtk+/Gnome/Bonobo bindings
for Perl. This is the original Mono developer lineup.
* Evolution, Gnumeric and GNOME.
I have written and maintained many lines of code as part of
my GNOME work. Ximian has developed Evolution which consists of
roughly 750,000 lines of code.
Large software projects expose a set of problems that can be
ignored for smaller projects. Programs that have long life times
have different dynamics when it comes to memory management than
smaller programs.
There is a point in your life when you realize that you have
written enough destructors, and have spent enough time tracking
down a memory leak, and you have spend enough time tracking down
memory corruption, and you have spent enough time using low-level
insecure functions, and you have implemented way too many linked
lists [1]
[1] indeed, GNOME uses Glib which is a massive step up from
the Unixy libc APIs.
The .NET Framework is really about productivity: even if
Microsoft pushes these technologies for creating Web Services, the
major benefit of these is increased programmer productivity.
Evolution took us two years to develop and at its peak had 17
engineers working on the project. I want to be able to deliver
four times as many free software applications with the same
resources, and I believe that this is achievable with these new
technologies.
My experience so far has been positive, and I have first
hands experience on the productivity benefits that these
technologies bring to the table. For instance, our C# compiler is
written in C#. A beautiful piece of code.
It can be argued that I could be wrong, and that these
technologies are too new. But my personal experience and the
experience of some of my friends with this platform has been
amazing. I want to share with others this simplicity. And I
want to empower developers: I want to enable a whole class of
developers to create great desktop applications that integrate
with GNOME.
* Why is Mono related to GNOME?
It is no secret that I have been working on Mono as a new
platform for software development, and it is also not a secret
that I want to help the GNOME project with Mono. This has been
the plan since the project was announced in July.
Mono will use Gtk+, Gnome-Db, Libart, Gnome-Print and other
GNOME technologies as part of its implementation of its class
libraries, because that is what my team and I are familiarized
with.
So when you copy your binary from Windows that was compiled
with the Visual Studio.NET and run it on your Unix platform,
it will just integrate nicely with your GNOME desktop.
We are also exploring a port to MacOS X, and for that
particular case, we will integrate with Aqua, not with Gtk+, but
you get the idea.
* GNU was based on a proprietary technology.
GNU is a free re-implementations of Unix. Linux is a
re-implementation of the Unix kernel. Before the advent of Linux
and the Berkeley Unix, Unix was a proprietary technology, built by
ATT (which back in the day, was a monopoly).
Still, developers took what was good from Unix, and
reimplemented a free version of it. Down to the Unix programming
language: C (which was also invented at ATT). Even C++ was
invented at ATT.
Think of Mono as following the same process: we are bringing
the best technology out there to our beloved free software
platform. And at the same time it serves to be a magnificent
upgrade on the development platform.
* I can not force anyone.
Whether people in GNOME or elsewhere will use Mono is
independent of my opinion. Mono will have to stand on its own
feet, and will have to convince developers on its own merits
before it succeeds.
When I made my comments to the Register reporter, I was
envisioning that in a couple of years Mono would be a really solid
technology: a good JIT engine, good class libraries and would be a
useful platform for innovation: it would allow people to focus
more on the problems at hand and worry less about the low-level
details of the platform.
* Rewriting GNOME.
Havoc brought up an important point recently, an article from
Joel Spolsky:
http://www.joelonsoftware.com/articles/fog0000000348.html
The short story is: rewriting code does not pay off, and I
agree with the thesis of the article. Rewriting GNOME in C# with
the CLR would be a very bad idea, if not the worst possible idea
ever.
But what makes the .NET Framework technologies interesting is
that they are evolutionary technologies:
* The runtime can be linked into an application.
Example:
bash$ cat hello.c
#include
main (int argc, char *argv [])
{
mono_init (argc, argv);
mono_assembly_load ("classes.dll");
mono_ves_execute ("Class.Main");
}
So existing applications can be "extended" with Mono, take
a piece of code like Gnumeric, and write a new chunk of it
using Mono for example.
* There is no language switch required.
You can keep using your fav language, and gradually start
writing new pieces of code in another language that runs
with all the benefits of "managed" execution.
I go into some more detail here:
http://mail.gnome.org/archives/gnome-devel-list/2002-February/msg00021.html
* GNOME 4
As you might realize by now, GNOME 4 is not planned, it is not
possible to know what is in there. So my comments on GNOME 4 only
reflect the fact that I personally believe that people will see
that Mono is an interesting platform to write new applications.
So in the future the applications that will be shipped, very
likely might contain Mono technologies. Whether this is limited
to new applications only, or this is something used in more
fundamental pieces of the system is an entirely different matter.
But for now, GNOME 4 is non-existant project.
* Fighting the System.
The .NET Framework will exist in the Windows world, and
because of this they will be widely deployed. It is a pointless
battle to pretend that boycotting the use of those technologies
will have any kind of effect on their reach.
The .NET Framework stands on its own feet, and developers
in the Windows world love it. Even if this was not the case,
Microsoft is using these technologies and distributing to as many
people as possible. We are witnessing the creation and deployment
of a new standard. Sure, it has a lot of corporate support, but
it will become a widely deployed technology.
* Other uses of Mono
Despite my love for Mono as a tool for writing GNOME
applications and giving developers new tools to write code in less
time, there is an extra advantage in having a free implementation
of the .NET Framework for Unix:
* Windows developers know how to write code for it.
* Lets make it easy to bring developers from the Windows world
into our platform.
* Training materials, tutorials, documentation, tips and
tricks are already available in large quantities, lets
leverage this.
* Mono Financing.
Right now Mono is financed by Ximian because we believe that
this will reduce our cost of development for future applications.
And thats why we are really focused on Mono for the desktop
(amusingly the ASP.NET support in Mono has evolved more rapidly,
because Gaurav and Leen have been very excited about this, and
just have been producing code like crazy).
So even in the Mono world, I do not get to make all the
decisions: people work on what they are interested in developing.
The Mono community is great! Lots of passionate programmers
work with us, and I feel very happy that I have had a chance to
work with all of them.
At this point in time Ximian has only a small team of full
time developers working on Mono (five) and a lot of the work is
being done by contributors on their spare time, or hackers that
want to see the .NET Framework run in other platforms, or
people who share our enthusiasm for the platform, or people who
just like to hack on a particular area and just love to code.
But I would like to hire more full time developers: the open
source development model is great for getting the fun/short things
done, but it is terrible to get the long-haul, boring, repetitive
or dull things done.
I want to be able to bring more people to work full time on
Mono. I would like to offer the services of Ximian as a project
manager to keep driving this project forward, and get cash
infusions to hire developers to work on this project.
The only restriction is that all of our work has to be free
software. But other than that, I am ready to take money from
anyone or listen to any kind of proposals for making this happen.
Some people wonder if we have got a Microsoft investment or
contract (because I like this Microsoft technology). The answer
is no. But I would take one if they wanted to fund my free
software project ;-) Man, I wonder what that would be like!
Implementing the .NET Framework is a massive effort, and I
want to enroll as many contributors as possible.
* API compatibility.
I believe that the `Embrace and Extend' philosophy is bad for
users and developers. Whether its a large corporation doing it,
or ourselves. I want to be as compatible as possible with the
APIs that were published by Microsoft.
This achieves various things:
* Allows developers to move back and forth.
* Reduces training.
* Helps us leverage existing knowledge.
Of course, this should not stop anyone from implementing new
APIs. And I even encourage people to write new classes, APIs and
components that will be reusable both on Unix and on Windows.
* What if we never can keep up?
There is the issue that we might not be able to keep up (right
now, we dont, as .NET Framework 1.0 is already out there, and we
are, well still underway). Also, theoretically there is the risk
of a given API being unimplementable on Unix.
Even if that is the case, we still win, because we would get
this nice programming environment, that althought might not end up
being 100% .NET Framework compatible, it would still be an
improvement and would still help us move forward. So we can reuse
all the research and development done by Microsoft on these ideas,
and use as much as we can.
So far all it seems like everything in .NET can be emulated in
our environment.
* Richard Stallman
I am not sure what people told Richard Stallman about my
plans. Given the confusion surrounding .NET, it is very possible
that people were asking `Miguel wants to depend on Passport' or
something just as bad as that.
My only intention is to write applications using the CLI as a
development platform, which is really not very exciting for a news
paper to report: "Programmer to use new compiler, new garbage
collector, news at 11".
Really, programmer's lives are boring, I wish my life would be
as exciting as other people's life appear to be.
* Further debate.
I have just scratched the surface in this email, I do like a
lot the technology behind the .NET Framework as you might have
noticed from the interviews, no secret there. I can go on for
hours, but I have to set a limit to this email.
I hope this explanation will get us through, feel free to
e-mail me if you believe I have missed something or if you are
interested in contributing to make this vision happen.
PS:
I would like to thank Nat Friedman for providing moral,
technical support all these years and his unconditional
friendship. It has been a fun adventure.
Without Nat I would probably have gone crazy by now.
PS2:
I kind of got sentimental after reading all the nice e-mail on
the GNOME lists. After all, writing software alone is not that
interesting, the most interesting part is interacting with other
developers, and watching how community projects grow.
I would like to thank all the people I have worked over the
years: every GNOME developer past and present, every Mono
developer past and present and all my friends at Ximian who have
created a great place to work.
This community is great, and I have loved working with an
increasing number of people as free software becomes more
popular. I know sometimes I have been unreasonable, but I am
trying to learn from my mistakes. Am just too good at being
mistaken.
Miguel.