But What If I Want To Run My .NET Apps (via a Java VM) as Part of My Java Apps?

by M. David Peterson

You bet, no problem (well, at least soon enough it won't be a problem)

IKVM.NET Weblog - JaCIL

Almann Goo released version 0.6.0.0 of JaCIL on Saturday. The goal of JaCIL is basically to be a reverse ikvmc, it converts .NET assemblies into Java jars.

The binary distribution includes a couple of demos. Naturally I had to try and run them on IKVM :-) I ran into two known IKVM bugs, the first being that JaCIL generates a class and prior to Java 1.5 this wasn't a valid class name, but since Java 1.5 the class name space has been significantly enlarged, almost all checks have been removed. The second bug was that Java classes with both a Finalize() and finalize() method would be compiled incorrectly (under the covers IKVM generates a Finalize() method that overrides System.Object::Finalize and calls java.lang.Object::finalize), I've added support for this by renaming the generated Finalize method when it is necessary.


To better understand the possibilities that exist with this, Jeroen has thrown a recursion "poem"(scroll down half a page) of his own into the mix,

maybe we'll eventually be able to run Java on .NET on Java on .NET on Java on .NET on Java... ;-)


I conversed in email with Almann a while back when he first announced this project to the IKVM.NET forums, and was just as excited about the possibilities then as I am now.

I'd say we've got ourselves a pretty killer app on our hands, courtesy, once again, of a member of one of the Open Source Communities.

Thanks Almann! (and Jeroen, Mark (Wielaard), Classpath project developers in general, and other contributors to the IKVM.NET project! :D)

NOTE: Worth pointing out. What we gain with this is not *JUST* the ability to compile projects that we have the source for, but also any other .NET assembly that we don't have the source for. In other words, like IKVM.NET (but in reverse as Jeroen points out), the CIL will be translated to Java byte-codes. So all I need is the CIL-based .NET assemblies that my project relies on, and *POOF*, I've got a JavaVM-enabled .NET application.

Well, soon enough, anyway.