I've gone open
for 2007. Off my New
Year trolley. Its an epiphany for
A while back you will no
doubt remember I started a new project on java.net called NET2Java.
A humble new technology I created that, you know, translates any .NET application into Java
source code. Supporting VisualBasic. And C#. And an
extensible library of translation files to make it easy for anyone to
share their translations of .NET API calls.
And a plugin for NetBeans.
Since then I have had a number of notes from various people who
downloaded it. Some
curious, trying it out. Some having problems. A few using it on real
projects. One using it for some eye-wateringly large .NET applications.
(My eyes teared up at the thought of all those lines of C# turning into
lines of Java code, Grimm's miller
would be proud). Someone has even mentioned creating an Eclipse
plugin. I guess they all liked the before and afters.
But as you know, my day job is as platform
lead for Java SE, and so I
was becoming a bottleneck for progress of the technology. So I decided
it was time to stop being the spider at the center of the web, and I've
gone and open sourced it !
I'm licensing it under GPLv2, and I've worked out the governance rules
of the project (my house rules).
And if you have a friend struggling with .NET (so nineties), do let
them know there is an exit strategy.
I contend Java and .NET are the Pepsi and Coke of development platforms
today in terms of popularity. (No implied order...)
before about the lack of good tools that let people act on their
own conclusions on the Pepsi Challenge
equivalent for development
platforms. That infamous marketing campaign has a fascinating history and folklore.
But for Java and .NET, where are the tools and technologies that let
them intermix the two or migrate skills or applications from one platform to the
No sooner did I scratch my head than we are awash with fascinating Java
/ .NET projects. I should scratch more often ! Since I have had a number
in this area, I'll outline three new projects so you can
see what they are, what they're good for and where they're at.
Project Tango: Java and .NET Web
is for intermixing Java and .NET (C# or Visual Basic) applications,
using web services as the boundary. Its for developers working on one
development platform (Java or .NET) to be able to interoperate with
applications written for the other.
Tango is very unlike the bitter cola wars, because Sun and Microsoft
engineers have been working together
to make sure that the Java web services stack and the .NET web
services stack interoperate. If you thought reading the
ingredients on the side of a can of Coke or Pepsi was scary, check out
the ingredients list on the side of a stack of web services. But for the
normal, the upshot is that the Tango joint interoperability work
ensures that messages produced on one side are comprehensible to the
other, that the description of a web service on one side is
comprehensible to the other, that one side respects the security
guaranteed by the other, and the both sides agree on the quality of
service guaranteed by the other. All very reassuring if you're managing
inventory in a heterogeneous environment, for example.
Project Semplice: Visual Basic for the
Semplice is for developers who like the Visual Basic language and want
to develop on the Java platform. If you are one of them, you may be a
developer already familiar with Visual Basic, or perhaps you're a Java
developers attracted to some of the Visual Basic language features.
(I'm with Miss Jean Brodie on the more sugary Visual Basic language features: "For those who like that
sort of thing, that is the sort of thing they like".)
At the heart of this early stage technology, is a Visual Basic to
Java-bytecode compiler. No small feat, since many of the language
constructs in the CLR do not map cleanly onto the Java VM. Semplice
also supports VB6 (bringing joy to the disenchanted
?) which has some very un-Java like constructs. I predict that Semplice
is going to be most at home when tightly integrated with its
development environment Java
Studio Creator, which takes care of much of the heavy lifting,
leaving the developer to fill in the corners with short bursts of
demoed this to great success at JavaOne, and I join him and Herbert
in beseeching Jon Kline, one of the other team members, to get a blog
NET2Java: Translating .NET source code
into Java source code
NET2Java is a .NET (C# or
Visual Basic) source to Java source code translation technology. So
this is for .NET developers who have already taken the taste challenge
and have decided to move their work to the Java platform.
Developed by yours truly, and also in early stage of development, this
technology includes language parsers for VB.NET and C#, together with
an extensible library of .NET API call to Java API call translations.
The ambitious part of this technology is to complete the library, which
will require many hands, and is why I made it available recently.
There's a NET2Java plugin for NetBeans that integrates it with the IDE
so developers can easily switch IDEs while they're switching platforms.
So there you have it, three projects, three technologies, three
My secret agenda is to translate
every .NET program on the planet
into a Java program. So I'm announcing early access to NET2Java: a new
technology for translating .NET applications into Java
applications that behave the same way. It translates .NET source code
into Java source code.
You know how when there are two leading and competing products A and B, and you see the companies that make them playing the switch-trick ? The company that makes product
A guns for
the people using product B and make it super easy for them to
switch to product A ?
When I first came to the US (yes,
I'm not from here), before landline telephone companies had major
migraines like wireless and VOIP to deal with, the leading two
WorldCom and AT&T used to spend a lot of time and effort poaching
each other's customers. Like me. Aside from the free service for
however long they would give you (from which some of my cannier friends
would profit on a regular basis), one phone company would take care of
the sanity eroding task of canceling your account with the other. No
left-ear-numbing wait for customer service while destroying
a piece of music for all time that you used to enjoy, like Handel's
'The Arrival of the Queen of Sheba'
on infinite repeat, in anticipation of a half-hour interrogation as to
why you wanted to change your account. Usually by someone who was
audibly, emotionally and ceremonially not
Switch to Java ?
So what with most developers in the world programming either in Java or
a .NET language like VisualBasic or C#, it makes me wonder: where are
the clever tools or frameworks or experts to make easy transitions from
one side to the other ? Sure there are tools here and there. Microsoft
made it easy to transition off J++ into one of the other two, but
that's of course not
the same. (yet happily so for that village of developers, because
there was a whole city that did not
fare so well.)
Now you're not telling me that there aren't big companies with
developers some of whom develop in .NET and some of whom develop in
Java. J'accuse !
So don't they ever do lunch, and don't the Visual Basic or C#
developers ever want to dip their toes into our wonderful world of Java
and see what the hoopla is all about ?
If those people do want to see how we Java programmers enjoy ourselves,
they will find some tools to help them. But, and the valiant folks
them I hope will forgive me for saying this, they are few, far
always terribly up to date, and unsurprisingly, given the titans of
this industry don't support them well, limited in their ambitions.
I have several theories as to why this is. One of course is that there
are many other factors that keep developers (and sometimes more
importantly, the budget holders in their workplace) loyal to what they
already know. So the pressure to migrate people backwards and forwards
has to come from the top down; not always an effective strategy with
independent minded developers with choices.
But really I think a lot of the problem is that automating the
migration of applications from one platform to another is a very large
difficult task to do well in a general way. First of all the .NET and
Java platforms are very, very broad. There are lots and lots of API
calls that any single application could potentially make. So any kind
of automation has to be ready for any one of them. Second of all, many
applications use bespoke
components that are not necessarily availble to this valiant group
of people out there trying to support such migrations. So as
specialized as these components are to one particular company or
setting, equally specialized are the processes that would enable them
to be migrated. Again, hard to get right for the general case.
Something to ponder on.
Until the Arrival of the Queen of Sheba ;-)