Nel complesso, devo dire che non vi è alcuna garanzia che la stessa sorgente produrrà lo stesso bytecode quando compilata dallo stesso compilatore ma su una piattaforma diversa.
Analizzerei scenari che coinvolgono lingue diverse (code-page), ad esempio Windows con supporto per la lingua giapponese. Pensa a caratteri multibyte; a meno che il compilatore non presuma sempre di dover supportare tutti i linguaggi, potrebbe ottimizzare per ASCII a 8 bit.
Nell'ambito della compatibilità binaria da rilascio a rilascio in SOM (Forman, Conner, Danforth e Raper, Proceedings of OOPSLA '95), i binari del linguaggio di programmazione Java sono compatibili con i binari sotto tutte le trasformazioni rilevanti che gli autori identificano (con alcuni avvertimenti con rispetto all'aggiunta di variabili di istanza). Usando il loro schema, ecco un elenco di alcune importanti modifiche compatibili con i binari che il linguaggio di programmazione Java supporta:
• Reimplementazione di metodi, costruttori e inizializzatori esistenti per migliorare le prestazioni.
• Modifica di metodi o costruttori per restituire valori sugli input per i quali in precedenza generavano eccezioni che normalmente non dovrebbero verificarsi o non sono riuscite entrando in un ciclo infinito o provocando un deadlock.
• Aggiunta di nuovi campi, metodi o costruttori a una classe o interfaccia esistente.
• Eliminazione di campi, metodi o costruttori privati di una classe.
• Quando viene aggiornato un intero pacchetto, l'eliminazione di campi di accesso, metodi o costruttori di classi e interfacce predefiniti (solo pacchetto) nel pacchetto.
• Riordinare i campi, i metodi o i costruttori in una dichiarazione di tipo esistente.
• Spostare un metodo verso l'alto nella gerarchia delle classi.
• Riordinare l'elenco delle superinterfacce dirette di una classe o interfaccia.
• Inserimento di nuovi tipi di classe o interfaccia nella gerarchia dei tipi.
Questo capitolo specifica gli standard minimi per la compatibilità binaria garantita da tutte le implementazioni. Il linguaggio di programmazione Java garantisce la compatibilità quando i binari di classi e interfacce sono misti che non si sa provengono da sorgenti compatibili, ma le cui sorgenti sono state modificate nei modi compatibili qui descritti. Si noti che stiamo discutendo la compatibilità tra le versioni di un'applicazione. Una discussione sulla compatibilità tra le versioni della piattaforma Java SE esula dallo scopo di questo capitolo.