มีการเผยแพร่ตัวจำลอง Box86 0.2.6 และ Box64 0.1.8 ซึ่งออกแบบมาเพื่อรันโปรแกรม Linux ที่คอมไพล์สำหรับสถาปัตยกรรม x86 และ x86_64 บนอุปกรณ์ที่มีโปรเซสเซอร์ ARM, ARM64, PPC64LE และ RISC-V โปรเจ็กต์ได้รับการพัฒนาพร้อมกันโดยทีมนักพัฒนาทีมเดียว - Box86 ถูกจำกัดความสามารถในการรันแอปพลิเคชัน x32 แบบ 86 บิต และ Box64 ให้ความสามารถในการรันไฟล์ปฏิบัติการแบบ 64 บิต โปรเจ็กต์นี้ให้ความสำคัญกับการจัดเตรียมการเปิดตัวแอพพลิเคชั่นเกม รวมถึงความสามารถในการเปิดตัว Windows builds ผ่านทางไวน์และ Proton ซอร์สโค้ดสำหรับโครงการเขียนด้วยภาษา C และแจกจ่าย (Box86, Box64) ภายใต้ใบอนุญาต MIT
คุณลักษณะของโปรเจ็กต์คือการใช้โมเดลการดำเนินการแบบไฮบริด ซึ่งการจำลองจะใช้กับโค้ดเครื่องของแอปพลิเคชันและไลบรารีเฉพาะเท่านั้น ไลบรารีระบบทั่วไป รวมถึง libc, libm, GTK, SDL, Vulkan และ OpenGL จะถูกแทนที่ด้วยตัวเลือกดั้งเดิมสำหรับแพลตฟอร์มเป้าหมาย ด้วยวิธีนี้ การเรียกไลบรารีจะดำเนินการโดยไม่มีการจำลอง ส่งผลให้ประสิทธิภาพเพิ่มขึ้นอย่างมาก
การจำลองโค้ดที่ไม่มีการแทนที่ในแพลตฟอร์มเป้าหมายจะดำเนินการโดยใช้เทคนิคการคอมไพล์ใหม่แบบไดนามิก (DynaRec) จากชุดคำสั่งเครื่องหนึ่งไปยังอีกชุดหนึ่ง เมื่อเปรียบเทียบกับการแปลคำสั่งเครื่อง การคอมไพล์ใหม่แบบไดนามิกแสดงให้เห็นถึงประสิทธิภาพที่สูงกว่า 5-10 เท่า
ในการทดสอบประสิทธิภาพ ตัวจำลอง Box86 และ Box64 เมื่อดำเนินการบนแพลตฟอร์ม Armhf และ Aarch64 มีประสิทธิภาพเหนือกว่าโครงการ QEMU และ FEX-emu อย่างมีนัยสำคัญ และในการทดสอบแต่ละรายการ (glmark2, openarena) พวกเขาบรรลุประสิทธิภาพที่เหมือนกับการรันชุดประกอบที่เนทีฟไปยังเป้าหมาย แพลตฟอร์ม. ในการทดสอบ 7-zip และ dav1d ที่เน้นการประมวลผล ประสิทธิภาพของ Box64 อยู่ระหว่าง 27% ถึง 53% ของประสิทธิภาพของแอปพลิเคชันเนทีฟ (สำหรับการเปรียบเทียบ QEMU ทำได้ 5-16% และ FEX-emu 13-26%) นอกจากนี้ ยังมีการเปรียบเทียบกับโปรแกรมจำลอง Rosetta 2 ซึ่ง Apple ใช้เพื่อรันโค้ด x86 บนระบบที่มีชิป M1 ARM Rosetta 2 ให้การทดสอบที่ใช้ 7zip โดยมีประสิทธิภาพ 71% ของบิลด์เนทิฟ และ Box64 - 57%
ในส่วนของความเข้ากันได้กับแอพพลิเคชั่น จากการทดสอบทั้งหมด 165 เกม ประมาณ 70% ทำงานได้สำเร็จ มีงานอีกประมาณ 10% แต่มีข้อจำกัดและข้อจำกัดบางประการ เกมที่รองรับ ได้แก่ WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious และเกม GameMaker ส่วนใหญ่ ในบรรดาเกมที่มีการกล่าวถึงปัญหานั้น มีการกล่าวถึงเกมที่ใช้เอนจิ้น Unity3D ซึ่งเชื่อมโยงกับแพ็คเกจ Mono ซึ่งการจำลองนั้นไม่ได้ผลเสมอไปเนื่องจากการคอมไพล์ JIT ที่ใช้ใน Mono และยังมีค่อนข้าง ข้อกำหนดด้านกราฟิกระดับสูงที่ไม่สามารถทำได้บนบอร์ด ARM เสมอไป การทดแทนไลบรารีแอปพลิเคชัน GTK ปัจจุบันจำกัดอยู่ที่ GTK2 (การแทนที่ GTK3/4 ยังไม่ได้รับการปรับใช้อย่างสมบูรณ์)
การเปลี่ยนแปลงหลักในรุ่นใหม่:
- เพิ่มการเชื่อมโยงสำหรับไลบรารี Vulkan เพิ่มการรองรับสำหรับ Vulkan และ DXVK กราฟิก API (การใช้งาน DXGI, Direct3D 9, 10 และ 11 บน Vulkan)
- ปรับปรุงการเชื่อมโยงสำหรับไลบรารี GTK เพิ่มการเชื่อมโยงสำหรับ gstreamer และไลบรารีที่ใช้กันทั่วไปในแอปพลิเคชัน GTK
- เพิ่มการรองรับเบื้องต้น (เฉพาะโหมดการตีความในตอนนี้) สำหรับสถาปัตยกรรม RISC-V และ PPC64LE
- มีการแก้ไขเพื่อปรับปรุงการรองรับ SteamPlay และเลเยอร์ Proton ให้ความสามารถในการรันเกม Linux และ Windows จำนวนมากจาก Steam บนบอร์ด AArch64 เช่น Raspberry Pi 3 และ 4
- ปรับปรุงการจัดการหน่วยความจำ ประสิทธิภาพ mmap และการติดตามการละเมิดการป้องกันหน่วยความจำ
- ปรับปรุงการรองรับการเรียกระบบโคลนใน libc เพิ่มการรองรับการโทรของระบบใหม่
- เอ็นจิ้นการคอมไพล์ใหม่แบบไดนามิกได้ปรับปรุงการทำงานกับรีจิสเตอร์ SSE/x87 เพิ่มการรองรับรหัสเครื่องใหม่ การแปลงตัวเลขทศนิยมและเลขคู่ที่ได้รับการปรับปรุง การประมวลผลการเปลี่ยนแปลงภายในที่ได้รับการปรับปรุง และทำให้การเพิ่มการรองรับสถาปัตยกรรมใหม่ง่ายขึ้น
- ปรับปรุงตัวโหลดไฟล์ ELF
ที่มา: opennet.ru