Box86/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。