FEX-Emu for Podman Machine: x86_64 emulation on Apple Silicon without Rosetta #28549
tnk4on
started this conversation in
Show and tell
Replies: 2 comments
-
|
Why does this not work with applehv?
AFAIK RHEL 10 compiles everything for x86_64-v3, does this mean the RHEL 10/ubi10 based base images will fail to run with FEX? |
Beta Was this translation helpful? Give feedback.
0 replies
-
|
Good catch — my docs were outdated. FEX-Emu has supported AVX/AVX2 since mid-2024. I tested UBI 10 (RHEL 10.1) and it works fine. The original issue #28184 mentioned AVX in the title, so I assumed that was the cause of the MSSQL crash. Turns out it may be something else. Will fix the docs. Thanks! |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Summary
I've built a custom Podman Machine OS image that replaces Rosetta/QEMU with FEX-Emu for x86_64 container emulation on Apple Silicon Macs. This is a personal project (not an official Podman product), shared to get community feedback.
Image:
quay.io/tnk4on/machine-os:5.8(Podman 5.x) /quay.io/tnk4on/machine-os:6.0(Podman 6.x)Requires
libkrunprovider.Repository: https://github.com/tnk4on/podman-fex
Why FEX-Emu?
Running x86_64 containers on Apple Silicon with Podman has long been problematic:
libkrunprovider; hangs with many distros (#27210, #27817, #27799)FEX-Emu is a JIT-based x86_64 emulator officially adopted by Fedora 42. It provides:
Results: 17 Community-Reported Issues Tested
I tested against 17 known x86_64 emulation issues from this repository:
Per-issue breakdown (click to expand)
ng buildhang13 of 17 resolved (76.5%). All hang/freeze issues (100%) and all QEMU SIGSEGV issues (100%) are fixed. Remaining failures are AVX (unsupported by FEX) and Go 1.24+ runtime compatibility (upstream FEX issue).
See TEST-RESULTS.md for per-issue details with reproduction commands and full terminal output.
Quick Start
1. Set the provider to libkrun (one-time, required):
Verify:
podman machine info --format '{{.Host.DefaultMachineProvider}}'→ must showlibkrun2. Create the FEX-Emu machine (use
:5.8for Podman 5.x,:6.0for Podman 6.x):3. Verify:
If using Option B (named machine), add
--connection fexto all commands.Performance
Tested on MacBook Pro M1 Max, macOS 26.4.1, Podman 5.8.
Startup Latency — FEX-Emu adds minimal overhead:
podman run --rm alpine echo helloCode Cache Warmup (single container, 5 iterations — full results):
python3 -c 'print(42)'g++ --versionperl -e 'print 42'dpkg -l | wc -lrpm -V bashKnown Limitations
crypto/internal/fips140SIGSEGVapplehvproviderlibkrunlibkrunFeedback, bug reports, and environment info (
sw_vers -productVersion, chip model,podman --version) are welcome in the thread below.Beta Was this translation helpful? Give feedback.
All reactions