Make sure to leave a :star: :)
This is Hangover, a project started by André Zwing and Stefan Dösinger in 2016 that can run x86_64 and x86_32 Windows applications on aarch64 Wine.
Hangover uses various emulators as DLLs (pick one that suits your needs, e.g. works for you) to only emulate the application you want to run instead of emulating a complete Wine installation.
As soon as the application does a Windows/Wine system call, say NtUserCreateWindowEx, it's executed outside the emulator (read non-emulated, fast, native). Even better, everything Unix related is never emulated.
In short, we break out of emulation at the win32 syscall or wine unix call level for performance reasons, which is enabled by the WoW64 support in Wine.
For 64-Bit we're using the ARM64EC ABI combined with an emulator (FEX).
For Benchmarks see here. They show that the Hangover approach works as expected, as only emulating the application instead of a complete Wine installation has benefits. It's especially visible with box64cpu vs. Wine running under Box64.
Current main focus is to run x86_64 and i386 Windows applications on ARM64 Linux, but it's also possible to run ARM32 Windows applications on x86_64 Linux.
PPC64le isn't supported anymore and won't be added back in the near future. If you need that feature, have a look at older releases before 0.8.x.
Emulator integrations:
A Discord Server is available for contributors and previous financial supporters (see "Financial Contributiors" below). It provides advanced user support, development discussions and more.
Debian 11 & 12 (also usable for Raspbian, Armbian, ...) and Ubuntu 20.04 & 22.04 & 24.04 & 24.10 are attached to the Github Release.
Termux packages can be found in the Termux User Repository.
Alpine package can be found in the Alpine Testing Repository. It's only hangover-wine without box64cpu.dll for now, but you can copy over box64cpu.dll and/or libwow64fex.dll from extracted debian packages or compile them yourself.
For build instructions see here.
You can add the following environment variables:
libarm64ecfex.dll currently is the default for x86_64 emulation, so it's simply:
$ wine your_x86_64_application.exe
libwow64fex.dll is not the default for i386 emulation, so you need:
$ HODLL=libwow64fex.dll wine your_x86_application.exe
box64cpu.dll currently is the default for i386 emulation, so it's simply:
$ wine your_x86_application.exe
If you have issues with the default, please try one of the other emulators below.
Until the critical section issue is solved it is highly recomended to limit execution to 1 core with "taskset -c 1" for Qemu emulation:
$ HODLL=xtajit.dll taskset -c 1 wine your_x86_application.exe
$ HODLL=wowarmhw.dll taskset -c 1 wine your_arm_application.exe
Wayland isn't used by default or automatically, but if you want to use it instead of X11 do:
$ wine reg.exe add HKCU\\Software\\Wine\\Drivers /v Graphics /d wayland,x11
Copy the x32 binaries to $WINEPREFIX/drive_c/windows/syswow64
Copy the arm64ec, aarch64 or x64 binaries to $WINEPREFIX/drive_c/windows/system32, depending on your use case.
For x86_64 applications first try arm64ec, it should perform best. In case it doesn't work, try x64. For aarch64 applications use aarch64.
Then open winecfg
, switch to the Libraries tab and add native
DLL overrides for d3d8
, d3d9
, d3d10core
, d3d11
and dxgi
.
Note that DXVK requires a Vulkan 1.3 driver with certain features and that might not be the case for a lot of ARM64 hardware.
I have decided to end my activities on Patreon and other platforms. It won't be the end of the project, my plan is to keep working on it, delivering new releases and updates. However, I will probably invest less time, except for the RISC-V port.