返回档案库

案例库 · 软件与 IT · 技术决策 · 1960s–1999

两个数字每条记录省下几字节,却让全世界花了 3000 亿美元来补救

用「99」代替「1999」在内存昂贵的年代很合理。四十年后,把另外两个数字补回来,全球花了 3000 亿美元。

美国政府 · IEEE · 1999-12-31

怎么回事

几十年来,把年份存成两位数是很正常的工程选择。内存和磁盘都贵,这个约定几乎通行无阻,程序员也都知道这些系统在 2000 年前早就该被替换掉。可它们没有被替换,代码进了工资、计费、空管、电网和银行账本里,一直留到最后。

到了 1990 年代,已经没人知道这些代码到底散落在哪里。修复意味着去审计那些二十年没人读过的代码,在原作者早已离职的语言里,找出每一个把年份存短了的地方。全球补救持续了好几年,估算花费 3000 亿美元,是有史以来最大规模的协同软件修补。

到了午夜,几乎什么都没坏,争论立刻开始:这笔钱是不是白花了。这种说法本来就没法证伪,因为被阻止的故障不会留下证据。没有争议的是账算得明白——每个日期少存两个字节,累积四十年记录,最后得花 3000 亿美元把它们加回来。

为什么会这样

  • 一个出于节省存储的优化,被比它寿命更长的代码永久化了。
  • 这种做法太普遍,没有哪个单一负责人去撤掉它。
  • 没人留下日期到底存在哪里的清单,所以修复先从盘点开始。
  • 最后期限不能往后拖,结果也就没法慢慢改。
代价超过 3000 亿美元,用来把两个数字补回去代价高昂

教训

因为系统迟早会被替换才采取的偷懒,往往会在它没被替换时变成永久包袱。先给退出路径标价,再决定要不要走这条路——账单会在别人的截止日前找上门。

后来呢

到午夜时几乎没有系统出问题,正因为没出问题,才有人拿这个反过来质疑支出——这就是预防的悖论。修复过程中留下了很多机构第一次完整的系统盘点,而 2038 问题,也就是 32 位时间戳里的同类 bug,早就被发现,也早就被写上日期。

资料来源

发现哪里写错了?告诉我们。

Comments · 0

    登录 后就能评论。

    类似的案例

    这家公司栽倒的地方,别处有人漂亮地解开过。 第二意见 →