Nuove versioni degli emulatori Box86 e Box64, che consentono di eseguire giochi x86 su sistemi ARM

Sono stati pubblicati i rilasci degli emulatori Box86 0.2.6 e Box64 0.1.8, progettati per eseguire programmi Linux compilati per architetture x86 e x86_64 su hardware con processori ARM, ARM64, PPC64LE e RISC-V. I progetti sono sviluppati simultaneamente da un'unica squadra di sviluppatori: Box86 è limitato all'esecuzione di applicazioni x86 a 32 bit, mentre Box64 consente l'esecuzione di file eseguibili a 64 bit. Il progetto pone una particolare attenzione all'esecuzione di applicazioni di gioco, offrendo anche la possibilità di eseguire build per Windows tramite wine e Proton. I sorgenti del progetto sono scritti in C e sono distribuiti (Box86, Box64) con licenza MIT.

Una caratteristica distintiva del progetto è l'applicazione di un modello ibrido di esecuzione, in cui l'emulazione è applicata solo al codice macchina dell'applicazione e alle librerie specifiche. Le librerie di sistema standard, tra cui libc, libm, GTK, SDL, Vulkan e OpenGL, vengono sostituite con versioni native per le piattaforme target. In questo modo, le chiamate di libreria vengono eseguite senza emulazione, consentendo di ottenere un notevole incremento delle prestazioni.

L'emulazione del codice, per il quale non esistono sostituti nativi per la piattaforma di destinazione, viene eseguita utilizzando la tecnica della ricompilazione dinamica (DynaRec) da un insieme di istruzioni macchina a un altro. Rispetto all'interpretazione delle istruzioni macchina, la ricompilazione dinamica dimostra prestazioni superiori di 5-10 volte.

Nei test di prestazione, gli emulatori Box86 e Box64 hanno superato significativamente i progetti QEMU e FEX-emu quando eseguiti su piattaforme Armhf e Aarch64, e in alcuni test (glmark2, openarena) hanno raggiunto prestazioni identiche a quelle di una build nativa per la piattaforma di destinazione. Nei test di 7-zip e dav1d, che richiedono calcoli intensivi, le prestazioni di Box64 hanno raggiunto dal 27% al 53% delle prestazioni dell'applicazione nativa (a titolo di confronto, QEMU ha mostrato risultati del 5-16% e FEX-emu del 13-26%). È stata effettuata anche una comparazione con l'emulatore Rosetta 2, utilizzato da Apple per eseguire codice x86 su sistemi con chip ARM M1. Rosetta 2 ha fornito prestazioni del 71% rispetto alla build nativa nel test di 7zip, mentre Box64 ha raggiunto il 57%.

Nuove versioni degli emulatori Box86 e Box64, che consentono di eseguire giochi x86 su sistemi ARM

Per quanto riguarda la compatibilità con le applicazioni, circa il 70% delle 165 giochi testati ha funzionato senza problemi. Circa il 10% funziona, ma con alcune riserve e limitazioni. Tra i giochi supportati ci sono WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious e la maggior parte dei giochi della compagnia GameMaker. Tra i giochi che presentano problemi si segnalano quelli basati sul motore Unity3D, che dipende dal pacchetto Mono, la cui emulazione non funziona sempre a causa della compilazione JIT utilizzata in Mono, e ha anche requisiti grafici piuttosto elevati, non sempre raggiungibili su piattaforme ARM. La sostituzione delle librerie delle applicazioni GTK è attualmente limitata a GTK2 (la sostituzione di GTK3/4 non è completamente implementata).

Le modifiche principali nelle nuove versioni:

  • È stata aggiunta una wrapper per la libreria Vulkan. È stata aggiunta la supporto per l'API grafica Vulkan e DXVK (implementazione DXGI, Direct3D 9, 10 e 11 sopra Vulkan).
  • Sono state migliorate le wrapper per le librerie GTK. Sono state aggiunte wrapper per gstreamer e per le librerie normalmente utilizzate nelle applicazioni GTK.
  • È stato aggiunto il supporto iniziale (al momento solo in modalità interpretazione) per le architetture RISC-V e PPC64LE.
  • Sono state apportate modifiche volte a migliorare il supporto per SteamPlay e il layer Proton. È ora possibile eseguire molti giochi Linux e Windows da Steam su schede AArch64, come Raspberry Pi 3 e 4.
  • Migliorata la gestione della memoria, il funzionamento di mmap e il tracciamento delle violazioni di protezione della memoria.
  • Migliorato il supporto della chiamata di sistema clone in libc. Aggiunto supporto per nuove chiamate di sistema.
  • Nel motore di ricompilazione dinamica è stato migliorato il lavoro con i registri SSE/x87, aggiunto supporto per nuovi codici macchina, ottimizzati i trasformatori di numeri float e double, migliorata la gestione dei salti interni, semplificata l'aggiunta di supporto per nuove architetture.
  • Migliorato il caricatore di file in formato ELF.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster