È stata pubblicata la versione del progetto FEX 2508, che sviluppa un emulatore per eseguire giochi e applicazioni compilati 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, compilati per l'architettura x86_64. Il codice del progetto è scritto in C++ con inserti in assembler e distribuito sotto licenza MIT.
Le librerie necessarie per eseguire applicazioni x86 in un ambiente ARM64 vengono collegate sotto forma di strato overlay con un'immagine del filesystem radice (rootfs) fornita in formato SquashFS. Questo tipo di strato consente di evitare la creazione di un ambiente chroot separato. Il caricamento delle immagini rootfs già formate dal progetto è effettuato dallo strumento FEXRootFSFetcher.
Per accedere alle funzionalità dell'ambiente host, come i strumenti per il suono e la grafica 3D, nelle rootfs vengono inserite le librerie thunk che traducono le chiamate a librerie e codice nel sistema host (ad esempio, possono essere reindirizzate le chiamate a OpenGL e Vulkan). Tali librerie possono anche essere utilizzate nel lato host per chiamare codice nell'ambiente ospitato. Tra le librerie disponibili per il passaggio: 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 portato a 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 Gold of War 2018 del 4,6%. Le ottimizzazioni più influenti sono state quelle dello stack di chiamate e ritorni (call-return), nonché l'implementazione 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 specificamente non contrassegnate come adatte per l'esecuzione.
- È stato migliorato il supporto del 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

