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

前言

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

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

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

2016年5月18日Liigo补记:从下面这段真实的对话中,可再次印证Rust官方当时对支持XP系统的消极和傲慢态度。这段对话发生在Rust项目负责人brson(Brian Anderson)和Gecko/Firefox开发者之间(上下文是探讨在Gecko/Firefox中使用Rust代码):

brson:你们支持XP还打算支持多久?
eshan:直到我们的XP用户都死绝了为止。我们还有几百万XP用户呢。
gps:(XP用户比例)大概是10%。
glandium:比Linux用户还多。

看看人家eshan说的,只要用户不放弃XP,Firefox决不放弃XP。brson您不觉得汗颜么?

大家注意时间,上面这段对话发生在2015年1月,比我发帖要求支持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版本,rust-xp)。以亲身实践说明Rust支持XP在技术上没有难度;就算系统缺少某些API,也可以模拟实现(其他开源项目有很多先例可供参考)。我还说,XP虽然老旧,但装机量仍比Mac OS、Linux、Unix加起来还要多很多。我还说,C, C++, Java, C#, Python, Ruby, Scala 等等很多语言都支持XP,为什么Rust要做一个特殊的另类。

因为帖子是有真材实料的,并非老生常谈,因而帖子得以保留,讨论得以继续。然而后续的讨论,其实跟上一节甲方乙方的对话没有太多区别,拉锯战,持续了一年多都没有实质性的结果。在漫长的时间里,不断地有支持我意见的网友,顶起这个帖子,告诉大家他们的需求:想要Rust支持XP。可是官方人员的态度摆在那里,想说服他们180度转弯没那么容易。我也没有忘记这个帖子,有心地搜集来自各方的相关资料,争取先扭转舆论,再靠舆论扭转官方人员的态度。契机还是来了。当两个契机来临时,我抓住机会及时顶贴调动舆论。

第一个契机: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系统。动作还是蛮快的。

有一点还要说明白。这里说Rust初步支持XP,是指Rust编译出来的程序可以在XP系统上运行(除非自己调用了XP不支持的API)。但Rust编译器本身仍然不支持在XP系统上运行。

后语

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


20170424 Liigo 补记:一切都完蛋啦。Mozilla已经声明,Firefox 53开始将不在支持XP系统。尘归尘、土归土,XP,再见!我能做的只有这些了。

猜你喜欢

转载自blog.csdn.net/liigo/article/details/46730385