据说今年 4 月初的时候 Windows XP 停止技术支持了。好吧,我平时又不用 XP,它支不支持跟我都没什么关系。家里一台十几年前的老电脑倒是装了 XP,不过我就只是偶尔用它打游戏而已,对于一台游戏机来说,有没有技术支持有什么关系呢,三十年前的红白机早就没技术支持了不也一样玩得好好的么?

我一直认为,对一个十几年前的老系统停止技术支持其实不是什么坏事。新的技术总是比旧的技术先进不是,干嘛老抱着旧的技术不放?再说了,新的系统总是可以兼容旧的程序的嘛。万一遇到不兼容了,那肯定是这个程序错误地使用了旧的技术,那就赶快升级到正确的新技术上来啊。XP 的后续版本发布到现在都那么多年了,担心有兼容性问题那早点测试早点解决去啊,非得到不能用的那一天才发现,早干什么去了?所以,对于那些为 XP 停止技术支持垂胸顿足的人,我一直以一种幸灾乐祸的态度看待的,直到有这么一天,我发现 Ruby 1.8 停止技术支持了……

那天,我安装了传说中的可靠的塔尔羊,装完以后,发现 Deplate 不能用了。没事,安装新系统之后有些东西和以前不一样很正常了,检查一下看看哪不对劲,修理一下就完事了。仔细检查了一下,发现 Deplate 需要 Ruby 1.8,但系统里只有 Ruby 1.9。好吧,看起来不是什么大不了的事情,就只是差了一个小版本号而已,大不了我把 Deplate 移植到 Ruby 1.9 下就好了。

随手修改了一下 Deplate 依赖的 Ruby 版本号,再运行一次,发现出了好多好多错误。好吧,看来 Ruby 1.9 和 Ruby 1.8 之间不是我想象的那样“向下兼容”的,可能需要稍微多修改点东西才行。那就慢慢改吧,

打开 Deplate 源码一路追踪过去,发现原来是中文支持的部分出了问题,而出问题的原因是,Ruby 1.8 对国际语言支持太差,于是 Ruby 1.9 里改进了对国际语言的支持,让我们这些说中文说日文说韩文总之就是不光说英文的用户可以过上更幸福的日子。等等,说好了是让我们过上更幸福的日子,可之前好好的中文支持现在不能用了这算什么事儿?

仔细看了一下代码,才发现这个东西改起来好像不是那么容易:之前的中文支持里很多处理方式都是基于“对国际语言支持太差”的事实做的,现在一下子换到一个“能更好支持国际语言”的平台下,很多之前的假定全都失效了。更何况我根本就不会 Ruby,要想把它改到能够正常运行可不是一件容易的事情,话说回来,Ruby 1.9 是 2007 年圣诞节当天发布的,算起来到现在已经快 7 年了,而 Ruby 1.8 在 2013 年 6 月 30 日的时候正式宣布停止技术支持,到现在也已经过了大半年了,担心有兼容性问题那早点测试早点解决去啊,非得到不能用的那一天才发现,早干什么去了?

好吧,实在不行我把 Ruby 1.8 装回来吧,到软件仓库里翻了一圈,才发现 Ruby 1.8 的包已经被删了。不过没关系,你删了那我到别的地方找来装就好。上网搜一搜,很容易就找到了塔尔羊版的 Ruby 1.8 包,哈哈,我装!咦,装不上?Ruby 1.8 冲突 Ruby 1.9,要装 1.8 就必须把 1.9 给卸了?那豁出去了,卸载 Ruby 1.9!咦,卸不掉?Ruby 1.9 是系统关键组件,卸载会导致系统无法工作?赶紧取消,好可怕!

看来正常安装 Ruby 1.8 是行不通的了,那就只能尝试一下非常规手段了,要不我源码编译一个 Ruby 1.8 装到自己家里的 .ruby1.8 底下好了,这样和系统里任何其它软件都不会冲突,爱怎么停止支持就停止支持吧!说干就干,三下五除二下载了 Ruby 1.8 源码,指定了一下安装路径,开始编译!咦,出错了,尝试着修改一下,继续编译,咦,又出错。把错误信息放到网上一搜,发现是因为系统里的 SSL 库升级了,而 Ruby 1.8 既然已经停止技术支持了,自然不会再去修改它的代码适应新的库的变化了。

把 Ruby 1.8 改到能够正常支持 SSL 库虽然理论上是可以做到的,但真要这么干的话,说实话我也不知道要耗费多少时间。转念一想,Deplate 完全不需要 SSL,不如我直接把 SSL 给禁用了得了,就省得折腾了。又经过一番不算漫长的编译和安装,我终于有了一份能正常使用的 Ruby 1.8。赶紧把 Deplate 装上试了试,运作正常,真好!

刚高兴了一小会儿,突然感觉有点不对劲:刚才编译不成功就是因为系统里的 SSL 库升级了,现在虽然我禁用了 SSL 勉强弄出了个能用的 Ruby 1.8,万一过几天系统里别的不知道啥的又升级了又把 Ruby 1.8 搞不能用了怎么办?再禁用一个组件么?一路禁用下去最后完全不能用了怎么办?自己手工编译出来的东西,是得不到技术支持的,因此出了任何问题都是自找的,这终究不是长久之计,还是得想办法迁移到代表先进生产力的平台下。

找来 Deplate 作者的联系方式,给他发了一封信,告诉他 Deplate 的中文支持在 Ruby 1.9 下不能用了,问他有什么办法。他很快给我回了信,说目前对移植 Deplate 到 Ruby 1.9 没兴趣,他想直接往 Ruby 2.1 下移植。说来也是,反正出问题的就是中文支持模块而已,他只会英语的,中文坏成什么样和他也没有关系,当然没有动力去修。不过他有移植计划总比没有好,但愿在我的 Ruby 1.8 彻底报废之前,能用上 Ruby 2.1 版的 Deplate 吧。

折腾了这么一圈,我算是理解了 XP 退休对于有些人而言意味着什么了。纵使落后的平台有千般不好,纵使阻碍社会进步是何等不应该,我们总是会不可避免地遇到一些东西无法迁移到代表了先进生产力的平台下。好在 Ruby 和 Deplate 都有源码,多少还能在没有技术支持的情况下自己折腾,但就算是这样,仍然要耗费好多周折。遇到那些手头上只有个安装程序的,那基本上就是悲剧了。毕竟再美妙的改进,都有可能会伤害到某些依赖旧特性的用户,不是么?