Home

June 2008

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     
Powered by LiveJournal.com

An Open Letter to Jonathan Schwartz and Miguel de Icaza


Jonathan, you are leading the development of a Free Software, high-quality, multi-language VM runtime with an extensive class library, called OpenJDK.

Miguel, you are leading the development of a Free Software, high-quality, multi-language VM runtime with an extensive class library, called Mono.


How about a merge? We'll call the new project "OpenVM", for convenience in this letter.


Let's jump right in to the advantages for the projects:


Advantages for Mono


In one word - control. Miguel, your original goal with Mono was to bring a modern and Free Software development stack to GNOME and Linux. In many respects, you and the Mono community have been succeesful, helping spur the creation useful applications for the Free desktop, as well as getting Mono deployed in interesting applications like Second Life. However, you are largely not in control of your destiny. You're stuck implementing a clone of what Microsoft creates, and besides the fact that cloning something is much less fun for your engineers, you can't help but be behind.


By helping to create the OpenVM project, you will regain control. In an OpenVM effort, drawing on the common shared work of several corporations (Sun, Novell, Red Hat, Google, and IBM, to name a few), your engineers get to help design the future of Free Software. You will instantly remove all hesitation that the Free Software community has about your work, and have been the a key part of not one but two cornerstone projects for Free Software (GNOME, and Mono->OpenVM).


Advantages for OpenJDK


Jonathan, you have said you want to take the J out of JVM. By stepping up and adding Mono technology like a high quality C# compiler to this OpenVM effort, in the short term you will regain the eroding market share of the JVM on Windows by allowing interoperability between the growing C# code base and existing Java code. In the longer term, developer attraction to OpenVM will let you accelerate improvements to Java, and reverse gains in C# market share.
Moreover, the community agile languages such as Ruby and Python are nearly certain to join an OpenVM effort. Your company will again be at the core of the stack for the vast majority of the computing industry, from the Free Software community to the proprietary applications.


From the Free Software side, turning Mono from a Microsoft technology clone into a part of a truly Free project would eliminate the increasing use of .NET in the community.


Finally, leveraging the Mono team would bring a number of excellent engineers who know the Free desktop very well, having created high-quality bindings for GNOME, and Free applications that many people use.


Advantages for the Free Software community


The Free Software community has long been split between developers using Free and agile languages like Ruby and Python, the the Mono-based community, and a huge community of developers in the world who used in the formerly-proprietary Java in Free projects like Apache. A combined OpenJDK and Mono would dramatically further the merge of all three of these communities, increasing the control the Free Software community has over the stack and reducing duplication of HTTP libraries, database access libraries, etc.


Details


Obviously, there would be many details to work out in such an effort, like how the class libraries could be merged. My intuition is that initially OpenVM would have both JDK and .NET "personalities". Over time, the Mono .NET class library would be rebased on top of an evolved JDK class library, and eventually the .NET personality could be relegated to a separate "OpenVM-.NET emulation" project as most applications are ported to use the OpenVM JDK-based class library.


But the details are just that - where there's a will there is a way. So the open question is - who will register the domain name first?

Comments

(Anonymous)

+1

*empty*

(Anonymous)

Fail

The CLR and JVM underlying VM technologies aren't the same. You can run Java code on Mono only because of the IKVM project, which is an entire JVM and bytecode->CIL compiler written on top of the CLR. JVM is a very simplistic stack-based virtual machine design while the CLR is a fairly complicated register-based design that more closely models real hardware, providing (potential/theoretical) performance boosts. You really can't merge the VMs without forcing one to turn into the other, which in turn would mean writing conversion layers for the "loser" format to run on the "winner" format... in which case we're already there thanks to IKVM on Mono.

All your proposed project could really hope to achieve is getting a Java 2.0 that runs on CIL instead of the old Java bytecode. You'd just end up with Java becoming a new standard .NET dialect. Technical benefits aside, this would take care of none of your thinly veiled political issues with the Mono/Microsoft relationship.

Sounds like a really great idea.

It does sound like a really great idea. I think that it would be a gigantic amount of work, but the payoff could definitely be worth it.
Over time, the Mono .NET class library would be rebased on top of an evolved JDK class library, and eventually the .NET personality could be relegated to a separate "OpenVM-.NET emulation" project as most applications are ported to use the OpenVM JDK-based class library.

Would it? Why?
In short, because OpenVM should be in control of its own class library, not forced to implement whatever Microsoft puts out.

Gosh, if only....

I haven't played with Java in ages, but I can say that Monodevelop + Gtk# on mono is easily the most productive new environment I've ever learned. No idea why, but the extensive class library, introspection and stuff seem to help.

I think you also missed a VM - Dalvek/Android, which seems to sit somewhere between the CLR and JVM technically. I would be quite happy to develop against Android on the desktop for the most part - again, it's pretty rich, with nice extras like webkit and SQLite.

I doubt strongly that anyone is going to give up "their project". I would think mono would be the easiest to persuade, and I don't seem them being swung too heavily if .net doesn't join in. I don't see .net and Java merging, nor Google giving up Dalvek.

Do the runtimes need to merge though? IKVM is a nice proof of concept; perhaps the answer is you can choose your VM like you choose your OS at the moment. If the class libraries can be made available for any VM, and the bytecode is convertible somehow, suddenly that's very interesting. As a developer, you care about userbase and speed of development really.

(Anonymous)

More candidates.

Amen.

Next up on the list, lets merge:
GNOME/KDE
Linux/BSD/OpenSolaris
Gecko/WebKit
Perl/Python
All Linux distributions

There cannot possibly be any good reasons to have this type of duplication. One size should fit all.

(Anonymous)

Re: More candidates.

I agree with this comment :)

Re: More candidates.

The reason GNOME and KDE can't merge is very simple: Toolkit licensing. GNOME is LGPL, KDE is GPL. GNOME is not going to move the GPL, and KDE can't LGPL.

Same reason for Linux,BSD,and OpenSolaris.

Parrot

There is also parrot.
As it has been mentioned each platform is based on different approach. However as "we" have practical control over one enviroment[1] we could change JVM 1.8 into partially register based machine (with stack instruction to backward compatibility with 1.7). Is it worth? I don't know.
Also it seems that nothing stops "us" from C# etc. to JVM compillation. However it would break the ABI with .Net (not a good solution).

[1] JVM - parrot doesn't count. At least yet.

(Anonymous)

LLVM

Another "And what about this other tool too post!"
It's nice with a common runtime, but people are never going to agree on one ;).

What about LLVM? It appears to be a more evolutionary approach. it splits runtime/garbage collection from a VM it' using it with C is actually possible ;). I think that might make it useful for future gtk runtime enviroment.

For an outsider a toolchain based on llvm would be easier to grasp than gcc code ;).

(Anonymous)

Java

Actually I kinda like this idea...BUT:

I would not like Java to become...J#...which is just another rarely used .NET language.

And I would not like C# with the Java class library...cause lets face it: the .NET class library are superior to the aging Java class library (which is clearly marked by its backwards compatibility). Sometimes you need to break stuff to get it right, but has Java broken anything the last 10 years? I am a (professional) Java programmer, but for the .NET class library and nothing else I am learning C# as we speak. its all about how .NET is designed top town, while the Java library is the results of years of evolution, and thus haven't gotten rid of the mistakes made many years ago.

(Anonymous)

"Advantages for Mono

In one word - control."

Sun controls Java and do not seem willing to give it up, so Miguel & team switching to the JVM would not be a win for them.
No, they don't anymore! OpenJDK is GPL+exception - entirely Free Software. No one company can completely control Free Software, because the option to fork is always there.

[thread continuation]

An anonymous user wrote
on March 26th, 2008 at 12:49 am
Mono needs to support .NET binaries or they will end up screwing over their userbase.

Likewise, Sun doesn't want to lose support for the Java bytecodes for the same reason.

Where does this leave us? It means that either the Mono VM would need to add support for the java bytecodes or else the Java VM would need to add support for CIL.


For compatibility with .NET bytecode, a system could be created for translating from .NET to the new OpenVM bytecode. This is certainly possible if OpenVM adds some new codes which would be good enough to emulate what .NET has.

But...What's the point? You just end up over-complicating the resulting VM for zero gain


There are several advantages. First, in the *long term*, OpenVM has one class library, and most free programs wouldn't need to use the .NET compatibility later.

Second, the Mono engineers combined with OpenJDK engineers could create a much better runtime and libraries, and would likely get strong interest from community dynamic languages like Ruby and Python.

Re: [thread continuation]

That's what I'm saying and observing. It's already happening. I like the idea of OpenVM, but I think the energy is best spent in supporting *source* level compatibility between different languages that run on top of any runtime.

-JRuby/IronRuby/MRI Ruby & Rubinius
-Jython/IronPython/C Python
-Java/IKVM/?(Couldn't gcj compile to native?)

Nobody writes for a VM. They write for a language that runs on top of it. And the focus should appropriately be there - on the languages.
But that does mean that either we need really good tests to validate languages with each other or implementations that write most of their class libraries in the language itself to reduce mismatches between them. Rubinius is an example of this in Ruby-land (they've collab'ed with JRuby) and there's one in Python (but I don't know what it's called).

It also means we might need to use community pressure to discourage using "cul de sac languages" like C# and Java.

(Anonymous)

+1

(Anonymous)

is it possible to be a little less cheeky and little bit more honest?

I cannot help but think that anytime you mention Mono your tone becomes woefully disingenuous.

Step back from this pie-in-the-sky revelation that OpenJDK is now totally "Free". The possibility of a fork is in this context just about meaningless-pray tell who is actually considering forking it ? right. Noone.

For someone like you with multiple years of experience in Free software communities your naivete when it come to Sun is simply baffling. I know Redhat has gone 100% pro-java in the past years, culminating in the acquisition of JBOSS, but feel-good-java-googoo-gaagaa will not change the fact that a) contributions from outside of Sun account for perhaps 0.001 % of Java code and b) that Sun has never understood or been adequately capable of working cooperatively with larger communities-Sun + Community=Sun Community=total Sun Control and token interaction with others. And no licensing does not effect this at all.

(don't get me wrong-I would love to proven wrong-but 20 years watching Sun and their "community" work makes me more than a little sceptical)

Right now Mono + GTK# is an active, vibrant part of the GNOME desktop. Java is not, has not ever been, and unless you fanboys start actually producing code-it never will be. Now one could argue that Java's strength is in the server domain as opposed to the desktop-and many, many people would agree-but if this is the case why the hell talk about a merger?

Mono is doing more to improve the state of the art of the Free desktop right now than Java ever has or will. And this despite your claims that it is doing nothing more than slavishly following MS's footsteps. What a bunch of hogwash.

You merely brush aside all of the concrete positive contributions that Mono has made to the Free Desktop, pointing towards Java which has contributed practically Zilch, and lambast Mono for being a clone of MS-which plays 0 role in the Free Desktop applications written in Mono. Talk about a strawman argument.

Mono as far as I can see it had two concrete goals since it's inception: 1) to create a platform-independent .NET implementation 2) to create a set of tools for the rapid creation of Desktop applications for the GNOME enviroment.

If you want to talk about "merging" VM's then you mean breaking the initial goals and thus fracturing Mono into 2 parts which could only diverge in the future. MS has not interest in "merging" the CLR with JVM. It ain't going to happen. If MS won't do this you want Mono to fracture it's own base and basically commit suicide.

At least be honest about this desired outcome. Don't make pretense about it pretending as if some merger would be good for the "community"- which damned community are you talking about ? Sun's "community" ? OpenJDK-non-sun-employee "community" Mono's "community" GNOME's ?

The opening up of Java code by Sun GPL'ing it is a tremendous step forward. I applaud their decision. I equally value the intense amount of work on behalf of the Free Software community to make the OpenJDK into a compelling Free Software framework. Java is fundamental to all server side software nowadays and will probably gain more traction now that it is GPL.

But Java is not of immediate practical importance to the Free Desktop-it may become more so with Web-based Desktops of TomorrowLand, but not here, not now. This is where Mono comes in-Mono also has a server side which ought not be overlooked-but it's real practical implications are for the Free Desktop right here, right now.

Please recognize these distinctions and value each for what they have to offer

On Java->OpenVM

A lot of the comments here are making things out like Mono has more to lose from a merger, but as I said in a comment, OpenVM would run C#. That's a large leap for "JAVA" (Sun's stock ticker).

Secondly, OpenVM would *not* have Swing (it would be part of the "Java" distribution though), which is certainly going to be hard to take for Sun.

But Sun's dream of "Java" being a development "horse pill" is pretty dead now. Swing is an OK toolkit but there's no reason for example you shouldn't be able to use OpenVM to write Windows.Forms apps on Windows, and "Gtk#" (which is really FreeDesktop/OpenVM bindings) on GNOME/Linux.

(Anonymous)

Re: On Java->OpenVM

Ah, so the main point of this would be to help inflate Sun's stock. I get it now...

Sun is still a company. They still want total control. Who cares that it is GPL when you can't contribute to the main project?

Face it, if you want to make modifications to Sun's JVM, then you have to fork it.

(Anonymous)

Why Merge?

Why would you want to merge them?

The only reasons for merging projects are technical reasons and political/governing issues. Neither of those make sense.

Technically merging them doesn't make sense, because JDK and .NET are the same basic thing. There are hundreds of pros/cons to each, and each side is slowly adopting the advances of the other side which is a good thing. And the JDK is already catering to the Ruby/Python crowds.

From a political, governing perspective, JDK is open, and reasonably politically neutral.

So why merge the two?

I don't even think Mono has a good reason for existing in the first place. I know why it exists: for the same reason that there are a thousand different linux distributions. It's human nature to never-endingly fork, branch, and create new versions of products already out there.

(Anonymous)

Re: Why Merge?

"...the fact that cloning something is much less fun for your engineers..."

Oh yeah, the closures controversy sure is a lot of fun!

Apart from that, Mono+JVM merge, excellent idea!

Re: Why Merge?

Technically merging them doesn't make sense, because JDK and .NET are the same basic thing. There are hundreds of pros/cons to each, and each side is slowly adopting the advances of the other side which is a good thing. And the JDK is already catering to the Ruby/Python crowds.


This was discussed in earlier comments; see for example
http://cgwalters.livejournal.com/14913.html?thread=98881#t98881

(Anonymous)

Beautiful idea

I think there is too much bad history, while the .NET and Mono crowd had no problem acknowledging the good parts of Java, the same has not been the case the other way around. Java is effectively now a subset of C#, slowly getting features added (thankfully the Enum made it, properties and events still haven't).

It's a beautiful idea though, but perhaps in the same sense as communism, one global language or one global currency.

Re: Beautiful idea

The JVM can evolve independently of Java though; new bytecodes could be added to make Ruby even faster, and compiling e.g. C# to an OVM bytecode target without necessarily changing Java the language.