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.