iSH(Linux shell for iOS) 简介
iSH 是一个运行在iOS上的Linux shell,不过这个程序并不是原生程序,而是使用了 x86 用户模式仿真和系统调用翻译转换。由于在 iOS 环境下(没有越狱)无法获得系统的shell进行操作,所以这个开源项目还是弥补了iOS系统的不足,方便实现 移动工作
这个虚拟化系统中运行了一个 Alpine Linux ,通过完整的Linux生态来实现不同的软件安装,非常类似在 Android 上的 Termux - Andorid终端 系统。
备注
我尝试采用在iPad上运行iSH,来构建一个 移动工作
iSH特点
支持中文输入:这是最重要的最基本的特性之一,我尝试过iOS平台的各种Terminal和ssh客户端,包括 ash 以及 Termius 等各种iOS原生终端软件,但无一例外都无法输入中文。看起来这些iOS原生软件都使用了相同的底层组件,都不重视多国语言输入,这导致只能用于应急而不能作为日常工作终端
注意,服务器端需要设置好编码,即 en_US.UTF-8 作为 LC_ALL 设置
模拟器运行了完整的 Alpine Linux 所以在iOS中可以构建完整的Linux环境,作为日常工作桌面
不过我的iPad Pro是一代产品 性能极弱 ,实践发现计算密集型程序运行极慢,我最初以为是早期设备硬件不足。但后来改为使用 iPad mini 5 执行
make html编译Cloud Atlas Sphinx文档 文档才确定是虚拟化性能问题为了方便使用,我实际采用VPS虚拟机来提供统一的工作平台
跨架构模拟性能
在 iSH 中,实际底层运行的是 i686 (x86) QEMU 虚拟机,但是在苹果设备 iOS 和 macOS 的物理主机是 ARM 架构, 通过 qemu 实现架构的指令转换,这个过程没有任何硬件加速,造成巨大的性能开销。
在将 iSH 作为终端使用时,延迟还不太明显。但是,一旦通过 Alpine Linux初始化 构建完整的Linux系统,尝试 移动工作 本地进行开发编译等计算密集性任务,立即暴露出这个架构的短板: 和原生架构硬件加速的 KVM 性能有 百倍 (至少两个数量级)差距:
举例: 完整 make html 构建Cloud Atlas(本 Sphinx文档 项目)竟然花费了将近13个小时:
The HTML pages are in build/html.
real 12h 50m 07s
user 0m 0.03s
sys 0m 0.00s
解决的方式是采用 macOS平台QEMU实现:UTM 的JIT模式运行同架构模拟(ARM on ARM),这样的同架构ARM64虚拟化性能损失远小于x86跨架构模拟。当然,采用远程VPS虚拟机开发也能绕开这个问题。