前言

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. vue 锚点定位

    vue 锚点定位 <template> <div class="details"> <div class="wrapper w"& ...

  2. (2016北京集训十)【xsy1528】azelso - 概率期望dp

    北京集训的题都是好题啊~~(于是我爆0了) 注意到一个重要的性质就是期望是线性的,也就是说每一段的期望步数可以直接加起来,那么dp求出每一段的期望就行了... 设$f_i$表示从$i$出发不回到$i$ ...

  3. [codevs3269]混合背包

    题目大意:一道混合背包模板. 解题思路:分三种情况讨论,01和完全没什么问题,多重背包需要把物品分成$\log W[i]$件,然后01即可,分成W[i]件01会TLE. 读优大法好! C++ Code ...

  4. 火狐添加消息头 Modify Header Value (HTTP Headers)

    火狐浏览器添加组件 : Modify Header Value (HTTP Headers)

  5. cogs 181. [USACO Jan07] 最高的牛

    181. [USACO Jan07] 最高的牛 ★★   输入文件:tallest.in   输出文件:tallest.out   简单对比时间限制:1 s   内存限制:32 MB FJ's N ( ...

  6. ADT+NDK搭建jni编译环境

    jni是android调用C++编写的库的接口.C++和java的差别不在此文的讨论范畴,另外这里也仅仅是记录下.怎样搭建好开发环境. 首先是下载ADT包和NDK包. ADT包包括了eclipse.所 ...

  7. HDU 4756 Install Air Conditioning(次小生成树)

    题目大意:给你n个点然后让你求出去掉一条边之后所形成的最小生成树. 比較基础的次小生成树吧. ..先prime一遍求出最小生成树.在dfs求出次小生成树. Install Air Conditioni ...

  8. HDOJ 2828 Lamp DLX反复覆盖

    DLX反复覆盖模版题: 每一个开关两个状态.但仅仅能选一个,建2m×n的矩阵跑DLX模版.. .. Lamp Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  9. ios xcode真机调试获取屏幕截屏

    非常多时候我们须要在调试的过程中把手机屏幕截图发给其它人看,在android开发中我们能够非常方便的截图保存.而xcode开发ios的时候发现这个需求却如此困难.网上大部分都是介绍的以下这个方案.可是 ...

  10. 图像切割—基于图的图像切割(Graph-Based Image Segmentation)

     图像切割-基于图的图像切割(Graph-Based Image Segmentation) Reference: Efficient Graph-Based Image Segmentation ...