Ogólnie rzecz biorąc, muszę powiedzieć, że nie ma gwarancji, że to samo źródło wyprodukuje ten sam kod bajtowy, gdy zostanie skompilowane przez ten sam kompilator, ale na innej platformie.
Przyjrzałbym się scenariuszom obejmującym różne języki (strony kodowe), na przykład Windows z obsługą języka japońskiego. Pomyśl o znakach wielobajtowych; chyba że kompilator zawsze zakłada, że musi obsługiwać wszystkie języki, które może zoptymalizować pod kątem 8-bitowego ASCII.
W specyfikacji języka Java znajduje się sekcja dotycząca zgodności binarnej .
W ramach kompatybilności binarnej z wydania do wydania w SOM (Forman, Conner, Danforth i Raper, Proceedings of OOPSLA '95), pliki binarne języka programowania Java są kompatybilne binarnie we wszystkich istotnych transformacjach, które autorzy identyfikują (z pewnymi zastrzeżeniami z w odniesieniu do dodawania zmiennych instancji). Korzystając z ich schematu, oto lista niektórych ważnych zmian kompatybilnych binarnie, które obsługuje język programowania Java:
• Ponowne zaimplementowanie istniejących metod, konstruktorów i inicjatorów w celu poprawy wydajności.
• Zmiana metod lub konstruktorów tak, aby zwracały wartości na danych wejściowych, dla których poprzednio generowały wyjątki, które normalnie nie powinny występować, lub kończyły się niepowodzeniem, przechodząc w nieskończoną pętlę lub powodując zakleszczenie.
• Dodawanie nowych pól, metod lub konstruktorów do istniejącej klasy lub interfejsu.
• Usuwanie prywatnych pól, metod lub konstruktorów klasy.
• Gdy cały pakiet jest aktualizowany, usuwanie domyślnych (tylko dla pakietu) pól dostępu, metod lub konstruktorów klas i interfejsów w pakiecie.
• Zmiana kolejności pól, metod lub konstruktorów w istniejącej deklaracji typu.
• Przenoszenie metody w górę w hierarchii klas.
• Zmiana kolejności na liście bezpośrednich superinterfejsów klasy lub interfejsu.
• Wstawianie nowych klas lub typów interfejsów do hierarchii typów.
Ten rozdział określa minimalne standardy kompatybilności binarnej gwarantowanej przez wszystkie implementacje. Język programowania Java gwarantuje zgodność w przypadku mieszania plików binarnych klas i interfejsów, o których nie wiadomo, że pochodzą z kompatybilnych źródeł, ale których źródła zostały zmodyfikowane w zgodny sposób opisany tutaj. Zauważ, że omawiamy kompatybilność między wersjami aplikacji. Omówienie kompatybilności między wersjami platformy Java SE wykracza poza zakres tego rozdziału.