Ja.NET é um porte do Java 1.5 SE para a plataforma .NET. O compilador é baseado no Eclipse JDT, que foi modificado para gerar tanto IL quanto JaJa Byte Code. Java tradicionalmente compila cada classe em um arquivo separado, ma isso cria um overhead inaceitável para .NET. Para resolver isso, uma ferramenta baseada no Cecil é usado par criar grandes pacotes de forma similar a como os arquivos Jar são criados para Java.
Para conseguir um bom começo no suporte a bibliotecas, o Ja.NET JDK é baseado no projeto open source Apache Harmony. Dave Tillman escreveu,
Uma coisa que me atraui no Hermony, como alternativa em relação ao openJDK, é que as bibliotecas no Harmony já estão organizadas em módulos. Por exemplo, você encontra um módulo LUNI que se compara ao Lang-Util-Net-Io, um módulo NIO, etc. De qualquer forma, eu comecei trabalhando com o OpenJDK e também tenho uma versão dessa funcionando em minha máquina, mas escolhi mudar para o Harmony a algum tempo atrás.
Quando nós conversamos com o Dave, ele deu alguns detalhes para a InfoQ,
Nesse ponto, o projeto Ja.NET SE é unicamente focado no Java SE. Fornecendo um Java 5 SDK para .NET. Antes de avançar para algo maior (Java EE), eu acho que nó precisamos terminar o SE, e terminar direito. Todas as bibliotecas do Java 5 SE estão incluídas na distribuição, MAS, nem todas são totalmente funcionais. Percebe-se que estou baseando meu trabalho em vários projetos conhecidos (veja meu blog para mais detalhes - www.janetdev.org). O maior é o projeto Apache Harmony. Harmony desenvolveu código para a maior parte (99,x%) das bibliotecas do Java 5 SE, incluindo Swing, AWT, etc. Eles também tem código Java ME e Java 6.
As bibliotecas Ja.NET SE são derivadas do código do Harmony, e hoje eu faço o build de todo o código do Harmony em pacotes para .NET e os incluo para distribuição. MAS nem todo o trabalho de modificar o código das bibliotecas de classes para unir isso aos serviços .NET/CLR correspondentes está completo neste momento. Por exemplo, o trabalho para Swing e AWT no WPF não foi feito ... isso explica porque estou procurando por voluntários ;-). Para fazer isso, uma pessoa deveria pegar o código base do Swing/AWT que já é fornecido pelo Harmony, abrí-lo e adicionar chamadas para as APIs do WPF no lugares apropriados do código. Todo o código Swing/AWT do Harmony já compila para pacotes .NET, só não está atrelado ao WPF ainda.
Então, o que há. Bem, o suficiente das bibliotecas core (reflection, concurrency, class loading, io, nio charsets, etc.) e há ferramentas Ja.NET SE (compilador, assembly merger, executam no .NET. Também, eu consegui que boa parte do JUnit 4.3/4.5, Xerces 2.8, Ant 1.7.0 funcionem no .NET sem nenhuma mudança no código. E, claro, estou adicionando mais e mais, diariamente! :-)
Ja.NET rodas tanto no CLR Microsoft quanto na plataforma Mono da Novell.