When David contacted me, he was writing a piece on the
evolution of .NET and since he was speaking to Microsoft, he
wanted to get feedback from other people on what we thought
Microsoft got right and what they got wrong. This is how my
email to David started:

Well, I am a bit of a fan of large portions of .NET, so I
might not be entirely objective. You might want to also get
some feedback from a sworn enemy of Microsoft, but you should
get at least the statements from a sworn enemy that has tried
.NET, as opposed to most people that have strong opinions but
have never used it.

David said:
Given your familiarity with the framework, are there any
iterative changes that you find questionable or you feel
require some explanation?

There are certain areas that I do not quite like about .NET,
they are not major issues as they can be either worked around
or ignored (to some extent), but here are some.

And this is where the quote on Microsoft shooting the .NET
ecosystem comes from, I reproduce from my email for the sake
of completeness, none of this is a secret:

The most important part is that Microsoft has shot the
.NET ecosystem in the foot because of the constant
thread of patent infringement that they have cast on
the ecosystem.
Unlike the Java world that is blossoming with
dozens of vibrant Java virtual machine
implementations, the .NET world has suffered
by this meme spread by Ballmer that they would
come after people that do not license patents
from them.

Sun on the other hand said from day one: we
will not sue you over patent infringement if
you implement your own Java. Google does
something similar with their APIs and Google's
Wave: they are giving everyone access to their
stuff.

As the only implementor of the ECMA
standards outside of Microsoft, I sure would
have hoped that they had given rights to
everyone to implement. They would still be
the #1 stack, but it would have encouraged an
ecosystem that would have innovated
extensively around their platform.

Instead, people went and innovated on Java
or other platforms that might not have been as
advanced as .NET, but at least they were not
under Microsoft threat.

Google could have used .NET, Rails could
have been built on .NET, the Wikipedia and
Facebook could have been built using ASP.NET.

All of those are failed opportunities.
Even if the cross-language story was great,
the web integration fantastic, the
architecture was the right one to fit whatever
flavor of a platform you wanted, people
flocked elsewhere.

This is their largest mistake, and it is
perhaps too late to do anything about it.

It took Microsoft eight years, a new management and a fresh
set of eyes to change some of these mistakes. The veil of
threats that existed over the runtime in 2001 was lifted with
the Community
Promise announcement but it took eight years, and those
were eight years of lost opportunity and FUD directed at all
things Microsoft.

I still believe that Microsoft lost a great opportunity of
having .NET become the universal runtime of the net, and they
could still have the best implementation. I still believe
that they should put the rest of .NET under the Community
Promise or OSP and even with Mono as an open source
implementation, they would retain their edge.

On Innovation on other Runtimes

David quotes Ted Neward (a speaker on the .NET and Java
circuits, but not an open source guy by any stretch of the
imagination). Ted tried to refute my point about Java and
innovation but seemed to have missed the point.

The article attributed this to Ted: "Microsoft has made
an open-source CLI implementation codenamed 'Rotor' freely
available, but it has had little or no uptake".

There is a very simple reason for that. Rotor was not
open source and it was doomed to failure the moment it came
out. When Microsoft released Rotor in 2002 or 2003 they had
no idea what they were doing and basically botched the whole
effort by using a proprietary license for Rotor.

Rotor's license was "look but do not touch" and prohibited
commercial use of it. This is a non-starter for anyone that
wants to call their
software open
source. Had Rotor been open source, we would have just
used that instead of building Mono and we would have invested
in it.

The article also gets the facts on the interest on Java
virtual machines wrong. Certainly only a handful are used
for large server deployments, but minor Java VMs were part of
the Java culture for years. Fine-tuned versions of the JavaVM
are used for all sorts of embedded scenarios and it has also
been used extensively in research.

The Jikes RVM Java implementation is still an important
playground for researchers where new garbage collectors, code
generator technology, large memory problems, and optimization
have been prototyped and tested. The open source Kaffe was
the first open source JIT engine and it lead to way for many
developers to explore the problems of cross platform JIT
compilation, Japhar lead the way for a full open source class
library stack (this became GNU class path). The Cacao open
source VM explored new code generation optimizations
techniques that were eventually used by other JIT engines.

In the industrial world, variations on Java were used for
embedded systems, the most popular one today is Dalvik,
Google's runtime for a Java-like runtime.

The list above is by no means comprehensive and the above
is merely the innovation that happened in the JavaVM world.
What is clear is that .NET/ECMA CLI fixed a lot of the design
mistakes in Java, improved in many areas and built on the
knowledge that had been gained from Java.

But my point about the ecosystem goes beyond the JVM, it is
about the Java ecosystem in general vs the .NET ecosystem.
Java was able to capitalize on having implementations on
Linux and Unix, which accounts for more than half the web
today. The Apache Foundation is a big hub for Java-based
development and it grew organically.

Had Microsoft been an open company in 2001 and had embraced
diversity we would live in a different world. The awesome
Mono team would probably be bigger, and the existing team
members would have longer vacations.

But for everyone that missed the point, luckily, Microsoft
has new management, new employees that know open source, fresh
new ideas, is becoming more open and is working actively on
interoperability with third parties. They even launched the
CodePlex Foundation.

As I told David on that interview, I am still a fan of .NET,
and we are going to continue working to bring Mono everywhere
where we think we could improve developer's experience. We
are actively working on improving Mono on Linux, Mono for
MeeGo, Mono for OSX, Mono for the PlayStation, Mono for
Xbox360, Mono for the Wii, Mono for the iPhone, Mono for
Android and Mono everywhere.

Just like everyone that complains about Sun's tight control
over the Java development process, I have my own regarding
Microsoft's development process for .NET. But that is just
business as usual.