È meno sul codice e sui sistemi operativi, più sui binari compilati e le architetture dei processori.
In C ++, possiamo scrivere codice che è portatile (funziona su Windows, Linux e Mac e sulle architetture dei processori più popolari i386, amd64, ARM ecc.), ma l'output del compilatore è associato a una combinazione specifica del sistema operativo e dell'architettura del processore . Dobbiamo compilare il programma separatamente per ciascuna combinazione.
In Java, il codice viene compilato nel codice byte Java. Questo codice byte può essere eseguito su Java Virtual Machine (VM) in esecuzione su qualsiasi configurazione hardware / OS . La VM deve ancora essere compilata separatamente per ogni architettura del processore e sistema operativo, ma viene sempre eseguita dal provider VM. Esistono differenze tra VM di provider diversi, pertanto il codice e il codice byte sono sempre portabili nel contesto del singolo provider VM. È possibile scrivere un programma Java eseguito su più implementazioni VM, ma le differenze devono essere prese in considerazione.
In breve:
- L'unica fonte è facile, il binario del singolo programma è più difficile,
- Java aggiunge problemi di implementazione cross-vm a problemi di cross-os già presenti.