我持续推动Rust语言支持Windows XP系统

前言

Rust好像长期以来不支持Windows XP系统。有不少用户发帖提议官方支持XP,基本上都被Rust官方开发人员明白的拒绝了。他们的对话大致上是以这种形式開始和结束的(当中乙方代表官方及其拥趸):

甲方:Rust应该支持XP呀
乙方:微软官方已经放弃维护XP。我们为什么要支持一个不安全的系统?
甲方:从技术上说Rust支持XP应该也不难
乙方:不是必需为一个老旧的系统付出开发和维护成本
甲方:XP在全世界还有非常多装机量。甚至远超Mac OS系统
乙方:XP是不安全的系统
甲方:我们的客户要求软件支持XP
乙方:XP是不安全的系统
甲方:听说美国国防部还在部署一大批XP,花大价钱专门请来微软提供技术支持
乙方:XP是不安全的系统
甲方:……

基本上,Rust官方对支持XP的态度从来都是消极的,向来都是明白拒绝的。

发帖:Rethink supporting Windows XP

我(Liigo)在2014年3月12日发帖,要求Rust又一次考虑支持XP系统:Rethink supporting Windows XP (Issue#12842)

既然我知道Rust官方对待XP的一贯态度。为什么还要再发这类贴子呢?假设说不出什么新意,非常可能被视为来捣乱的,直接Close了事。必须言之有物。

我为什么要求Rust支持XP?无它。自身的需求,客户的需求。

在帖子中,我说自己fork了Rust源码并做了少量的改动,而且真的编译出来一个能够在XP系统下初步工作的Rust(后来我还专门写过一篇如何编译XP下可用的的文档rust-xp)。

以亲身实践说明Rust支持XP在技术上没有难度;就算系统缺少某些API,也能够模拟实现(其它开源项目有非常多先例可供參考)。我还说,XP尽管老旧,但装机量仍比Mac OS、Linux、Unix加起来还要多非常多。我还说,C, C++, Java, C#, Python, Ruby, Scala 等等非常多语言都支持XP。为什么Rust要做一个特殊的另类。

由于帖子是有真材实料的。并不是老生常谈,因而帖子得以保留,讨论得以继续。然而兴许的讨论,事实上跟上一节甲方乙方的对话没有太多差别,拉锯战,持续了一年多都没有实质性的结果。在漫长的时间里,不断地有支持我意见的网友,顶起这个帖子。告诉大家他们的需求:想要Rust支持XP。但是官方人员的态度摆在那里,想说服他们180度转弯没那么easy。我也没有忘记这个帖子,有心地搜集来自各方的相关资料。争取先扭转舆论。再靠舆论扭转官方人员的态度。

契机还是来了。当两个契机来暂时,我抓住机会及时顶贴调动舆论。

第一个契机:Servo in Gecko

Gecko是Mozilla公司以C++开发的的网页渲染引擎。主要应用在Firefox浏览器中。Servo in Gecko项目是一个新的尝试,想把Rust开发的某些Servo相关代码逐步整合/替换到现有的Gecko中,最终形成换了心(Servo)的新的Gecko。这是一个野心勃勃的计划。

2015年1月1日,Mozilla公司内部跨部门沟通会上。考虑Servo in Gecko项目是否支持XP系统,然而并没有什么卵用。由于作为(部分)开发语言的Rust不支持XP。

当时Rust开发组组长Brian Anderson在场,预计承受了一些来自兄弟部门的压力。相关链接:https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko#other-platforms

2015年2月23日。Mozilla公司Servo组的另一次沟通会上,再次考虑了Servo in Gecko支持XP平台的问题。相关链接:https://github.com/servo/servo/wiki/Meeting-2015-02-23#more-rust-in-gecko-discussion

可见,支持XP是严肃认真的需求。要想Gecko支持XP,首先必须Rust支持XP。等于是Rust拖了本公司兄弟项目的后腿。到这个时候,Rust项目组应该已经(被逼)開始考虑支持XP了。(现实,非常多时候就是这样。你能够长期忽视用户的需求,但你敢忽视来自同事甚至自家老板的需求吗?分分钟教你做如何做人。)

第二个契机:Firefox

转机最终来了。

2015年6月16日。Rust语言开发的一个库mp4parser将要被整合进Firefox浏览器源码里1。更早一点,另一个Rust库rust-url parser也打算被整合进Firefox源码里2

Firefox长期支持Windows XP。近些年Firefox在IE、Chrome步步紧逼下过得并不轻松,它在XP平台下的那大约10%的份额是死活也不肯丢的。Mozilla公司短期内绝对不同意Firefox放弃XP平台,也意味着绝对不同意Rust影响Firefox在XP上的部署。Rust必须支持XP,否则就是破坏Mozilla公司的市场战略,甚至动摇Mozilla公司的生存根基!当矛盾上升到这一层次。作为Mozilla公司主导的开源项目,Rust除了老老实实地支持XP之外已经别无选择。

支持XP

事情发展到这一步已经顺风顺水了。仅仅要官方态度发生转变。技术实现上难度不大。

到2015年6月27日,Rust已经初步实现了支持XP系统。动作还是蛮快的。

后语

所谓我(Liigo)“推动”Rust支持XP,仅仅只是是网上发发帖子、顶顶帖子、发几句牢骚、汇集些信息、引导点舆论而已。真正推动Rust支持XP的,是Mozilla公司自己项目的切实需求。Rust官方核心开发人员在此事件中始终持消极被动态度,直至收到来自公司内部的压力才有所改观,在此提出批评。