Janë publikuar gjithashtu versionet e emulatorëve Box86 0.2.6 dhe Box64 0.1.8, të destinuara për të ekzekutuar programe Linux të ndërtuara për arkitekturat x86 dhe x86_64 në pajisje me procesorë ARM, ARM64, PPC64LE dhe RISC-V. Projektet zhvillohen paralelisht nga një ekip zhvilluesish - Box86 është i kufizuar në mundësinë e ekzekutimit të aplikacioneve 32-bit x86, ndërsa Box64 siguron ekzekutimin e skedarëve 64-bit. Projekti i kushton vëmendje të madhe organizimit të ekzekutimit të aplikacioneve lojëra, duke ofruar edhe mundësinë e ekzekutimit të ndërtimeve Windows përmes wine dhe Proton. Tekstet burimore të projektit janë shkruar në gjuhën C dhe shpërndahen (Box86, Box64) nën licencën MIT.
Veçoria e projektit është aplikimi i një modeli hibrid ekzekutimi, ku emulimi aplikohet vetëm për kodin makinerik të vetë aplikacionit dhe librarive specifike. Bibliotekat sistemike standarde, duke përfshirë libc, libm, GTK, SDL, Vulkan dhe OpenGL, zëvendësohen me variante që janë native për platformat e synuara. Kështu, thirrjet e bibliotikave ekzekutohen pa emulim, çfarë lejon arritjen e një rritjeje të konsiderueshme të performancës.
Emulimi i kodit, për të cilin nuk ka zëvendësime native për platformën e synuar, kryhet duke përdorur teknikën e rikompilimit dinamik (DynaRec) nga një grup instrukcionesh maqinar në një tjetër. Krahasuar me interpretimin e instrukcioneve maqinar, rikompilimi dinamik demonstron një performancë 5-10 herë më të lartë.
Në testet e performancës, emulatorët Box86 dhe Box64 në platformat Armhf dhe Aarch64 i kanë kaluar ndjeshëm projektet QEMU dhe FEX-emu, dhe në disa teste (glmark2, openarena) arritën një performancë të ngjashme me ekzekutimin e një ndërtimi native për platformën e synuar. Në testet 7-zip dhe dav1d, që kryejnë llogaritje intensive, performanca e Box64 ishte nga 27% deri në 53% e performancës së aplikacionit native (për krahasim, QEMU tregoi një rezultat prej 5-16%, ndërsa FEX-emu - 13-26%). Për më tepër, u bë një krahasim me emulatorin Rosetta 2, i përdorur nga Apple për të ekzekutuar kod x86 në sistemet me çip ARM M1. Rosetta 2 siguruan ekzekutimin e testit në bazë të 7zip me një performancë prej 71% të ndërtimit native, ndërsa Box64 - 57%.

Sa i përket përputhshmërisë me aplikacionet, nga 165 lojërat e testuara, rreth 70% punojnë me sukses. Rreth 10% të tjera funksionojnë, por me disa kushtet dhe kufizime. Ndër lojërat e mbështetura janë WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious dhe shumica e lojërave të kompanisë GameMaker. Për lojërat që kanë probleme, përmenden ato të bazuara në motorin Unity3D, i cili është i lidhur me paketën Mono, emulimi i të cilit ende nuk funksionon gjithmonë për shkak të JIT-kompilimit të përdorur në Mono, si dhe ka kërkesa mjaft të larta grafike, që nuk janë gjithmonë të arritshme në platformat ARM. Zëvendësimi i librarive GTK për aplikacionet aktualisht kufizohet në GTK2 (zëvendësimi i GTK3/4 nuk është realizuar plotësisht).
Dëngjet e reja në lëshimet e fundit:
- Shtuar një lidhje për bibliotekën Vulkan. Shtuar mbështetje për API-në grafike Vulkan dhe DXVK (implementimi i DXGI, Direct3D 9, 10 dhe 11 mbi Vulkan).
- Përmirësuar lidhjet për bibliotekat GTK. Shtuar lidhje për gstreamer dhe bibliotekat që zakonisht përdoren në aplikacionet GTK.
- Shtuar mbështetje fillestare (deri tani vetëm modaliteti i interpretimit) për arkitekturat RISC-V dhe PPC64LE.
- Bërë rregullime të synuara për përmirësimin e mbështetjes për SteamPlay dhe shtresën Proton. Siguruar mundësinë për të ekzekutuar shumë lojëra Linux dhe Windows nga Steam në platformat AArch64, si Raspberry Pi 3 dhe 4.
- Përmirësuar menaxhimi i memories, funksionimi i mmap dhe ndjekja e shkeljeve të mbrojtjes së memories.
- Përmirësuar mbështetje për thirrjen e sistemit clone në libc. Shtuar mbështetje për thirrje të reja të sistemit.
- Në motorin e ri të rikompilimit dinamik, përmirësuar funksionimi me regjistrat SSE/x87, shtuar mbështetje për kodet e reja të makinës, optimizuar konvertimet e numrave float dhe double, përmirësuar trajtimin e kalimeve të brendshme, thjeshtuar shtimin e mbështetjes për arkitektura të reja.
- Përmirësuar ngarkuesin e skedarëve ELF.
Burimi: opennet.ru
