很多人应该还记得本世纪初的那场“千年虫”风波,从现在的眼光看来,那场风波似乎是雷声大,雨点小。说得直接一点,简直像是一场骗局似的:世界似乎以 相当平静的方式度过了1999年的门槛,并且在2000年一整年也没有引发什么值得关注的软件系统故障,根本没有发生千年虫问题的鼓吹者所宣称的那种简直 世界末日般的灾难场景。然而,预言家们往往是对的,只是在时间的准确性方面差了那么一点儿——这次,差了整整十年。
澳大利亚昆士兰州的银行系统,由于系统从2009年12月31日直接跳到了2016年1月1日,导致大量用户的信用卡提前失效。同时,各种定期交易也 陷入瘫痪,银行系统不得不紧急启用手工审核流程来处理巨潮般的交易流水。紧接着,德国银行协会(BdB)发表警告,说该协会下发行的高达3000万张银行 卡由于“千年虫延期十年发作的原因”而可能有部分功能无法使用。
中国也遭遇了类似的问题,但问题目前看来集中于出租车行业。据悉,安徽芜湖、新疆乌鲁木齐、湖北随州、辽宁沈阳和锦州等地的几万辆出租车的计价器忽然 在2010年1月1日出现了价格归零的故障。
问题并不限于业务运营系统,微软公司的Windows Mobile系统也出现了同样的“2016故障”。一个比较可笑的后果是大部分使用该系统的手机用户都在新年伊始就收到了“从未来发来的短信”,不过使用 某些时间授权的软件用户可就没那么幸运了,他们不得不联系厂商想法解决许可过期问题。比如赛门铁克小企业版本此前就遇到了在2009年12月31日晚上 11点59分以后发布的杀毒软件、反间谍软件和入侵检测软件更新都被认为是过期的问题,而常用的鲁大师软件更新前也出现了在2010年1月1日无法运行的 问题等。
2010问题从何而来?
千年虫问题看起来十分简单,但其背后的技术背景则是难以想像的复杂。在计算机系统中表示时间的方法,在业界缺乏统一的标准,各个厂商各自为政地实施了 很多时间表示方法于自己生产的系统中。由于时间在计算机的任何业务中都是基础性的,所以系统中用以表示时间的软硬件由于维护所带来的风险难以估计,所以基 本上不会被维护。
随着时间的推移,这些系统的其它部分都已经与时俱进,唯有时间表示模块一如其旧地数十年不变。但是,数十年前,计算机存储器的造价极为昂贵,所以为了 省却一些存储用量,一般厂商都想了一些办法把时间表示方法中的“年份”部分只存储少于一百年的部分,这样就可以不必使用要表示数千个状态的存储用量来表示 时间中的“年份”了。
但是,当时的系统设计师肯定无法预测的是,自己的短视设计会在几十年以后仍然成为最新系统的一部分。这样,一方面工程师的想法是“现在能省则省,反正 系统以后会被升级,当然也包括时间表示的这部分”,另一方面则是“时间表示模块实在太关键,谁也不要动它”。这两种设计和实践的冲突,是导致千年虫问题产 生的关键。
需要注意的是,千年虫问题并不一定非要在2000年、2010年这样的“整年”爆发,关键不在于物理时间,而在于计算机内部时间是如何表示的。只要内 部的时间表示发生了数字溢出、错位、清零等问题,千年虫问题就会现身。理论上说,千年虫问题在任何一个时刻都有可能以某种形式发生。其根本原因,是原先用 于表示10000种状态的年份的存储被压缩成了只能表示100种状态甚至更少的窄小空间中去了。从这个意义上说,“千年虫”其实应该叫做“百年虫”。
2010问题会影响多久?
2010年很可能作为软件系统的灾难年载入史册,因为很多软硬件系统只能表示30到40年的时间。这部分系统的到期时间就是从2010年开始的年份, 而在它之上构筑的任何软件都会遭遇时间相关的各种系统错误。
有些错误,表面上和时间毫无关系,但实际上是由于时间错误的传播效应引发的。这样的系统往往是从几十年前的系统发展而来,银行、证券和军用系统,是这 类软件的典型例子;或是存储极其受限的系统,比如手持设备、家用电器等。
比较幸运的是,现在的主流芯片厂商,如Intel、AMD和VIA,以及操作系统Windows(非移动设备版本)、Linux和Mac OS X都还暂时不会遇到类似的问题。不过,这并不意味着千年虫问题不会在个人电脑上大规模爆发,因为它们的设计也并未将时间表示标准化,并且也不能表示大范围 的时间。并且,应用程序如何处理时间,也是一个重要的问题。系统没有问题并不能保证应用程序没有问题,可以说,千年虫问题的影响是难以全面评估的,也是极 其深远的。
千年虫问题根本的解决方法,就是用较大的存储来存储年份,这对于现代的存储器来说,应该是游刃有余了。但是一个更大的问题就是现存的系统应该如何升级 以适应时间表示的变化,以及时间表示的标准化,这很有可能是千年虫问题难以在短期内解决的两个最大的障碍。