Выпуск эмулятора FEX 2508, позволяющего запускать X86-программы на системах ARM64

Опубликован релиз проекта FEX 2508, развивающего эмулятор для выполнения игр и приложений, собранных для архитектур x86 и x86-64, в Linux-окружении на системах с процессорами ARM64 (AArch64). Эмулятор FEX применяется проектом Asahi для запуска на системах с ARM-чипами Apple Silicon игр из каталога Steam, собранных для архитектуры x86_64. Код проекта написан на языке С++ с ассемблерными вставками и распространяется под лицензией MIT.

Библиотеки, необходимые для запуска x86-приложений в ARM64-окружении, подключаются в форме overlay-прослойки с образом корневой ФС (rootfs), поставляемой в формате SquashFS. Подобная прослойка даёт возможность обойтись без создания отдельного chroot-окружения. Загрузка уже сформированных проектом образов rootfs производится утилитой FEXRootFSFetcher.

Для доступа к возможностям хост-окружения, таким как средства для работы со звуком и 3D-графикой, в rootfs помещаются thunk-библиотеки, транслирующие обращения к библиотекам и коду на стороне хост-системы (например, могут перенаправляться обращения к OpenGL и Vulkan). Подобные библиотеки также могут использоваться и на стороне хоста для обращения к коду в гостевом окружении. Среди доступных для проброса библиотек: libEGL, libGL, libSDL2, libX11, libVDSO, libasound, libdrm, libfex_malloc, libvulkan, libwayland-client и libxshmfence.

В новой версии:

  • Проведена значительная оптимизация JIT-компилятора, позволившая добиться повышения FPS в игре Cyberpunk 2077 на 38.9%, Doom 2016 – на 30.9%, Stray – на 25.2%, Grim Fandango Remastered – на 24.7%, Teardown – 12.6%, на Gold of War 2018 – на 4.6%. Наибольшее влияние оказали оптимизации стека вызовов и возвратов (call-return), а также задействование в библиотеках wow64/arm64ec модели памяти TSO (Total Store Ordering), поддерживаемой в CPU Apple Silicon.

  • Реализована поддержка NX-бита (No Execute) для запрета исполнения инструкций в областях памяти, специально не помеченных, как допустимые для исполнения.
  • Улучшена поддержка кода, используемого для предотвращения отладки и изменения хода выполнения в играх, таких как Peggle Deluxe и Crysis 2: Maximum Edition.
Release. Ссылка here.