锁屏亮着。4:09,12 月 31 日,星期三。屏幕上方是 “Microsoft” 的字样,底下插着充电线。这是一台 Lumia 950 XL,跑的是 iOS 16。
再翻到“关于本机”,画面更有意思:名字叫 iPod touch,型号写 iPhone X,系统版本 16.7.16,Wi-Fi 地址一栏是 N/A。开发者 ShrimpApplePro(X 账号 @VNchocoTaco)把这两张照片发在 X 上,一条配文 “GUYS”,一条 “This is hilarious”。
所以,Lumia 950 XL 刷上 iOS 16,现在到底能用吗?
结论先说:能开机、亮屏、触摸、按侧键、充电,也能进设置翻菜单。不能打电话、上网、拍照、出声,也装不了 App。GitHub
开发者在自己仓库里写得很直白:这是一个研究性移植(research port),不是一部能用的手机系统。目前公开信息里,还没有第三方完整上手,能核对的是开发者公开的仓库状态和实拍。GitHub
这件事容易被误解成“给 Lumia 换了个 iOS 主题”,或者“在安卓上跑了个模拟器”。都不是。开发者用 UniXNU 把苹果开源的 XNU 内核重新编译到这台手机的骁龙 810(MSM8994)上,再配上 iPhone X 原版的 iOS 系统文件。开发者说,能塞进这块芯片、又不带 PAC(指针认证)的纯 arm64 iOS 系统,只有 iPhone X 的 iOS 16.7.16。所以“关于本机”里出现 iPhone X,不奇怪:那是借来的身份,不是一台被模拟出来的 iPhone。GitHubGitHub
借来的身份也带来了借来的屏幕比例。开发者自己的开发日志里,iPhone X 的 1125×2436 画面被按高度塞进 Lumia 的 1920,宽度只剩 886,左右留出黑边。IT之家报道里的“布局缩放问题”,具体就是这个:界面能看,但像被压窄了一圈。GitHubIT之家
一台机器在移植里能不能“用”,说到底是一张驱动清单。Lumia 950 XL 这张清单的分界线很清楚:能用的部分,都是让屏幕看起来像 iPhone 的部分——显示、触摸、四个侧键、电池图标;不能用的部分,都是让手机真的成为手机的部分。
显示和触摸有了,所以你能解锁、滑动、进设置。GPU 没有驱动,所以动画是 CPU 一帧一帧画的,毛玻璃是灰的;在设置里打开“粗体文本”,iOS 桌面进程会崩溃重启——负责文字效果的 CoreUI 要去找图像框架 CoreImage,而这台机器没有 GPU 驱动。GitHub
Wi-Fi、蜂窝、蓝牙都没有驱动,所以它连不上网,也打不了电话。音频和相机没有驱动,所以它既不能出声,也不能拍照;侧面的相机键被改成了 Home 键,因为相机本身用不了。连实时时钟都没有驱动,时间从 1970 年起步,锁屏才会停在 12 月 31 日。装应用的后台服务 installcoordinationd 还在崩溃循环里,Siri 的语音合成也一样。GitHub
就算这些都能接受,它也不是一台随开随用的机器。从按下电源到系统跑起来大约三分钟,再到锁屏还要几分钟;第一次启动更久。大核被压在 633.6 MHz,滑动时负责绘制的进程能吃掉两个以上的 CPU 核。GitHubGitHub
安装过程更像一次实验:要从 32GB 的机身里切出 17.5GB 给 iOS,Android 的数据分区只剩 8GB,写盘加校验大约 45 分钟;需要一台装了 Xcode 的 Mac、一台能跑 bcdedit 的 Windows,以及一台已经刷好 LineageOS、带 root adb 和 TWRP 的 Lumia。分区和启动配置这两步出错,手机可能得重刷。每次启动 iOS 前,都要先挂一个一次性启动项,重启后默认回到 Android。换句话说,它不是把 Lumia 变成 iPhone,而是让 Lumia 偶尔启动成 iPhone。GitHubGitHub
这台机器当年被应用生态拖累;现在它跑上了 iOS,应用还是装不了——这次不是因为生态,是因为没有网络,也没有可用的安装服务。这个对照有点残忍,但也正好说明:把 iOS 搬到 Lumia 上,难的不是让苹果的代码跑起来,而是让一台 2015 年的手机,重新具备一部手机该有的功能。XNU 可以编译,系统文件可以借,驱动得一格一格补。GitHub
所以,回到那个问题:现在到底能用吗?如果你说的“用”,是点亮屏幕、滑动桌面、打开设置看一眼——能,而且比想象中完整。如果你说的“用”,是把它当一部手机——不能,至少现在不能。开发者没有把话说满,他说这是研究性移植;这句话不是谦虚,是使用说明。
能开机,和能用,中间隔着的是一整套驱动。Lumia 950 XL 已经跨过了前一半;要补上后一半,得一个驱动一个驱动地来。