Die Emulationsversionen Box86 0.2.6 und Box64 0.1.8 wurden veröffentlicht, die dafür entwickelt wurden, Linux-Programme, die für die Architekturen x86 und x86_64 kompiliert wurden, auf Hardware mit ARM-, ARM64-, PPC64LE- und RISC-V-Prozessoren auszuführen. Die Projekte werden synchron von demselben Entwicklerteam weiterentwickelt – Box86 ermöglicht die Ausführung von 32-Bit-x86-Anwendungen, während Box64 die Ausführung von 64-Bit-Programmen bietet. Das Projekt legt großen Wert auf die Ausführung von Spielanwendungen, einschließlich der Möglichkeit, Windows-Builds über Wine und Proton auszuführen. Der Quellcode des Projekts ist in C geschrieben und wird (Box86, Box64) unter der MIT-Lizenz vertrieben.
Eine Besonderheit des Projekts ist die Anwendung eines hybriden Ausführungsmodells, bei dem die Emulation nur auf den Maschinencode der Anwendung selbst und spezifische Bibliotheken angewendet wird. Typische Systembibliotheken, einschließlich libc, libm, GTK, SDL, Vulkan und OpenGL, werden durch Varianten ersetzt, die für die Zielplattformen geeignet sind. Dadurch werden Bibliotheksaufrufe ohne Emulation ausgeführt, was zu einer erheblichen Steigerung der Leistung führt.
Die Emulation von Code, für den native Ersetzungen für die Zielplattform fehlen, erfolgt unter Verwendung der Technik der dynamischen Rekompilierung (DynaRec) von einem Instruktionssatz in einen anderen. Im Vergleich zur Interpretation von Maschinenbefehlen zeigt die dynamische Rekompilierung eine um das 5- bis 10-Fache höhere Leistung.
In Leistungstests übertrafen die Emulatoren Box86 und Box64 bei der Ausführung auf den Plattformen Armhf und Aarch64 die Projekte QEMU und FEX-emu deutlich, und in einzelnen Tests (glmark2, openarena) wurde eine Leistung erreicht, die identisch war mit der Ausführung eines Builds, der nativ für die Zielplattform war. In den Tests 7-zip und dav1d, die intensive Berechnungen durchführen, betrug die Leistung von Box64 zwischen 27 % und 53 % der Leistung der nativen Anwendung (zum Vergleich erzielte QEMU Ergebnisse von 5-16 %, während FEX-emu 13-26 % erzielte). Darüber hinaus wurde ein Vergleich mit dem Emulator Rosetta 2 angestellt, der von Apple verwendet wird, um x86-Code auf Systemen mit dem ARM-Chip M1 auszuführen. Rosetta 2 erzielte bei einem Test mit 7zip eine Leistung von 71 % der nativen Build-Leistung, während Box64 57 % erreichte.

Was die Kompatibilität mit Anwendungen betrifft, so haben von 165 getesteten Spielen etwa 70 % erfolgreich funktioniert. Noch etwa 10 % funktionieren, jedoch mit bestimmten Vorbehalten und Einschränkungen. Zu den unterstützten Spielen gehören WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious und die meisten Spiele von GameMaker. Bei den Spielen, bei denen Probleme festgestellt wurden, sind Spiele auf der Basis der Unity3D-Engine erwähnt, die auf das Mono-Paket angewiesen sind, dessen Emulation derzeit nicht immer funktioniert, bedingt durch die verwendete JIT-Kompilierung in Mono, und die zudem relativ hohe Grafikanforderungen stellt, die auf ARM-Plattformen nicht immer erfüllt werden können. Die Ersetzung von GTK-Bibliotheken in Anwendungen ist derzeit auf GTK2 begrenzt (die Ersetzung von GTK3/4 ist nicht vollständig implementiert).
Die wichtigsten Änderungen in neuen Versionen:
- Eine Wrapper-Anbindung für die Vulkan-Bibliothek wurde hinzugefügt. Unterstützung für die Grafik-API Vulkan und DXVK (Implementierung von DXGI, Direct3D 9, 10 und 11 über Vulkan) wurde hinzugefügt.
- Die Wrapper für GTK-Bibliotheken wurden verbessert. Wrapper für GStreamer und Bibliotheken, die normalerweise in GTK-Anwendungen verwendet werden, wurden hinzugefügt.
- Erste Unterstützung (derzeit nur im Interpretationsmodus) für die Architekturen RISC-V und PPC64LE wurde hinzugefügt.
- Fehlerkorrekturen wurden vorgenommen, die darauf abzielen, die Unterstützung von SteamPlay und dem Proton-Layer zu verbessern. Es ist möglich, viele Linux- und Windows-Spiele aus Steam auf AArch64-Plattformen wie Raspberry Pi 3 und 4 auszuführen.
- Das Speichermanagement wurde verbessert, einschließlich der mmap-Funktionalität und der Überwachung von Speicherzugriffsverletzungen.
- Die Unterstützung des Systemaufrufs clone in libc wurde verbessert. Neue Systemaufrufe wurden hinzugefügt.
- Im dynamischen Rekompilierungs-Engine wurde die Arbeit mit SSE/x87-Registern verbessert, neue Maschinencodesupport wurde hinzugefügt, die Konvertierungen von float- und double-Zahlen wurden optimiert, die Handhabung von internen Sprüngen wurde verbessert und die Hinzufügung von Unterstützung für neue Architekturen wurde vereinfacht.
- Der Loader für ELF-Dateien wurde verbessert.
Quelle: opennet.ru
