โดยรวมแล้วฉันต้องบอกว่าไม่มีการรับประกันว่าแหล่งที่มาเดียวกันจะสร้าง bytecode เดียวกันเมื่อคอมไพล์โดยคอมไพเลอร์เดียวกัน แต่อยู่บนแพลตฟอร์มอื่น
ฉันจะดูสถานการณ์ที่เกี่ยวข้องกับภาษาต่างๆ (โค้ดเพจ) เช่น Windows ที่รองรับภาษาญี่ปุ่น คิดอักขระหลายไบต์ เว้นแต่คอมไพลเลอร์จะถือว่าจำเป็นต้องรองรับทุกภาษาเสมอซึ่งอาจปรับให้เหมาะสมสำหรับ ASCII 8 บิต
มีส่วนในการทำงานร่วมกันในไบนารีคือJava Language ข้อกำหนด
ภายในกรอบของ Release-to-Release Binary Compatibility ใน SOM (Forman, Conner, Danforth และ Raper, Proceedings of OOPSLA '95) ไบนารีการเขียนโปรแกรมภาษา Java เข้ากันได้กับไบนารีภายใต้การแปลงที่เกี่ยวข้องทั้งหมดที่ผู้เขียนระบุ (มีข้อแม้บางประการด้วย เกี่ยวกับการเพิ่มตัวแปรอินสแตนซ์) การใช้โครงร่างของพวกเขานี่คือรายการของการเปลี่ยนแปลงที่เข้ากันได้กับไบนารีที่สำคัญบางอย่างที่ภาษาโปรแกรม Java รองรับ:
•นำวิธีการที่มีอยู่ตัวสร้างและตัวเริ่มต้นกลับมาใช้ใหม่เพื่อปรับปรุงประสิทธิภาพ
•การเปลี่ยนวิธีการหรือตัวสร้างเพื่อส่งกลับค่าของอินพุตซึ่งก่อนหน้านี้พวกเขาโยนข้อยกเว้นที่ปกติไม่ควรเกิดขึ้นหรือล้มเหลวโดยการวนซ้ำที่ไม่มีที่สิ้นสุดหรือทำให้เกิดการหยุดชะงัก
•การเพิ่มฟิลด์วิธีการหรือตัวสร้างใหม่ในคลาสหรืออินเทอร์เฟซที่มีอยู่
•การลบฟิลด์ส่วนตัววิธีการหรือตัวสร้างของชั้นเรียน
•เมื่ออัปเดตแพ็กเกจทั้งหมดการลบฟิลด์การเข้าถึงค่าเริ่มต้น (เฉพาะแพ็กเกจเท่านั้น) วิธีการหรือตัวสร้างคลาสและอินเทอร์เฟซในแพ็กเกจ
•จัดลำดับฟิลด์วิธีการหรือตัวสร้างใหม่ในการประกาศประเภทที่มีอยู่
•ย้ายวิธีการขึ้นในลำดับชั้นของชั้นเรียน
•จัดลำดับรายการของอินเทอร์เฟซโดยตรงของคลาสหรืออินเทอร์เฟซใหม่
•การแทรกคลาสหรือประเภทอินเทอร์เฟซใหม่ในลำดับชั้นประเภท
บทนี้ระบุมาตรฐานขั้นต่ำสำหรับความเข้ากันได้แบบไบนารีที่รับประกันโดยการใช้งานทั้งหมด ภาษาการเขียนโปรแกรม Java รับประกันความเข้ากันได้เมื่อมีการผสมไบนารีของคลาสและอินเทอร์เฟซที่ไม่ทราบว่ามาจากแหล่งที่มาที่เข้ากันได้ แต่มีการแก้ไขแหล่งที่มาด้วยวิธีที่เข้ากันได้ตามที่อธิบายไว้ที่นี่ โปรดทราบว่าเรากำลังพูดถึงความเข้ากันได้ระหว่างแอปพลิเคชันรุ่นต่างๆ การอภิปรายเกี่ยวกับความเข้ากันได้ระหว่างรุ่นของแพลตฟอร์ม Java SE อยู่นอกเหนือขอบเขตของบทนี้