È stata rilasciata la versione del progetto FEX 2508, che sviluppa un emulatore per l'esecuzione di giochi e applicazioni costruiti per architetture x86 e x86-64, in un ambiente Linux su sistemi con processori ARM64 (AArch64). L'emulatore FEX è utilizzato dal progetto Asahi per eseguire su sistemi con chip ARM di Apple Silicon giochi dal catalogo Steam, costruiti per l'architettura x86_64. Il codice del progetto è scritto in C++ con inserimenti in assembly ed è distribuito con licenza MIT.
Le librerie necessarie per eseguire applicazioni x86 in un ambiente ARM64 vengono collegate sotto forma di una sovrapposizione (overlay) con un'immagine del filesystem root (rootfs), fornita nel formato SquashFS. Questa sovrapposizione consente di evitare la creazione di un ambiente chroot separato. Il caricamento delle immagini rootfs già formate dal progetto avviene tramite l'utilità FEXRootFSFetcher.
Per accedere alle funzionalità dell'ambiente di hosting, come gli strumenti per lavorare con audio e grafica 3D, vengono inserite nel rootfs librerie thunk che traducono le chiamate alle librerie e al codice sul lato del sistema host (ad esempio, le chiamate a OpenGL e Vulkan possono essere reindirizzate). Queste librerie possono essere utilizzate anche sul lato host per accedere al codice nell'ambiente guest. Tra le librerie disponibili per il passaggio ci sono: libEGL, libGL, libSDL2, libX11, libVDSO, libasound, libdrm, libfex_malloc, libvulkan, libwayland-client e libxshmfence.
Nella nuova versione:
- È stata effettuata una significativa ottimizzazione del compilatore JIT, che ha consentito un aumento del FPS nel gioco Cyberpunk 2077 del 38,9%, Doom 2016 del 30,9%, Stray del 25,2%, Grim Fandango Remastered del 24,7%, Teardown del 12,6%, e in God of War 2018 del 4,6%. Le ottimizzazioni più impattanti sono state quelle dello stack delle chiamate e dei ritorni (call-return), oltre all'uso nel codice delle librerie wow64/arm64ec del modello di memoria TSO (Total Store Ordering), supportato nelle CPU Apple Silicon.

- È stata implementata la supporto per il bit NX (No Execute) per vietare l'esecuzione di istruzioni in aree di memoria non contrassegnate come eseguibili.
- Migliorato il supporto per il codice utilizzato per prevenire il debug e la modifica del flusso di esecuzione in giochi come Peggle Deluxe e Crysis 2: Maximum Edition.
Fonte: opennet.ru

