Janë publikuar versionet e emulatorëve Box86 0.2.6 dhe Box64 0.1.8, të destinuar për të ekzekutuar programet Linux të ndërtuara për arkitekturat x86 dhe x86_64 në pajisjet me procesorë ARM, ARM64, PPC64LE dhe RISC-V. Projektet zhvillohen sinkronisht nga një ekip zhvilluesish — Box86 është i kufizuar në ekzekutimin e aplikacioneve 32-bit x86, ndërsa Box64 garanton ekzekutimin e skedarëve 64-bit. Projketi i kushton shumë vëmendje organizimit të ekzekutimit të aplikacioneve të lojërave, duke përfshirë mundësinë e ekzekutimit të montimeve Windows përmes wine dhe Proton. Kodet burimore të projektit janë shkruar në gjuhën C dhe shpërndahen (Box86, Box64) nën licencën MIT.
Karakteristika e veçantë e projektit është aplikimi i një modeli hibrid të ekzekutimit, ku emulimi aplikohet vetëm për kodin makinerik të vetë aplikacionit dhe bibliotekave specifike. Bibliotekat tipike të sistemit, duke përfshirë libc, libm, GTK, SDL, Vulkan dhe OpenGL, zëvendësohen me versione të natyrshme për platformat e synuara. Në këtë mënyrë, thirrjet në bibliotekë ekzekutohen pa emulim, çka lejon arritjen e një rritjeje të konsiderueshme të performancës.
Emulimi i kodit për të cilin mungojnë zëvendësimet native për platformën e synuar, realizohet duke përdorur teknikën e rikompilimit dinamik (DynaRec) nga një grup instrukcionesh makinerie në një tjetër. Krahasuar me interpretimin e instrukcioneve makinerike, rikompilimi dinamik tregon performancë 5-10 herë më të lartë.
Në testet e performancës, emulatorët Box86 dhe Box64, kur ekzekutohen në platformat Armhf dhe Aarch64, e kaluan ndjeshëm projektin QEMU dhe FEX-emu, dhe në teste të veçanta (glmark2, openarena) arritën performancë të njëjtë me ekzekutimin e një skedhe native për platformën e synuar. Në testet 7-zip dhe dav1d, që realizojnë llogaritje intensive, performanca e Box64 ishte nga 27% deri në 53% e performancës së aplikacionit native (për krahasim, QEMU arriti një rezultat prej 5-16%, ndërsa FEX-emu 13-26%). Gjithashtu, u bë një krahasim me emulatorin Rosetta 2, i përdorur nga Apple për të ekzekutuar kodin x86 në sistemet me çip ARM M1. Rosetta 2 siguroi realizimin e testit mbi bazën e 7zip me një performancë prej 71% të skedhës native, ndërsa Box64 arriti 57%.

Sa i përket përputhshmërisë me aplikacionet, nga 165 lojra të testuara, rreth 70% kanë funksionuar me sukses. Rreth 10% të tjera punojnë, por me disa shpërblime dhe kufizime. Midis lojërave të mbështetura janë WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious dhe shumica e lojërave nga kompania GameMaker. Ndër lojërat që hasin probleme, përmenden ato të bazuara në motorin Unity3D, i cili është i lidhur me paketën Mono, emulimi i së cilës ende nuk funksionon gjithmonë për shkak të kompilimeve JIT në Mono, si dhe ka kërkesa bastante të larta për grafikë, të cilat nuk janë gjithmonë të arritshme në platformat ARM. Zëvendësimi i bibliotekave GTK-në aplikacione për momentin është i kufizuar në GTK2 (zëvendësimi i GTK3/4 nuk është realizuar plotësisht).
Ndryshimet kryesore në versionet e reja:
- Shtuar mbështetje 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 (për momentin vetëm në modin interpretuese) për arkitekturat RISC-V dhe PPC64LE.
- Janë bërë korrigjime që synojnë përmirësimin e mbështetjes për SteamPlay dhe shtresën Proton. Tani është e mundur të lëshosh shumë lojëra Linux dhe Windows nga Steam në platformat AArch64, si Raspberry Pi 3 e 4.
- Është përmirësuar menaxhimi i memories, funksionimi i mmap dhe ndjekja e shkeljeve të mbrojtjes së memories.
- Është përmirësuar mbështetje për thirrjen e sistemeve clone në libc. Është shtuar mbështetje për thirrje të reja sistemesh.
- Në motorin e ricompilimit dinamik është përmirësuar funksionimi me regjistrat SSE/x87, është shtuar mbështetje për kodet e reja makinerike, janë optimizuar konvertimet e numrave float dhe double, është përmirësuar trajtimi i kalimeve të brendshme, dhe është lehtësuar shtimi i mbështetjes për arkitektura të reja.
- Është përmirësuar ngarkuesi i skedarëve në formatin ELF.
Burimi: opennet.ru
