Загалом, я повинен сказати, що немає жодних гарантій того, що одне і те ж джерело створить той самий байт-код, коли його компілює той самий компілятор, але на іншій платформі.
Я б розглянув сценарії, що стосуються різних мов (кодових сторінок), наприклад Windows з підтримкою японської мови. Подумайте про багатобайтові символи; окрім випадків, коли компілятор завжди вважає, що йому потрібно підтримувати всі мови, які він може оптимізувати для 8-розрядних ASCII.
У рамках бінарної сумісності Release-to-Release в SOM (Forman, Conner, Danforth і Raper, Proceedings of OOPSLA '95), бінарні файли мови програмування Java є бінарними, сумісними у всіх відповідних перетвореннях, які автори ідентифікують (з деякими застереженнями з щодо додавання змінних екземпляра). Використовуючи їх схему, ось список деяких важливих бінарних сумісних змін, які підтримує мова програмування Java:
• Переосмислення існуючих методів, конструкторів та ініціалізаторів для підвищення продуктивності.
• Зміна методів або конструкторів для повернення значень на входах, для яких вони раніше або викидали винятки, які зазвичай не повинні відбуватися, або не вдалися, потрапивши в нескінченний цикл або спричинивши глухий кут.
• Додавання нових полів, методів або конструкторів до існуючого класу або інтерфейсу.
• Видалення приватних полів, методів або конструкторів класу.
• Коли оновлюється весь пакет, видаляються поля доступу, методи або конструктори класів та інтерфейсів за замовчуванням (лише для пакету).
• Переупорядкування полів, методів або конструкторів у існуючій декларації типу.
• Переміщення методу вгору в ієрархії класів.
• Впорядкування списку прямих суперінтерфейсів класу або інтерфейсу.
• Вставка нових типів класів або інтерфейсів в ієрархію типів.
Цей розділ визначає мінімальні стандарти двійкової сумісності, гарантовані всіма реалізаціями. Мова програмування Java гарантує сумісність при змішуванні двійкових файлів класів та інтерфейсів, які, як відомо, не надходять із сумісних джерел, але джерела яких були змінені описаними тут сумісними способами. Зверніть увагу, що ми обговорюємо сумісність між випусками програми. Обговорення сумісності між випусками платформи Java SE виходить за рамки цього розділу.