计算机系|照这样下去,“千年虫”还得再来十遍( 二 )


在当时,有两种修复的思路:
1)全盘重写所有系统的代码,称为“expansion”;
2)打个快速的补丁,让计算机能够将从00到20的数字,正确识别为2000年到2020年——这种方式也被称为“windowing”.
具体来说,这个补丁让计算机系统将1970年1月1日0时0秒(也即程序员都非常熟悉的 Unix 时间戳)作为百年“时间窗口”的中间点,也即从1920年到2020年的任何一个时间点,在计算机系统里都可采用其到 Unix 时间戳的距离作为表示方法。
“高性能计算机新闻网”的一篇发布于1999年的报道显示,在当时,大约有八成的系统最后都是用第二种快速补丁的方式修复的。相比一劳永逸的全盘重写,快速补丁的方式的成本优势非常明显,然而即便如此,全世界的预估修复成本加起来也高达3000亿美元……
计算机系|照这样下去,“千年虫”还得再来十遍
文章插图
当面临一个足够大的问题的时候,相信一般人的正常反应,都是“这个问题迟早得彻底解决”,并且也会倾向于一劳永逸地解决问题。
然而在当时,人们没有选择一劳永逸,而是选择了打补丁,还有另一层考虑,也即:这些系统已经足够老了,在未来的20年里总是要还的,所以没必要一劳永逸的重写了,反正到时候换新系统的时候,把日期时间的问题搞好,不就行了。
对此,伦敦经济学院的 Dylan Mulvin 教授表示,“Windowing 即使在当时也是所有可选方案中最差的一个,它就是把皮球踢给后人的做法。”
果不其然,当新系统替代旧系统的时候,当年的编程思路,仍然被继承了下来了……
事实上,到了2020年的时候,一些千年虫修复过的系统,以及新安装的系统,都又一次出现了和千年虫几乎一样的问题:Y2K20 bug.
比如,在当时有些用户惊讶地发现,他们从宽带公司收到的账单显示日期为1920年:
计算机系|照这样下去,“千年虫”还得再来十遍
文章插图
游戏公司 2K 开发的摔角游戏《WWE 2K20》,也在游戏标题里这一年的第一天的第一秒就宕机了:
计算机系|照这样下去,“千年虫”还得再来十遍
文章插图
当时纽约市的很多停车自动缴费机,也因为系统时间错误而触发了防火墙机制,无法接受信用卡支付:
计算机系|照这样下去,“千年虫”还得再来十遍
文章插图
结果你猜怎么着?这些故障,很快就被修复了。
至于他们采用了哪种思路——是一劳永逸,还是快速补丁——你应该也能猜出来了……
如果说人类一定有什么做不到的话,那一定是从历史中吸取教训。
紧接着,Y2K21 bug 又来了。比如,去年美国气象局 (NWS) 的官方数据库出现了重大误差,对外提供的接口的数据晚了足足一天,导致很多第三方机构的天气数据都出现了错误,影响了民航、海洋捕捞、畜牧养殖等诸多行业的正常运作。
计算机系|照这样下去,“千年虫”还得再来十遍
文章插图
也有一些普通用户发现,自己的电脑梦回1921年了:
计算机系|照这样下去,“千年虫”还得再来十遍
文章插图
再然后,2021年也翻篇了,Y2K22 bug 也毫无悬念地按时来到了……
除了这次微软 Exchange Server 出了故障之外,一些本田车主也发现,他们的车每天早上启动都会把时间自动跳回到2002年。
汽车专业人士调查分析发现,本田车载系统的问题原因和微软一样,都是出在 Int32 整数上,开头22的字符串无法被读取,在本田这里就变成时间回退到2002年了……从2004到2012年的上百款车型都有较高几率遇到此问题。