FEX-Emu: running x86 and x86-64 Linux binaries on Arm64
A fast usermode x86 and x86-64 emulator for Arm64 Linux
At a glance
- What is it?
- FEX is an MIT-licensed usermode emulator that runs 32-bit and 64-bit x86 binaries on Arm64 Linux, with API forwarding to host OpenGL and Vulkan and a per-app configuration system. Here is how it installs, how it works, and where it stops being the right tool.
- Who is it for?
- Adopt FEX if you are on Arm64 Linux with ARMv8.0-a or newer, need to run x86 or x86-64 binaries, and can supply an x86-64 RootFS; skip it if your hardware lacks FEAT_FP and FEAT_CRC32, if you need a Windows-native emulator rather than a usermode x86 translator, or if you cannot generate a RootFS for your distribution.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What FEX-Emu actually solves on Arm64 Linux
Arm64 Linux machines cannot execute x86 or x86-64 machine code natively. That is a problem when the software you need ships only as an x86 binary: a proprietary tool, a game, a vendor SDK, a legacy build. FEX is a usermode emulator that translates x86 and x86-64 instructions so those binaries run on Arm64 hardware without a full system emulator or a virtual machine.
The README positions FEX next to qemu-user and box64, and describes broad compatibility with both 32-bit and 64-bit binaries. It also states that FEX can be used alongside Wine and Proton to play Windows games, which is the use case most people arrive with. The target audience is Arm64 Linux users, including people on Arm laptops, single-board computers and cloud instances, who need x86 software to keep working. FEX is not a Windows emulator on its own: Wine or Proton supplies the Windows API layer, and FEX supplies the instruction translation underneath it.
How the translation and API forwarding fit together
FEX operates in usermode, meaning it runs as a normal process on the host kernel rather than emulating a full machine. The repository layout reflects this: FEXCore/ holds the core emulation engine, ThunkLibs/ holds the thunk libraries, CodeEmitter/ handles code generation, and Source/ contains the front-end and tooling. The README lists the pieces that matter for performance.
The first is API forwarding. FEX forwards API calls to host system libraries such as OpenGL or Vulkan, which reduces emulation overhead because graphics work runs on the host driver rather than being emulated instruction by instruction. The second is an experimental code cache that the README says helps minimize in-game stuttering. The third is a per-app configuration system that allows tweaking performance per game, with the README giving skipping costly memory model emulation as the example. FEXConfig is the GUI for exploring and changing those settings.
That combination is the design bet: translate CPU instructions, but hand off GPU work to the host, and let users trade correctness for speed on a per-application basis. The memory model option is the clearest example of the trade-off, since weaker memory model emulation is faster but only safe for software that does not depend on the stricter ordering.
Installing FEX on Ubuntu 22.04, 24.04, 24.10 or 25.04
The README gives a single command for the supported Ubuntu releases. It installs FEX through a PPA and then walks through downloading a RootFS for use with FEX.
curl --silent https://raw.githubusercontent.com/FEX-Emu/FEX/main/Scripts/InstallFEX.py | python3Run it in a terminal. According to the README, the script is interactive: it walks you through the PPA installation and the RootFS download. An x86-64 RootFS is required, and FEXRootFSFetcher is the tool that downloads one for many distributions.
For other distributions, the README points to the official FEX-Emu Wiki rather than giving inline steps. The prerequisites are ARMv8.0-a or newer hardware with the minimum extensions FEAT_FP and FEAT_CRC32. The README states that FEX has been tested on Arch Linux, Fedora Linux, openSUSE and the Ubuntu versions above, and that other distributions are likely to work as well. If your distribution is not covered by FEXRootFSFetcher, you have to generate your own RootFS, and the README directs you to a wiki page for that.
Where FEX is the wrong tool
FEX is a usermode x86 emulator, so it does not emulate a complete PC. If your software needs kernel modules, device drivers, or a specific machine model, a usermode translator is the wrong layer. The README does not document any system-emulation mode.
The hardware floor is a real constraint. ARMv8.0-a or newer with FEAT_FP and FEAT_CRC32 is the stated minimum, so older Arm cores are out. The RootFS requirement is a second constraint: FEX needs an x86-64 RootFS, and while FEXRootFSFetcher covers many distributions, the README says other distributions require generating your own, which it describes only by pointing at a wiki page. That is the least documented part of the setup path.
The code cache is described as experimental, so its effect on stuttering should be treated as something to measure on your own workload rather than a guarantee. And the per-app configuration system, including the memory model option, is a correctness-for-speed trade. Skipping memory model emulation can break software that relies on strict ordering, and the README does not enumerate which applications are safe. FEXConfig lets you change these settings, but it does not tell you which setting a given game needs.
FEX against qemu-user and box64
The README names qemu-user and box64 as the closest comparisons, and the difference is architectural. qemu-user is a general-purpose usermode emulator: it emulates a CPU, and graphics or compute calls stay inside the emulated world unless you set up host library passthrough yourself. FEX instead treats host API forwarding as a first-class feature, with the README calling out OpenGL and Vulkan forwarding specifically, so GPU work reaches the host driver directly.
box64 is the other Arm64 x86-64 translator in this space, and the README lists it alongside FEX as the same category of tool. The distinction FEX draws is its per-app configuration system plus the FEXConfig GUI, which let you tune settings per game, and the experimental code cache aimed at in-game stuttering. If you want a general-purpose emulator with a long history of running arbitrary Linux userland, qemu-user is the broader instrument. If your workload is Wine or Proton gaming on Arm64 and you want to tune per title, FEX's stated design is aimed at exactly that.
Maintenance, release cadence and licence
The last push to the default branch was on 2026-09-21, and the most recent release is FEX-2609, published on 2026-09-08. The release before that, FEX-2608, was published on 2026-08-05, and FEX-2607 on 2026-07-04. That is a roughly monthly release cadence across the three most recent releases, and the repository is not archived.
Upgrade cost is low if you installed through the PPA, since the README's install path is a package-based one and the releases are versioned by year and month (FEX-2609 reads as 2026, month 09). Building from source is a different proposition: the repository is C++ with CMakeLists.txt at the top level and External/ for dependencies, and the README does not document the build steps inline, only pointing to the wiki. Budget time for that path.
The licence is MIT, which is permissive and places few obligations on how you redistribute or embed the code. That is a statement about the licence text, not legal advice; if you ship FEX inside a product, read the LICENSE file in the repository and get your own counsel.
Editorial conclusion
Adopt FEX if you are on Arm64 Linux with ARMv8.0-a or newer, need to run x86 or x86-64 binaries, and can supply an x86-64 RootFS; skip it if your hardware lacks FEAT_FP and FEAT_CRC32, if you need a Windows-native emulator rather than a usermode x86 translator, or if you cannot generate a RootFS for your distribution. Before committing, verify your CPU extensions, confirm FEXRootFSFetcher can produce a RootFS for your distro, and check whether the per-app configuration options you need are documented for your workload.
Frequently asked questions
What is FEX-Emu?
FEX is a usermode x86 and x86-64 emulator for Arm64 Linux, licensed under MIT. It runs 32-bit and 64-bit x86 binaries and can be used with Wine or Proton to run Windows games.
What is FEX used for?
It runs x86 applications on Arm64 Linux devices, and the README states it can be paired with Wine or Proton to play Windows games. It also forwards API calls to host libraries such as OpenGL or Vulkan to cut emulation overhead.
Is FEX better than Box64?
The README lists box64 alongside qemu-user as a comparable tool rather than claiming a ranking, so it does not settle the question. The differences it does describe are FEX's per-app configuration system, its FEXConfig GUI, and an experimental code cache aimed at reducing in-game stuttering.
How do I install FEX-Emu?
On Ubuntu 22.04, 24.04, 24.10 or 25.04, the README gives a single script that installs FEX through a PPA and downloads a RootFS. For other distributions it points to the official FEX-Emu Wiki instead of giving inline steps.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/fex-emu-fex)