Au fost publicate versiunile emulatorilor Box86 0.2.6 și Box64 0.1.8, destinate să ruleze programe Linux compilate pentru arhitecturile x86 și x86_64 pe echipamente cu procesoare ARM, ARM64, PPC64LE și RISC-V. Proiectele evoluează simultan sub aceeași echipă de dezvoltatori — Box86 se limitează la rularea aplicațiilor x86 de 32 de biți, în timp ce Box64 asigură rularea fișierelor executabile de 64 de biți. Proiectul acordă o mare atenție organizării rulării aplicațiilor de jocuri, inclusiv oferind posibilitatea de a rula versiuni Windows prin wine și Proton. Codul sursă al proiectului este scris în limbajul C și este distribuit (Box86, Box64) sub licența MIT.
Caracteristica principală a proiectului este utilizarea unui model hibrid de execuție, în care emularea este aplicată doar la codul mașină al aplicației și bibliotecilor specifice. Bibliotecile de sistem standard, inclusiv libc, libm, GTK, SDL, Vulkan și OpenGL, sunt înlocuite cu variante native pentru platformele țintă. Astfel, apelurile la biblioteci se execută fără emulare, ceea ce permite obținerea unei creșteri semnificative a performanței.
Emularea codului pentru care nu există înlocuiri native pentru platforma țintă se realizează utilizând tehnica de recompilare dinamică (DynaRec) dintr-un set de instrucțiuni mașină în altul. Comparativ cu interpretarea instrucțiunilor mașină, recompilarea dinamică demonstrează o performanță cu 5-10 ori mai ridicată.
În testele de performanță, emulatorii Box86 și Box64, rulați pe platformele Armhf și Aarch64, au depășit semnificativ proiectele QEMU și FEX-emu, iar în anumite teste (glmark2, openarena) au permis obținerea unei performanțe identice cu rularea unei versiuni native pentru platforma țintă. În testele 7-zip și dav1d, care efectuează calcul intens, performanța Box64 a fost între 27% și 53% din performanța aplicației native (pentru comparație, QEMU a avut un rezultat de 5-16%, iar FEX-emu — 13-26%). De asemenea, a fost efectuată o comparație cu emulatorul Rosetta 2, utilizat de Apple pentru a rula cod x86 pe sisteme cu chip ARM M1. Rosetta 2 a asigurat execuția testului pe baza 7zip cu o performanță de 71% din versiunea nativă, iar Box64 — 57%.

În ceea ce privește compatibilitatea cu aplicațiile, din cele 165 de jocuri testate, aproximativ 70% au funcționat cu succes. Alte aproximativ 10% funcționează, dar cu anumite restricții. Printre jocurile acceptate se numără WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious și majoritatea jocurilor companiei GameMaker. Printre jocurile cu probleme se numără cele bazate pe motorul Unity3D, care depinde de pachetul Mono, emularea căruia nu funcționează întotdeauna din cauza compilării JIT utilizate în Mono, precum și având cerințe grafice destul de ridicate, nu întotdeauna realizabile pe plăcile ARM. Înlocuirea bibliotecilor GTK pentru aplicații este momentan limitată la GTK2 (înlocuirea GTK3/4 nu este complet realizată).
Principalele modificări în noile versiuni:
- A fost adăugată o interfață pentru biblioteca Vulkan. A fost adăugată suport pentru API-ul grafic Vulkan și DXVK (implementarea DXGI, Direct3D 9, 10 și 11 pe Vulkan).
- Au fost îmbunătățite legăturile pentru bibliotecile GTK. Au fost adăugate legături pentru gstreamer și biblioteci folosite de obicei în aplicațiile GTK.
- A fost adăugată suport inițial (deocamdată doar în modul de interpretare) pentru arhitecturile RISC-V și PPC64LE.
- Au fost efectuate corecturi menite să îmbunătățească suportul pentru SteamPlay și stratul Proton. S-a asigurat posibilitatea de a rula multe jocuri Linux și Windows din Steam pe plăci AArch64, cum ar fi Raspberry Pi 3 și 4.
- A fost îmbunătățită gestionarea memoriei, funcționarea mmap și urmărirea violărilor protecției memoriei.
- A fost îmbunătățit suportul pentru apelul de sistem clone în libc. A fost adăugat suport pentru noi apeluri de sistem.
- În motorul de recompilare dinamică a fost îmbunătățită utilizarea registrelor SSE/x87, a fost adăugat suport pentru noi coduri de mașină, au fost optimizate conversiile numerelor float și double, a fost îmbunătățită gestionarea salturilor interne și s-a simplificat adăugarea suportului pentru noi arhitecturi.
- A fost îmbunătățit încărcătorul de fișiere în format ELF.
Sursa: opennet.ro
