Nieuwe versies van de emulators Box86 en Box64, die het mogelijk maken om x86-games op ARM-systemen te draaien.

De releases van de emulators Box86 0.2.6 en Box64 0.1.8 zijn gepubliceerd, bedoeld voor het draaien van Linux-programma's die zijn gebouwd voor de architecturen x86 en x86_64 op hardware met ARM-, ARM64-, PPC64LE- en RISC-V-processoren. De projecten worden synchroon ontwikkeld door hetzelfde team van ontwikkelaars — Box86 beperkt zich tot het draaien van 32-bits x86-applicaties, terwijl Box64 de uitvoering van 64-bits uitvoerbare bestanden mogelijk maakt. Het project richt zich sterk op het faciliteren van de uitvoering van game-applicaties, inclusief de mogelijkheid om Windows-builds uit te voeren via Wine en Proton. De broncode van het project is geschreven in C en wordt verspreid (Box86, Box64) onder de MIT-licentie.

Een kenmerk van het project is het gebruik van een hybride uitvoeringsmodel, waarbij emulatie alleen wordt toegepast op de machinecode van de applicatie zelf en specifieke bibliotheken. Standaard systeembibliotheken, waaronder libc, libm, GTK, SDL, Vulkan en OpenGL, worden vervangen door versies die native zijn voor de doelplatforms. Hierdoor worden bibliotheekoproepen uitgevoerd zonder emulatie, wat leidt tot een aanzienlijke prestatieverbetering.

De emulatie van code waarvoor geen native vervangingen voor het doelplatform beschikbaar zijn, wordt uitgevoerd met behulp van dynamische recompilatie (DynaRec) van de ene set machine-instructies naar de andere. In vergelijking met interpretatie van machine-instructies vertoont dynamische recompilatie een tot 5-10 keer hogere prestaties.

In prestatietests hebben de emulators Box86 en Box64, uitgevoerd op Armhf- en Aarch64-platforms, de projecten QEMU en FEX-emu aanzienlijk overtroffen. In bepaalde tests (glmark2, openarena) werd de prestatie gelijk aan die van de native build voor het doelplatform bereikt. In de tests van 7-zip en dav1d, die intensieve berekeningen uitvoeren, bereikte Box64 tussen 27% en 53% van de prestatie van de native applicatie (ter vergelijking toonde QEMU resultaten van 5-16% en FEX-emu 13-26%). Daarnaast werd een vergelijking gemaakt met de emulator Rosetta 2, die door Apple wordt gebruikt om x86-code uit te voeren op systemen met de ARM M1-chip. Rosetta 2 leverde een uitvoeringsniveau van 71% van de native build in de 7zip-test, terwijl Box64 57% bereikte.

Nieuwe versies van de emulators Box86 en Box64, die het mogelijk maken om x86-games op ARM-systemen te draaien.

Wat betreft de compatibiliteit met applicaties, werkte ongeveer 70% van de 165 geteste games succesvol. Nog eens ongeveer 10% werkt, maar met bepaalde voorbehouden en beperkingen. Onder de ondersteunde games zijn WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious en de meeste games van GameMaker. Games met problemen zijn onder andere die gebaseerd op de Unity3D-engine, die afhankelijk is van het Mono-pakket, waarvan de emulatie nog niet altijd werkt vanwege de JIT-compilatie in Mono, en ook aanzienlijke grafische vereisten heeft, die niet altijd haalbaar zijn op ARM-platforms. De vervanging van GTK-bibliotheken is tot nu toe beperkt tot GTK2 (de vervanging van GTK3/4 is nog niet volledig gerealiseerd).

Belangrijkste wijzigingen in nieuwe versies:

  • Er is een wrapper toegevoegd voor de Vulkan-bibliotheek. Ondersteuning voor de grafische API Vulkan en DXVK (een implementatie van DXGI, Direct3D 9, 10 en 11 bovenop Vulkan) is toegevoegd.
  • De wrappers voor de GTK-bibliotheken zijn verbeterd. Wrappers voor gstreamer en bibliotheken die meestal in GTK-applicaties worden gebruikt, zijn toegevoegd.
  • Er is een eerste ondersteuning toegevoegd (momenteel alleen de interpreter-modus) voor de architecturen RISC-V en PPC64LE.
  • Er zijn correcties aangebracht die gericht zijn op het verbeteren van de ondersteuning voor SteamPlay en de Proton-laag. Veel Linux- en Windows-spellen in Steam kunnen nu op AArch64-platforms zoals de Raspberry Pi 3 en 4 worden uitgevoerd.
  • Geheugenbeheer is verbeterd, evenals het functioneren van mmap en het volgen van geheugenbeschermingsschendingen.
  • De ondersteuning voor de systeemaanroep clone in libc is verbeterd. Nieuwe systeemaanroepen zijn toegevoegd.
  • De dynamische recompilatiemotor is verbeterd in het omgaan met registers SSE/x87, ondersteuning voor nieuwe machinecodes is toegevoegd, evenals optimalisaties voor float- en double-conversies, verbeterde interne overdracht en vereenvoudigde toevoeging van ondersteuning voor nieuwe architecturen.
  • De bestandslader voor ELF-indeling is verbeterd.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster