No geral, devo dizer que não há garantia de que a mesma fonte produzirá o mesmo bytecode quando compilada pelo mesmo compilador, mas em uma plataforma diferente.
Eu examinaria cenários envolvendo diferentes idiomas (páginas de código), por exemplo, Windows com suporte ao idioma japonês. Pense em personagens multibyte; a menos que o compilador sempre presuma que ele precisa oferecer suporte a todas as linguagens, ele pode otimizar para ASCII de 8 bits.
No âmbito da Compatibilidade Binária Release-to-Release em SOM (Forman, Conner, Danforth e Raper, Proceedings of OOPSLA '95), os binários da linguagem de programação Java são binários compatíveis em todas as transformações relevantes que os autores identificam (com algumas ressalvas com respeito à adição de variáveis de instância). Usando seu esquema, aqui está uma lista de algumas mudanças binárias compatíveis importantes que a linguagem de programação Java suporta:
• Reimplementar métodos, construtores e inicializadores existentes para melhorar o desempenho.
• Alterar métodos ou construtores para retornar valores em entradas para as quais eles lançaram exceções que normalmente não deveriam ocorrer ou falharam entrando em um loop infinito ou causando um deadlock.
• Adicionar novos campos, métodos ou construtores a uma classe ou interface existente.
• Excluindo campos privados, métodos ou construtores de uma classe.
• Quando um pacote inteiro é atualizado, excluindo campos de acesso padrão (apenas pacote), métodos ou construtores de classes e interfaces no pacote.
• Reordenar os campos, métodos ou construtores em uma declaração de tipo existente.
• Mover um método para cima na hierarquia de classes.
• Reordenar a lista de superinterfaces diretas de uma classe ou interface.
• Inserir novas classes ou tipos de interface na hierarquia de tipos.
Este capítulo especifica os padrões mínimos para compatibilidade binária garantida por todas as implementações. A linguagem de programação Java garante compatibilidade quando binários de classes e interfaces são misturados que não são conhecidos por serem de fontes compatíveis, mas cujas fontes foram modificadas nas formas compatíveis descritas aqui. Observe que estamos discutindo a compatibilidade entre as versões de um aplicativo. Uma discussão sobre compatibilidade entre as versões da plataforma Java SE está além do escopo deste capítulo.