DotGNU doesn't want to lock you into a single bytecode system
The plan to support Java and JVM
From a marketing strategy perspective, Microsoft's primary goal with the .NET
platform is to "kill" Java. If this should succeed it would be a significant
boost to their monopolistic ambitions; the DotGNU project definately has no
desire to promote C# over Java. We made the decision early on that we would
like to equally support both Java and C#, and both bytecode systems (JVM and
CLR).
A significant amount of work has been done in this direction. Our compiler
suite is not only able to emit bytecode for the Microsoft-designed CLR, but it
can also be used to generate bytecode for the JVM. We also have a Java-compiler
front-end. Unfortunately, both of these areas of coding work are currently
dormant for lack of volunteers.
These Java efforts will probably remain dormant until someone steps forward
and volunteers to champion them.
Support for future innovative bytecode systems
There can be no doubt that technological innovation in the area of
bytecode systems will continue. In particular,
Parrot, the bytecode system of the
Perl 6 project, looks very interesting.
The architecture of DotGNU allows to add back-ends for additional
bytecode systems to the cscc compiler system, and additional VMs
to the DGEE webservice server.
Migration between bytecode systems
Since both the compiler suite and the webservice server are designed
to support a choice of multiple bytecode system, migration from one
bytecode system to another can be done gradually, one program at a
time. This could be described as "stereo" of two bytecode
systems.