Jak uruchamiać ciężkie gry i oprogramowanie x86 na procesorach Arm i RISC-V
Wyobraź sobie, że kupujesz zupełnie nowy komputer jednopłytkowy z procesorem Arm lub wydajny serwer RISC-V, instalujesz Linuksa i... napotykasz ścianę. Twoje ulubione gry na Steamie, zastrzeżone oprogramowanie do pracy czy dobry, stary Wine po prostu odmawiają działania. Są skompilowane pod x86_64, ale ty masz zupełnie inną architekturę. Zazwyczaj w takich przypadkach ludzie sugerują QEMU, ale granie przez niego to prawdziwe przeżycie: opóźnienia są tak duże, że wolisz to wyłączyć.
Projekt box64 elegancko rozwiązuje ten problem. To nie tylko emulator, ale warstwa, która może „karmić" natywne biblioteki z twojego systemu aplikacji działającej w emulacji.

Co wyróżnia ten emulator
Większość emulatorów stara się wiernie tłumaczyć każdą instrukcję procesora. Jest to niezawodne, ale bardzo wolne. Twórca box64 (znany jako ptitSeb) przyjął inne podejście.
Gdy program x86_64 wywołuje funkcję systemową — na przykład chce renderować grafikę przez OpenGL lub alokować pamięć przez libc — box64 nie emuluje tego wywołania wewnątrz środowiska wirtualnego. Zamiast tego przekierowuje wywołanie bezpośrednio do natywnych bibliotek twojego urządzenia (Arm64 lub RISC-V).
W rezultacie ciężkie obliczenia spadają na barki „natywnego" sprzętu, a tylko logika aplikacji jest emulowana. Daje to ogromny wzrost szybkości. Według testów porównawczych autora, połączenie z dynamicznym rekompilatorem (DynaRec) działa 5–10 razy szybciej niż zwykły interpreter.
Co można uruchomić
Lista kompatybilności projektu jest ogromna. Przede wszystkim jest skierowana do graczy i osób używających specjalistycznego oprogramowania.
- Gry ze Steama. Tak, możesz uruchamiać gry na Raspberry Pi 4 lub 5, które nigdy nie zostały przeniesione na Arm.
- Wine i Proton. To otwiera drogę do uruchamiania aplikacji Windows. Jeśli masz zarówno box64, jak i jego „młodszego brata" box86 (do programów 32-bitowych), możesz sprawić, że zadziała niemal każde oprogramowanie.
- Gry Unity. Jest tu niuans: często wymagają najnowszego OpenGL. Na niektórych płytkach musisz użyć zmiennych środowiskowych, aby „oszukać" sterownik i sprawić, że gra zadziała.
Ciekawe jest to, że projekt obsługuje nawet konkretne architektury jak LoongArch. Widać, że społeczność aktywnie pomaga w kwestiach sprzętowych: lista podziękowań obejmuje Adlink, Pine64, a nawet zespoły deweloperskie Deepin.
Jak to działa w praktyce
Korzystanie z narzędzia jest zaskakująco proste. Jeśli już skompilowałeś projekt (instrukcje w repozytorium są szczegółowe, choć wymagają zainstalowania mnóstwa zależności), uruchomienie wygląda tak:
box64 ./my_x86_64_program
Jeśli musisz uruchomić cały skrypt instalacyjny (na przykład z GOG), który sprawdza architekturę przez uname -m, możesz zrobić to tak:
box64 script.sh
W środku box64 podszywa się pod odpowiedź systemu, a skrypt myśli, że działa na zwykłym procesorze x86.
Dla tych, którzy nie chcą wpisywać polecenia za każdym razem, istnieje box64-bash — znajoma powłoka, w której wszystkie pliki wykonywalne są automatycznie przechwytywane przez emulator.
Niuansy i pułapki
Nie oczekuj, że wszystko zadziała „od razu" z idealną liczbą klatek na sekundę.
Po pierwsze, cache. Przy pierwszym uruchomieniu box64 generuje zoptymalizowany kod i zapisuje go do ~/.cache/box64. Przyspiesza to kolejne uruchomienia, ale może „zjeść" nawet 2 GB miejsca na dysku. Jeśli masz mało przestrzeni, będziesz musiał ograniczyć to zachowanie przez konfigurację.
Po drugie, grafika. Na Raspberry Pi często trzeba ustawiać obejścia jak:
MESA_GL_VERSION_OVERRIDE=3.2 BOX64_DYNAREC_STRONGMEM=1 box64 ./game
Jest to potrzebne, aby uniknąć zawieszeń spowodowanych różnicami w sposobie obsługi pamięci między x86 a Arm.
Po trzecie, aplikacje 32-bitowe. Box64 działa tylko z plikami binarnymi 64-bitowymi. Jeśli musisz uruchomić starą grę, będziesz musiał zainstalować box86. Prace nad box32 są w toku, ale autor szczerze przyznaje, że projekt jest nadal eksperymentalny.
Czy warto spróbować
Jeśli jesteś deweloperem, który chce przejść na laptop z Linuksem na Arm, lub entuzjastą z płytką RISC-V — zdecydowanie tak. To najbardziej aktywny i wydajny projekt w swojej niszy.
Box64 nie próbuje zastąpić pełnej wirtualizacji, po prostu daje ci możliwość używania znajomego oprogramowania tam, gdzie nie powinno istnieć. Projekt jest napisany w C, bardzo zwięzły i elastyczny w konfiguracji.
Oczywiście dokumentacja jest rozrzucona po różnych plikach w różnych miejscach, i będziesz musiał przekopać się przez instrukcje, aby skonfigurować Wine, ale wynik jest tego wart. Gdy oprogramowanie przeznaczone dla wydajnych komputerów stacjonarnych działa na małej płytce za kilkadziesiąt dolarów, to wygląda jak odrobina magii.
Kod źródłowy i instrukcje budowania znajdziesz w oficjalnym repozytorium ptitSeb/box64. Znajdują się tam również linki do list kompatybilności gier, które są aktualizowane niemal codziennie.
Powiązane projekty