OK, so I made myself obtuse.
Much of Java is implemented using native code; although some of the standard library functions are pure Java, many aren’t (and e.g. AWT by definition cannot be).
I am not making a point about native code; I am making a point about native code that ONLY runs on ONE java platform. If a java app runs anywhere that has a byte-code executor (BCE), then it’s definitely java. If it runs anywhere that has a “standard”/“well-supported” BCE, then it seems we should call it java (because the days of “every platform has a BCE” are over. I actually remember once gettting hold of a DOS JVM whilst I was working in IBM. Nowadays, if every “major” platform is covered, that seems to be considered good enough, according to consensus opinion).
The problem here is that Sun doesn’t appear to have a clear definition of how many platforms something has to run on to be “real” Java as opposed to “a C++/ASM program that happens to have used some bits of Java”. Witness the fact that most java developers considered Microsoft’s extended-Java as “not real java” although in an abstract sense it was arguably a perfectly valid form of java, with extra bits (ignoring for the time being the bits that weren’t updated in line with “mainstream” java moving to 1.2 then 1.3 etc).
I suspect that this vagueness is largely because Sun doesn’t wish anyone to start making loud noises about how they in particular (sun) should actively develop (and support) a JVM on every platform.
So, if the terrain demo came with 3 native binaries - one for Win, Unix, and Mac OS, I would personally call it a “java” demo. With only a win binary, it’s a win32 application that only runs on windows. Seeing as that breaks one of the top 3 most fundamental aspects of java - WORM - I find myself convinced by the arguments of the apparent majority: it is a Windows demo.
Personally, I consider it a windows demo, with Java scripting controlling it. It’s a hybrid. If it used Java3D, I’d call it a java demo (personally, but I suspect many people would still call it non-java, as explained below…).
W.r.t. Java3d, I suspect that at least part of why J3D still languishes as a freak that Sun leaves out in the cold (excuse the extreme statements; but J3D has been around for YEARS without getting made mainstream by Sun) is because of the “java trochotomy”. I honestly cannot believe that Java2D is used in more cases that Java3D would be if it were part of the standard libraries - high-precision CAG etc (most of J2D) is used a lot less often in general client-GUI programming than 3D is (or would be, if it were easily available to developers).
What is Java? Java is… [the trichotomy:]
…an assembly language (the bytecode) AND the associated virtual processor architecture
…a programming language (the syntax)
…a common set of libraries (java.*)
(playing devil’s advocate:) Java3D can never be truly part of Java because to call it “java” would either mean modifying the byte code to allow for 3D-hardware interaction, or would mean that Java-defined-as-bytecode was no longer a valid definition. Witness that Sun has historically moved Java away from anything that is hardware-specific (AWT ceded in favour of Swing).
Shrug. Maybe I’m just pissed-off because 90% of my machines, running up-to-date JVM’s, can’t run a given program because they’re unix, linux and Mac OS. I can even run almost all non-graphical java programs on an Acorn, without recompilation or additional bug fixes, so not being able to run something on mainstream platforms is a major annoyance, considering this is one of the advantages of java.