Mozilla披露Firefox移植Apple Silicon细节

Mozilla将在Firefox 85提供更完整的Apple Silicon芯片支持,而WebRender之前因为会触发Big Sur中的绘图驱动程序bug,因此在Firefox 84版本禁用,但这个问题现在已经解决,因此在Firefox 85也会重新打开WebRender,另外,Firefox也针对Apple Silicon的异构计算架构进行优化,使其更能利用不同特性核心的优势。

去年底Apple发布一系列搭载M1芯片的Mac产品,M1是以Arm为基础,由Apple自家设计的芯片,而这些新Mac的性能表现,让用户充满惊喜,即便Apple提供了模拟器解决方案,但不少应用程序开始原生支持M1芯片,在浏览器市场扮演重要角色的Firefox也不例外,早在Apple真正发布搭载M1芯片的Mac之前,开发团队就开始评估Firefox支持Apple Silicon的可行性,以及支持的方法。

在Firefox支持Arm并不是一件全新且困难的工作,因为过去Firefox就已经在不同平台,包括Android和Linux之都支持64位元Arm,因此开发团队重新查看原本就支持64位元Arm的Firefox程序代码、相依项目和第三方构建系统等,确认这些部分都可以正确处理新Mac架构。

需要修改的程序代码,包括处理低端调用惯例,以及JavaScript、C++和Rust间的接口,而且因为Firefox非常依赖Rust程序代码,需要Rust编译器来构建浏览器,因此他们不只更新编译器,还有所有相依的组件,而且尤为困难的是涉及SIMD的支持,Mozilla提到,这很难让旧版本Firefox,在支持Apple Silicon的同时,又不影响到其他平台。

Firefox采用了通用二元文件(Universal Binary)的方式来支持M1 Mac,同一个安装文件可以同时用于英特尔以及Arm的Mac,虽然这样会让安装文件的大小明显增加,但是却可以避免用户下载错版本,下载页面和本地化基础设施也不需要变动,而且这也仅会影响初始版本的安装,在更新之后就可以获得容量较小的新版本,因此权衡优缺点下,Mozilla最终还是采用通用二元档的方法。

在所有Firefox开源的部分都移植到64位元Arm之后,另一个需要处理的问题是数字版权管理(Digital rights management,DRM)内容的支持,包括Netflix、Disney+和Amazon Prime,都要求使用闭源DRM软件解码视频。由于闭源DRM软件对于支持Apple Silicon的不确定性,Mozilla最后将DRM视频解码器以单独程序执行,并在用户的系统中以沙盒执行这些专有的程序代码。

发布新版安装程序也遭遇到了问题,当旧版Firefox自动下载并更新支持新架构Mac的Firefox,Firefox仍会持续以模拟器运行,这是因为在Apple Silicon上,任何在英特尔X64模拟器下执行的应用程序,另一个程序也会以模拟器执行,因此没有原生支持Apple Silicon的Firefox 83,即便自动更新到Firefox 84之后,系统不会自动启动新的原生二位元文件,必需要等到应用程序重新启动。

2020年12月15日Mozilla正式发布原生支持Apple Silicon的Firefox 84,Mozilla提到,虽然他们从很多报告看到,模拟器Rosetta对性能的影响很小,应用程序都还是能以原生性能70%到80%执行,但是当他们测试原生Firefox版本,还是对性能感到讶异,许多重要性能指标都翻倍之外,启动速度更是快了2.5倍。

不过,因为稳定性的考量,部分功能并没有在第一个支持Apple Silicon的Firefox 84上激活,包括因为WebRender在支持Apple Silicon的第一个Big Sur版本,会触发绘图驱动程序bug,而这个问题现在已经解决,因此在Firefox 85上将会重新激活,另外,在Firefox 85预计也会采用新的编译器Ion。

Mozilla表示,Apple Silicon是第一个异构设计的台式机芯片,因此他们还在更改大部分多核心执行序和线程池架构,将性能要求不高的工作,放到高效率核心(Efficiency Core)上,把高性能核心(Performance Core)留给重要的工作。另外,Mozilla还要清理和更新旧版macOS绘图API的用法,解决因为旧版API不支持深色模式,可能导致画面颜色异常的问题。