explaingit

fex-emu/fex

7,426C++Audience · developerComplexity · 4/5Setup · hard

TLDR

FEX is a translation layer that lets ARM64 Linux devices run x86 and x86-64 programs natively, including Windows games via Wine, without needing any x86 hardware.

Mindmap

mindmap
  root((FEX))
  What it does
    x86 on ARM64
    32-bit and 64-bit
    Windows game support
  Tech stack
    C++
    ARM64 Linux
    OpenGL and Vulkan
  Features
    Wine Proton support
    Code cache
    Per-app settings
  Setup
    FEXRootFSFetcher
    FEXConfig GUI
    Ubuntu Arch Fedora
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Run x86-64 Linux applications on an ARM64 device such as a Raspberry Pi or ARM-based laptop

USE CASE 2

Play x86 Windows games on an ARM64 Linux system by combining FEX with Wine or Proton

USE CASE 3

Configure per-application settings in FEXConfig to reduce translation overhead for specific games

USE CASE 4

Automatically download the required x86 RootFS for your Linux distribution using FEXRootFSFetcher

Tech stack

C++LinuxARM64OpenGLVulkan

Getting it running

Difficulty · hard Time to first run · 1h+

Requires an ARM64 device running Linux and an x86-64 RootFS, FEXRootFSFetcher can download the RootFS automatically for common distros.

In plain English

FEX is a program that lets you run software originally built for x86 processors on a different type of processor called ARM64. If you have a device powered by an ARM64 chip, such as many modern single-board computers or newer laptops, FEX acts as a translation layer so that programs compiled for the older x86 architecture still work on your hardware. It handles both 32-bit and 64-bit x86 programs. One of the more practical uses is running Windows games on ARM64 Linux by pairing FEX with Wine or Proton, which are tools that translate Windows software calls into ones Linux understands. FEX adds the x86 translation on top of that, covering both layers at once. For graphics-heavy applications, FEX can pass graphics API calls directly to the host system's own graphics libraries, such as OpenGL or Vulkan, instead of emulating them. This reduces how much work the emulator has to do and can improve performance in games and visual applications. To further reduce stuttering during gameplay, FEX includes an experimental code cache. When it encounters new instructions to translate, it can store that translated work so it does not need to repeat it each time. There is also a per-application configuration system, which means you can adjust specific settings for individual games or programs, for instance turning off certain memory model checks that slow things down but are not required by a particular application. For people who prefer not to edit settings files by hand, a graphical tool called FEXConfig is included. It provides a point-and-click interface to explore and change FEX settings. FEX requires an ARM64 device with at least ARMv8.0 hardware and a Linux operating system. It has been tested with Ubuntu 22.04 through 25.04, Arch Linux, Fedora, and openSUSE. It also requires an x86-64 RootFS, which is a collection of Linux system files matching the x86 architecture. FEX includes a tool called FEXRootFSFetcher that can download the appropriate RootFS automatically for many distributions.

Copy-paste prompts

Prompt 1
How do I install FEX on Ubuntu 24.04 ARM64 and set it up to run x86-64 Steam games with Proton?
Prompt 2
Use FEXRootFSFetcher to download an x86-64 RootFS on Arch Linux ARM and then run a test x86 binary
Prompt 3
Configure FEX per-application settings to disable memory model checks for a specific game to improve frame rate
Prompt 4
Set up FEX with Wine on ARM64 Linux to run a Windows x86 application with graphics passed through to the host Vulkan driver
Open on GitHub → Explain another repo

← fex-emu on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.