Skip to content
forked from ptitSeb/box64

Box64 - Linux Userspace x86_64 Emulator with a twist, targeted at ARM64 Linux devices

License

Notifications You must be signed in to change notification settings

Pro42good/box64

 
 

Repository files navigation

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 and RV64 platforms, Box64 achieves a speed boost 5-10x faster than the interpreter alone. For a deeper look at DynaRec, see this article.

Box64 Icon

Logo and icon by @grayduck - Thank you!


📖 Usage

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

Debugging Note: Box64's Dynarec uses Memory Protection and a SegFault signal handler for JIT code handling. If debugging with GDB, set handle SIGSEGV nostop to avoid constant interruptions. Set a breakpoint inside my_memprotectionhandler in signals.c if you want to track SegFaults.


🚀 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.

Note: Some installers may default to x86 on ARM64 OS, 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 don’t 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 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.

Let me know if you’d like further adjustments!

GTK Programs

  • Box64 now 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.

Vulkan

  • Box64 wraps Vulkan libraries. Limited testing done with AMD RX550 and Freedreno drivers.

❤️ Acknowledgments

A huge thank you to everyone who has contributed to Box64 development! Special thanks to:


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


About

Box64 - Linux Userspace x86_64 Emulator with a twist, targeted at ARM64 Linux devices

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 98.2%
  • Python 0.9%
  • CMake 0.6%
  • Assembly 0.2%
  • Makefile 0.1%
  • C++ 0.0%