James Gosling is the man who invented Java. ARN editor Philip Sim caught up with him at the recent Sunergy conference in SydneyARN: What has disappointed you most about the way Java has developed and evolved?
Gosling: The biggest disappointment for me has been Microsoft's behaviour, although I guess that wasn't that much of a disappointment because it was predictable. But it's been painful.
How much effect have they had in railroading Java?
It's hard to measure, because on the one hand they've been doing everything they can to generate fear, uncertainty and doubt - launching these FUD missiles. But on the other hand, the naked fear of Microsoft has galvanised a lot of people on the political side over to the side of Java in many positive ways. So it's actually hard to tell whether Microsoft has actually been more positive than negative.
How things would have gone in the absence of Microsoft I don't know.
Microsoft's argument seems to be that they give developers a choice. You can develop in Pure Java or you can develop Java only for Windows. What's wrong with that argument?
So they give people a choice, in that their tools have this mode switch. Yes, people can turn it on and off, but they sure don't make it clear you can turn it on or off. There aren't big flashing letters saying you're about to make something that's non-portable. And lots of people just sail into it and don't know about it.
The mode switch still doesn't give people a choice because if you touch any of Microsoft's libraries, you're instantly infected by stuff that is non-portable. You have to not use any of their extensions and you need to know that none of the libraries you use use any Microsoft extensions.
Java has had its fair share of critics who claim it isn't as portable as it should be and doesn't run as fast as it needs to. What do you say to those critics?
I'd say that they're hopelessly stuck in the past. Criticism of performance is based on looking at original versions of the system and we never originally designed it to be fast. It was designed to be incredibly portable and it is incredibly portable. Since then we've done a lot of performance work. You get any of the modern Virtual Machines (VMs) and any of the modern just in time compilers and you get performance which is very close to C. It won't be long before it's beating C. The performance of Java these days is well up to large enterprise applications. People are solving scientific numerical problems with Java and they're doing just fine.
What about in terms of write once, run anywhere?
The theory behind it has been holding up reasonably well but the first releases of the system and the integration of it into browsers has brought with it some pretty horrific problems.
You get people like Netscape with their first release of the system which they called 1.01 compliant. And we thought, well what about all the UI stuff, how could you do that? So we dismissed them as being complete bozos. Their reaction was: "We're sorry, we didn't have enough time and had to ship."
Another problem was that with early versions of the system we didn't have particularly good test suites. Now we've got dramatically better test suites. So with modern versions of the system which have been properly certified the write once, run anywhere story runs fairly well.
Have you been disappointed by the take-up of Java?
No, I've been astonished by the take-up of Java. You see Java in the most amazing places, people doing all kinds of stuff that I never would have thought people would be doing, like meteorological simulations and consortiums of oil companies getting together and building seismic grid analysis libraries. NASA's doing satellite orbit calculations and control systems for satellites and telescopes. FedEx are tracking all their packages. It's way over the top.
But if you went back a year and looked at some of the predictions that were made about Java, you'd have to say the technology was being over-hyped, wouldn't you?
There were a variety of people that got out of control, saying that it was going to kill Microsoft and most of that was just stupid. But with a lot of these other things we've been talking about being able to do with Java, like the embedded stuff, that's all happening. These things don't happen overnight, though.
Why should Australian software developers develop in Java?
There are all sorts of reasons, depending on the type of thing they're doing. There have been all types of studies about developer productivity and they tend to consistently find that that you get 2x productivity bonuses with Java over C and C++.
Java has got a lot more extensive network components, so it makes it much easier to build distributed applications. It's also got error management capabilities to deal with failures. It has some quite sophisticated built-in user interface work. So you can build very complicated user interfaces, table trees and things. There's integrated database material and the whole suite of existing plug-in technologies is massive.
But if you look at the high profile larger companies who have announced they would develop in Java - people like Corel, it doesn't look to have gone very well.
Corel had a variety of problems. But if you look at what Baan, SAP and Peoplesoft are doing and you go around Silicon Valley, you'll see a number of companies doing very cool things with Java - people like Caresoft and Vitria.
Vitria built really interesting inverse database technology for building distributed application across large networks. It's what is at the heart of the FedEx tracking system. It's also been used in a number of factory control systems, and these are very big factories making silicon chips. CareSoft is a company that has built some fascinating health management software.
What do you see as the big opportunities for Australian developers?
In many ways the real opportunity is the Internet, because as a commercial mechanism it makes it possible for you to do business worldwide from Australia.
What style of Java applications have done best and have typified for you why you would use Java?
A lot of the folks who have done very well are the people who have really understood what you can get by leveraging the network. You brought up Corel. Their big problem was that they basically just took their existing applications and cloned them.
That was quite simply just the dumbest thing they could have done. They had these huge stovepipe monoliths and they didn't use any of the power of the network.
They weren't at all flexible, they didn't really use the fact that they had this dynamic flexible object structure and in particular they didn't exploit any collaborative things that you can do on the Net.
Then you get little companies like Netmosphere who have this project planning system and it allows teams of people distributed around a network to collaborate on building project plans and on running projects. And they've been quite successful.
Is it much of a programming leap to go from traditional programming of large stand-alone applications to understanding how you make use of the network and applications together?
Lots of people have been developing for a long time and have only been building these stand-alone monolithic hairballs. That's not what Java is about and if you start off with an architecture and a plan which is "lets go out and build another monolithic hairball", well guess what you end up with - another monolithic hairball. So why did you bother?