楼主:
ivon852 (ASUS)
2022-01-05 15:23:04Box86/Box64这套开源软件可将x86的Linux程式转译成ARM的指令,以Userspace执行,并使
用Dynamic recompilation提升转换效率,使得ARM平台也能够执行x86程式。
https://i.imgur.com/dObYjE8.png
实际例子: ARM64的Proot Ubuntu,透过box64执行只有amd64版的Minecraft基岩版服务器软
体。
https://i.imgur.com/UGCv7Be.png
那还有什么Linux程式一定要用x86版的? Wine就是一个例子。
(注: 为方便讨论,下文“x86”指电脑CPU架构,“x86_64”包含amd64、x64)
## Box86/Box64的应用
Wine虽能执行Windows exe程式,但也是仅限x86架构的装置能执行。若在ARM架构的装置,
如树莓派或手机要跑ARM版Wine也是可以,但是只能执行“ARM版的Windows exe”,因为Win
e不包含跨架构模拟。
因此安装Box86/Box64充当转译器,翻译x86版Wine的指令,这样就可以在ARM平台透过Wine
执行Windows的程式。
## 实际执行模式探讨
Box86/Box64从[Github](https://github.com/ptitSeb/box86) clone下来编译后就能使用
。
box + wine的指令如下:
```
box86 wine <exe>
```
或者
```
box64 wine64 <exe>
```
Wine主要是执行32位元的Windows exe,针对64位元exe另有Wine64。尽管Wine64相容Wine32
,但是bug很多不该混用。
Box86/Box64亦是如此,执行时后面要接对应位元的Linux程式才能正确执行。
也就是说,假设有一个64位元的notepad.exe,指令就应该是:
```
box64 wine64 notepad.exe
```
图: Android Proot Ubuntu透过Box64 + Wine64执行Notepad++
https://i.imgur.com/EacC29t.png
## Box86/Box64的限制
因为严格对应位元,64位元的系统若要编译Box86,需要使用chroot或者启用MultiArch,不
然的话Box86就只能在32位元系统运作。
同样,Wine本身开不起来的exe,透过Box86或Box64也是一样开不起来。
## 结语
尽管模拟会损失效能,但这是补足ARM平台软件的一个解决方案。通常Linux软件不会只释出
一种架构,但若真碰到了,Box86/Box64或许能帮得上忙,更重要的是Box86是开源的技术。
顺带一提,类似的x86转ARM程式还有Wine官方的Hangover、Eltech的Exagear、苹果的Roset
ta 2、微软的x86模拟器等等;当然也有反过来的例如Intel Houdini。