Binär kompatibel sicher nicht, meinst Du vielleicht
API?
Java als Sprache ist erstmal eine Spezifikation. Es gibt verschiedenste Implementierungen (glaub früher irgendwann auch mal eine von MS). Der Anspruch, auf unterschiedlichsten Plattformen lauffähig zu sein ergibt in Konsequenz, dass eine binäre Kompatibilität gar nicht gegeben sein kann. Ob x86/64, ARM, MIPS, ... allein die Hardwareplattformen ergeben zwangsläufig gewisse Unterschiede. Wenn z.B. keine FPU da ist, muss auch die Implementierung anders ausfallen.
Der Anspruch (der unterschiedlichen Anbieter) ist natürlich auch, fehlerfrei und vollständig eine Spec zu erfüllen. Java selbst definiert da ja auch unterschiedliche Ranges, bspw. mit Java Enterprise. Java auf dem CISCO Telefon und in der berühmten Waschmaschine oder auf einem High End Rechner, die Implementierungen sind sicher nicht überall identisch.
Wenn man die im Bild aufgeführten Beispiele nimmt und davon ausgeht, dass sie alle das gleiche können (auf einem herkömmlichen PC mit einem herkömmlichen Betriebssystem wie Windows, Linux, Mac
OS..), ergeben sich die Unterschiede bspw. bei der Integration aber wahrscheinlich vor allem bei der Performance. Das klassische Argument gegen Java war die niedrigere Performance. Je nach Verbreitung der Plattform wurde und wird an dieser Ecke stark gearbeitet und es gibt heute sehr schnelle Implementierungen.
Wenn man tatsächlich für unterschiedliche Plattformen entwickeln möchte, kann man mindestens an dieser Stelle nicht ohne weiteres davon ausgehen, auf allen Plattformen vergleichbar schnelle Resultate zu erhalten (bei vergleichbarer Rechenleistung der CPU).
Im Grunde ist diese Problematik identisch zu den Compilern, die ja zeitlich nie so nahe an der Hardware sind, wie die Hardware Hersteller es gerne hätten. Kompiliert man alten Code mit modernen Compilern, ist er oft bedeutend schneller, ohne das der Code geändert wurde.