It is certainly true that the byte-code of a compiled Java program can be executed
by any JVM implementation that adheres to the VM-specification. Inside the
JVM, there needs to be platform specific code, aka. native code, which translates
between Java’s runtime library and the operating system API. This native code
often introduces subtle differences between the various JVM implementations. In
reality, a Java program usually needs to be modified, i.e. ported, to run on a
different platform.