3 ms·
This is exactly it. They're using box86 [ https://github.com/ptitSeb/box86 https://github.com/ptitSeb/box86 ] which allows you to run x86 but not x86_64 Linux p
by ThatPlayer 6y ago
This is exactly it. They're using box86 [ https://github.com/ptitSeb/box86 https://github.com/ptitSeb/box86 ] which allows you to run x86 but not x86_64 Linux programs on ARM Linux.
- dleslie 6y agobox86 runs fine in a 32bit chroot. But, really, it's strange that box86 rejects aarch64. Most aarch64 chips can easily run 32bit arm code, and so ... why not?
- spijdar 6y agobox86 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.