Box64 - Linux Userspace x86_64 Emulator with a twist, targeted at ARM64 Linux devices
Go to file
Yang Liu 52ba725fa5
Some checks are pending
Build and Release Box64 / build (ubuntu-latest, ANDROID, Release) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, ANDROID, Trace) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, ANDROID_GLIBC, Box32) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, ANDROID_GLIBC, Release) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, ANDROID_GLIBC, StaticBuild) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, ANDROID_GLIBC, Trace) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, ARM64, Box32) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, ARM64, Release) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, ARM64, StaticBuild) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, ARM64, Trace) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, LARCH64, Box32) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, LARCH64, Release) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, LARCH64, StaticBuild) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, LARCH64, Trace) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, RISCV, Box32) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, RISCV, Release) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, RISCV, StaticBuild) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, RISCV, Trace) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, RK3588, Box32) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, RK3588, Release) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, RK3588, StaticBuild) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, RK3588, Trace) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, TERMUX, Release) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, TERMUX, Trace) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, X64, Box32) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, X64, Release) (push) Waiting to run
Build and Release Box64 / build (ubuntu-latest, X64, Trace) (push) Waiting to run
Reworked on mmap address alignments for a performance regression (#2057)
2024-11-22 12:06:55 +01:00
.github [CI] Generate and upload .wcp file for Winlator (#2045) 2024-11-19 13:49:35 +01:00
debian Bumped version to v0.3.0 2024-07-09 11:02:43 +02:00
docs [ARM64_DYNAREC] More optimizations on strongmem emulation (#2051) 2024-11-20 18:59:20 +01:00
pkgbuilds build: fix PKGBUILD-rk3xxx pkgname was set to box86 (#1681) 2024-07-16 08:10:35 +02:00
src Reworked on mmap address alignments for a performance regression (#2057) 2024-11-22 12:06:55 +01:00
system [RCFILE] More adjustments with new strongmem 2024-11-20 21:02:08 +01:00
tests [WRAPPER] Fixed myStackAlignGVariantNew and refined the test too (#2038) 2024-11-15 21:37:36 +01:00
tests32 Added preliminary Box32 support (#1760) 2024-08-26 17:45:13 +02:00
wrapperhelper [WRAPPERHELPER] Added pragma once support, fixed a preprocessor bug, fixed the wrapperhelper Makefile (#1977) 2024-10-29 16:31:05 +01:00
x64lib Added x64 version of libcrypto.so.1.0.0 and libssl.1.0.0 2024-07-08 18:18:04 +02:00
x86lib [BOX32] Addes 3 more x86 libs for convenience 2024-10-06 14:03:30 +02:00
.clang-format [LA64_DYNAREC] Added more opcode and fixes (#1423) 2024-04-06 11:38:04 +02:00
.gitignore [WRAPPERHELPER] Added box32 and line number support in the wrapperhelper (#1890) 2024-09-30 12:31:45 +02:00
.travis.yml remove executable bits 2023-07-21 02:10:26 +02:00
cmake_uninstall.cmake.in Added some minimal set of source (now box64 compile and say hello at least) 2021-02-28 14:19:04 +01:00
CMakeLists.txt [WRAPPER] Added wrapped libzstd.so.1 support, with new wrapperhelper 2024-11-17 11:30:30 +01:00
LICENSE Moved LICENSE file back to root (for #93) 2021-08-21 17:40:45 +02:00
postinst Refined .deb build script with arch naming and postinst 2021-07-10 10:01:49 +02:00
README_CN.md Minor adjustments to README, updated README_CN (#2032) 2024-11-14 11:15:36 +01:00
README_UK.md [RCFILE] Added support fro cursor (for #1778) 2024-08-31 09:05:36 +02:00
README.md Minor adjustments to README, updated README_CN (#2032) 2024-11-14 11:15:36 +01:00
rebuild_wrappers_32.py [BOX32] Improve errno handling, and added a few more libc wrapped functions 2024-11-07 13:26:55 +01:00
rebuild_wrappers.py [WRAPPER] Small rework on wrapper return values 2024-11-02 09:20:42 +01:00
runTest.cmake [CTEST] Use BOX64_LD_LIBRARY_PATH instead of default LD_LIBRARY_PATH (#1764) 2024-08-27 18:34:58 +02:00

Official logo

Box64: Linux Userspace x86-64 Emulator with a Twist

Changelog | 中文 | Українська | Report an Error

Build Status Stars Forks Contributors Pull Requests Issues


Box64 enables running x86_64 Linux programs, including games, on non-x86_64 Linux systems such as Arm (64-bit little-endian host system required).

Check out Box64 in action on YouTube:

Box64 leverages native system libraries (libc, libm, SDL, OpenGL), offering ease of integration and surprising performance in many applications. For performance benchmarks, check this analysis.

With DynaRec for ARM64, RV64 and LA64 platforms, Box64 achieves a speed boost 5-10x faster than the interpreter alone. For a deeper look at DynaRec, see Inner workings.

Box64 Icon

Logo and icon by @grayduck - Thank you!


📖 Usage

Box64 offers environment variables to control its behavior. For details, see Usage Documentation.


🚀 Compiling and Installation


🔄 Version History

See the Changelog for version updates.


🖥️ Platform Compatibility Notes

Box64 requires 64-bit libraries on the host system, as it directly translates x86_64 function calls. For 32-bit binaries, use Box86.

Notes

  1. Box32 mode is in the making, which aims to support 32-bit binaries on Box64, stay tuned!
  2. Some installers may default to x86 on 64-bit host OSes, causing compatibility issues. Workaround: Use a fake uname that returns "x86_64" for -m.

⚙️ Configuration

Box64 has configuration files located in /etc/box64.box64rc and ~/.box64rc, both formatted as .ini files. If you dont want to use the default /etc/box64.box64rc file, copy it to ~/.box64rc to ensure compatibility.

Settings priority: ~/.box64rc > /etc/box64.box64rc > Command line.


📄 Additional Platform-Specific Notes

Unity Game Emulation

  • Many Unity games require OpenGL 3+, which may be challenging on ARM/RISC-V SBCs.
  • Tip for Pi4 and Pi5 Users: Set MESA_GL_VERSION_OVERRIDE=3.2 with BOX64_DYNAREC_STRONGMEM=1 to prevent freezes and enable strong memory mode.
  • Using Panfrost: For better compatibility on ARM, enable PAN_MESA_DEBUG=gl3 to force higher OpenGL profiles. This can help if a game starts but quits unexpectedly before showing any content.

GTK Programs

Box64 wraps GTK libraries, supporting both gtk2 and gtk3.

Steam

Steam requires Box86 due to its 32-bit client app, but uses 64-bit local server binaries. Systems with less than 6GB RAM may need a swap file for optimal performance.

Wine

Box64 supports Wine64 and Proton. For 32-bit components, Box86 is required. Systems with both Box64 and Box86 can run 32- and 64-bit Windows programs.

Note: You can use Wine WOW64 build to run x86 Windows programs in Box64-only environments, this is still experimental, but it works in most cases.

Vulkan

Box64 wraps Vulkan libraries.


Final word

I want to thank everyone who has contributed to box64 development. There are many ways to contribute: code contribution, financial, hardware and advertisement! So, in no particular order, I want to thank:

And I also thank the many other people who participated even once in this project.

(If you use Box64 in your project, please don't forget to mention it!)