前言

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官方核心开发人员在此事件中始终持消极被动态度,直至收到来自公司内部的压力才有所改观,在此提出批评。

我持续推动Rust语言支持Windows XP系统的更多相关文章

  1. 是智能手机推动windows xp系统停止服务吗

    昨天是windows xp系统停止服务的大限,各大媒体争相报道,漫天铺地的xp消息充斥网络,xp这个词的百度指数这段时间从4月1日的8411也开始猛涨,特别是这两天4月7日的36470飙升到4月8日的 ...

  2. 移植 libuv 至 Visual C++ 6.0 并支持 Windows XP 编译系统

    移植版本 libuv:https://github.com/liigo/libuv-vc6 (支持VC6和XP.作者Liigo). 我从一年前(大概2013年6,7月份)開始在业余时间做这项移植工作, ...

  3. Windows XP系统服役13年今正式退休

    清明已过,服役13年的微软Windows XP系统也于今日正式“退休”.尽管这之后XP系统仍可以继续使用,但微软不再提供官方服务支持.对于中国数以亿计的XP用户来说,一方面是对已经使用了13年的操作系 ...

  4. Intel Nehalem微架构Calpella平台机型Windows XP系统下如何开启AHCI硬盘工作模式(XP系统下如何加载AHCI驱动)

    问题描述用户来电表示使用IDE模式安装XP系统后开启AHCI模式会出现开机蓝屏重启的问题,咨询如何在XP下加载AHCI驱动,以便开启BIOS中AHCI选项来发挥硬盘的最佳性能   问题分析 Windo ...

  5. WINDOWS XP 系统显示乱码的解决方法(修改注册表,使用正常字体)

            一位同事的计算机进入WINDOWS XP系统后,电脑里的所有汉字全部显示乱码,很多办公文档无法打开而影响工作.因为第一次遇到这种问题,当然首先是百度解决了,搜索了相关的信息后找到了答案 ...

  6. Windows XP系统下添加任务计划常出现问题解决办法

    Windows XP系统下添加任务计划常出现问题解决办法 计划任务就是让电脑在指定的时间内执行指定的动作(计划动作),这些动作可以是一个程序,也可以是一个批处理,但是至少是可以运行的(通俗一些就是双击 ...

  7. windows XP系统搜索无线网络时提示“windows无法配置此无线连接”,如何处理?

    转自:http://support1.lenovo.com.cn/lenovo/wsi/htmls/detail_12839009034375918.html 文章编号:C191612     201 ...

  8. 如何在老惠普电脑上安装windows xp系统

    如何在老惠普电脑上安装windows xp系统 前提,老式的紧凑的惠普台式机,装了linux系统,想要装windows xp系统另作他用.但是使用U盘PE怎么也进不了? 解决办法: 1.拆下惠普主机上 ...

  9. 从Windows XP系统迁移到Windows 7,Windows 8开始

    Microsoft在2014年4月8日结束了Windows XP的支持.您的公司准备好了吗?如果您还没有迁移到Windows 7或8,那就要抓紧时间了.从现在起将不再向XP系统提供安全修补程序,而仍然 ...

随机推荐

  1. canvas图片滚动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  2. [AHOI2013]差异 后缀自动机_Parent树

    题中要求: $\sum_{1\leqslant i < j \leq n } Len(T_{i}) +Len(T_{j})-2LCP(T_{i},T_{j})$ 公式左边的部分很好求,是一个常量 ...

  3. vue 事件上加阻止冒泡 阻止默认事件

    重点 vue事件修饰符 <!-- 阻止单击事件冒泡 --> <a v-on:click.stop="doThis"></a> <!-- 提 ...

  4. (WC2016模拟十八)【BZOJ4299】[CodeChef]FRBSUM

    咕了若干天我终于来补坑了qwq HINT $1\leq N,M\leq 10^5$ $1\leq \sum A_i\leq 10^9$ 题解: 虽然场上做出来了但还是觉得好神啊! 假设当前集合能凑出$ ...

  5. 浅谈 MySQL的外键的作用

    MySQL中外键的介绍: MySQL外键必须使用存储引擎为  innDB  其中MySAM 和MEMORYH这两种引擎不支持 由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的 ...

  6. 怎么给Unity写一个原生的插件

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50266889 作者:car ...

  7. 素数计数函数$\pi(x)\sim \Theta(\frac{x}{\log{x}})$的一个初等方法——素数定理的估计

    $\DeclareMathOperator{\lcm}{lcm}$ 本文的方法来源于GTM 190:"Problems in Algebraic Number Theory",给出 ...

  8. UVA Foreign Exchange

    Foreign Exchange Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Your non ...

  9. deque迭代器失效的困惑?

    在实现LRU算法的时候lru_list 開始用的是deque 可是由于害怕其在插入删除上的迭代器失效情况的诡异情况.遂用list取代之. 在数据量比較大的时候性能不是非常好.性能优化分析的时候决定用d ...

  10. cocos2dx2.0 与cocos2dx3.1 创建线程不同方式总结

    尽管内容是抄过来的.可是经过了我的验证.并且放在一起就清楚非常多了,cocos2dx版本号常常变化非常大.总会导致这样那样的问题. cocos2dx2.0 中 1. 头文件 #include < ...