Ross, but how many apps are deployed cross-platform? How many people deploy un*x solutions built on Java that work with more than one JVM?
As long as there's more than one JVM out there, there will be differences between the JVM's. That means that writing solutions for more than one JVM increases the cost of writing software.
Back when I used to use Java (I did so for 6 years) Sun had a compatability kit (called JCK I think) which your VM had to pass to be certified as a valid implementation. I don't know if this is still used but I don't recall different VMs being a problem -
there were few enough back then though.
The reality is that no matter how carefully the language is specified, there will be differences in each independant implementation. The same thing holds true for virtual machines. This basic fact is why the cost savings that were the main benefit of Java
(remember "Write Once, Run Everywhere"?) haven't materialized. The reality was "Write Once, TEST Everywhere"). Since test is a huge part of the cost of developing software...
Agreed, but writing portable apps in C requires testing as well - but with Java at least you are reaping benefit from the GC and standard libs. And I know you're not suggesting that I can write an app on W2K and deploy it on every version of windows (without
This (IMHO) is the primary reason Java has never succeeded on the desktop, and why it IS succeeding on the server. On the desktop, you need to deal with multiple JVMs, one for each client OS. On the server, you typically only have one server OS, so you
only have to concentrate on a single JVM.
Personally I put the desktop failures down to inconsistent UIs with the target platform, poor startup performance, poor memory usage models.
In fact when I switched to C# (for a desktop app), my first thoughts weren't 'wow this is a much better implementation of a VM than X,Y or Z' - it was - 'Chris, Chris come check out the startup speed on this baby", I had got so used to Java being slow that
I had all but given up on 'managed' languages - if I wanted super-duper performance I fired up gcc/cl. If I had to do that project again, I'd be using Win32 though (I am a sucker for punishment).
If we remove portability from the argument (which I know is cheating a little - I'll concede the point as I don't want to defend Java), and assume that Java 5 (which I haven't looked at) has solved a lot of these problems - why would I use C# rather than Java
if I only wanted to ship a Windows app?