还记得在今年年初盘点“Bug 连连”的 Android 12 时,XDA Developers 的前主编 Mishaal Rahman 曾预言:“Android 12 的 Bug 修复对谷歌而言已压力不小,由此可能导致下一版本的开发周期遭到缩减,从而引发恶性循环。”
结果不到一个月,Mishaal Rahman 就被“打脸”了:上周,谷歌正式发布了 Android 13 首个开发者预览版。
不可否认的是,在感受过“Android 历史上最大设计变更”的 Android 12 后,首个 Android 13 预览版似乎处在一种“珠玉在前,瓦石难当”的尴尬处境:在看过谷歌的介绍后,许多人吐槽 Android 13 “平淡无奇”、“鸡肋平庸”。
但就在昨天,Android 和 Web 开发人员 @kdrag0n 发现了隐藏在 Android 13 预览版中的闪光点:谷歌 Pixel 6 等设备在安装 Android 13 预览版后,可实现完全虚拟化!
这意味着,现在我们可以在 Pixel 6 或其他基于 Tensor 处理器的设备上,以接近原生的速度运行几乎任意操作系统,包括 Windows 11、Ubuntu 或 Arch Linux Arm 等 Linux 发行版。
一、将 KVM 引入 Android早在 2 个月之前,Mishaal Rahman 就曾“谷歌将如何在 Android 13 中使用虚拟化”这一话题进行过分析,他坚定认为:“谷歌多年碎片化战争的下一个战场是虚拟化。”
说起 Android 的虚拟化,Android 系统团队的 Will Deacon 将之称为“碎片化的狂野西部”。因为不论虚拟机是否存在于设备上,它们的作用通常都不是用来运行其他操作系统,而是用于试图增强内核安全或在 Android 操作系统之外运行杂项代码(例如 DRM、密码学和其他闭源二进制文件的第三方代码)。
但在谷歌看来,“在 Android 操作系统之外运行杂项代码”这一点存在重大隐患:
从上面这张 ARMv8/v9 异常模型中可以看出,虚拟机程序运行在 EL2 层,而在 ARM 命名法中,数字越大,特权级别越高,即 EL2 比行在 EL0、EL1 的代码权限更高。这也就意味着,许多闭源二进制文件的第三方代码的运行权限,比操作系统和内核还高。这显然是个安全隐患,因为在较高 EL 上运行的代码可访问低级别的所有寄存器。
为解决这一安全问题,谷歌一直在寻求一个通用的虚拟化解决方案,以实现解除第三方代码的特权,并将该代码与 Android 和其他第三方程序隔离开来。关于这点,KVM 是个不错的选择。
KVM,全名 Kernel-based Virtual Machine,是一个开源的系统虚拟化模块,自 Linux 2.6.20 之后,便广泛集成在各个主流 Linux 发行版中,主要使用 Linux 自身的调度器进行管理。而 Android 同样也基于 Linux 内核构建,所以谷歌自然而然会选择将 KVM 部署为通用虚拟机管理程序。但谷歌并非照搬全收,它实际上是在扩展具有额外安全功能的 KVM,即 pKVM:受保护的 KVM。
当时,Mishaal Rahman 就已预测了 Android 13 可能出现的变化:“目前,市场上没有任何 Android 设备配备虚拟化模块,包括谷歌自己的 Pixel 6 也没有,但这将随着即将发布的 Android 13 版本而改变。”他补充道,据他了解,谷歌有计划在 Android 13 中引入 pKVM 和虚拟机框架的第一个版本。
二、Mishaal Rahman 的预测成功这次,Mishaal Rahman 的预测成功了:通过加入全新虚拟化框架的 Android 13 预览版,@kdrag0n 完成了在 Pixel 6 中运行 Windows 11 及部分 Linux 发行版的尝试。
@kdrag0n 表示:“在 Pixel 6 + Android 13 DP1 上,拥有 KVM 管理程序(接近本机性能)的成熟虚拟机。”Ta 还分享道,目前在设备上可获得完整的 EL2,而“pKVM”是可选项,可在每个 VM 的基础上启用,但对于未受保护的 VM,似乎可使用完整的 KVM 功能。
为证明其运行成功,@kdrag0n 在推特上发布了一则各种 Linux 发行版作为 VM 在 Pixel 6 上启动的视频,其中包括 Ubuntu 21.10、Arch Linux Arm、Void Linux 和 Alpine Linux,甚至还有一段在 Arch 上为 arm64 编译 Linux 5.17-rc3 allnoconfig 的录屏。
此后,@kdrag0n 又通过 Android 13 虚拟化,让 Pixel 6 得以运行 Windows 11 并进行了优化:“稍微提高了性能,Windows VM 现在真的可以使用了,尽管不支持硬件 GPU 加速,但 CPU、I/O 和内存压力已缓和许多。”
不仅如此,@kdrag0n 还成功通过 Pixel 6 的 Windows 虚拟机,连接到电脑上(为进行键盘输入),十分顺畅地玩起了 1993 年的老游戏《毁灭战士》。
但 @kdrag0n 也补充道,这是 Windows on ARM,而非 x86,并且不支持嵌套虚拟化,所以也不支持 WSA。尽管这远非完美的体验,也不如本地安装操作系统那样流畅,但能够良好运行已然不易。
相信等到 Android 13 正式版支持 pKVM 时,其虚拟机体验将再度完善,届时各类操作系统在 Android 手机上的表现也值得期待。
参考链接:
https://blog.esper.io/android-dessert-bites-5-virtualization-in-android-13-351789/
https://www.cnx-software.com/2022/02/14/android-13-virtualization-lets-pixel-6-run-windows-11-linux-distributions/
https://twitter.com/kdrag0n/status/1492754683445669893