3 ms·
box86 runs x86 binaries in an emulator that translates syscalls and library calls to native syscalls and library calls. The JIT compiler they're using and the s
by spijdar 6y ago
box86 runs x86 binaries in an emulator that translates syscalls and library calls to native syscalls and library calls. The JIT compiler they're using and the syscalls tables are specifically for 32 bit x86, and because they're simply passing calls through the host system must match both endianness and word size, so running a 32 bit x86 executable requires a 32 bit little endian host.
ARMv8 can run in either 32 bit "aarch32" or 64 bit "aarch64" modes, and both require separate runtimes, as does 32/64 bit x86. So you need 32 bit ARM libraries for box86's translation to work.
It could be updated to support 64 bit executables, but that would be an amd64/x86_64 -> aarch64 translation layer. Doing 32 -> 64 bit or vice versa is much, much harder, and requires manual translation of calls for specific libraries and kernels to be done, as nested binary data is passed in some library/syscalls that needs to be converted.
- dleslie 6y agoThey could also package and ship a 32bit chroot and do no translation.