c is "sort of" portable. it is "in theory" portable. Java is portable "in theory and practice".
This point is simply not true, at least for Java as it exists in Spring 1996. Almost every Java applet I've seen has little UI glitches that prevent it from displaying and operating correctly on all platforms.
you caveat, as you write it, is very significant. what I wrote about was that the burden of portability is placed on the PROGRAMMER for C. the burden of portability is placed on the Java language implementers for Java. a BIG difference. Java may be *riddled* with bugs at the moment. but who is responsible for fixing them? every single programmer in existence who wants to port code? (that is what effectively happens with C makefiles) or the language designers? i.e. Java Inc.? you can see the tremendous difference here. the level of portability *demanded* by the language specification of Java is far higher than C. whether this works out in practice will take years of fine tuning. but look how old C is-- 20 years-- and has its portability gotten better with time, or worse? give Java another few years and its going to be so good that no one will be arguing with supporters. Further, there are little glitches in the language
implementation and library design that often cause portability problems. For example, the first cut of Hal's PGP applet had the standard UI problems, plus the fact that a "spinner" thread caused the entire browser to lock up -- on Unix, but not on Windows.
whose problem is this? his or Java implementors? not his. granted, in practice he may have to design around it. but Java is in its infancy and you can't demand mature characteristics. as I emphasized, it is evolving. it is a step in the right direction. you can't ask Excel to be written before the PC has been invented. similarly, Java will not crystallize for some time yet. (however UI problems do seem to me to be the source of the greatest amount of intrinsic compatibility problems. I was not wholly impressed with the labor that seemed to go into the Java UI at first-- it seemed like a little of an afterthought) And this was a 5000
line of code applet. Hal was able to fix the problems, but it's easy to see how the effort involved in this "portability engineering" could become comparable to your thousand-line makefile as applications scale up. The promise is there, but Java has not yet delivered.
I agree that in practice Java is pretty weak at the moment. but consider how much money Sun has made from it. do you realize they poured 5M initial development costs into it? can you be sure they will recoup that? they probably have, but they've been incredibly generous. I am never ceased to be amazed at how much people rant at stuff that is given away for free or amazingly low cost.
Another concern with Java is that it acheives portability at the cost of enforcing a lowest common denominator. For example, all real Windows applications support OLE, and all real Mac applications support Apple Events. Java applets, and even applications, can't do either. To me, that makes the accomplishment of portability a bit less impressive, even if it were so.
Java cannot solve every programming problem on the planet. it cannot be a secure OS. it cannot give you a worldwide object standard. Java has an event mechanism just as Apple does, and it supports object oriented programming just as OLE is a standard associated with OO. IMHO it did what it did well. if you want OLE go to microsoft, if you want Apple Events program on the apple!!! if you want one language in which you don't have to worry about every standard in the world, try Java.