资讯正文

20年前偷闲修正的千年虫bug归来程序员该来的总会来

放大字体  缩小字体 2020-01-11 22:23:18  阅读:591 作者:责任编辑NO。卢泓钢0469

新的十年开端了。二十年前,在千禧之年钟声敲响的时分,许多 Y2K 应急队的程序员坐在电脑前忐忑不安,他们此前刚刚用最简单易行...

新的十年开端了。

二十年前,在千禧之年钟声敲响的时分,许多 Y2K 应急队的程序员坐在电脑前忐忑不安,他们此前刚刚用最简单易行的 “懒人办法” 修补了一个被称为“千年虫”(Millennium Bug,又称 Y2000 problem,简称“Y2K”)的大 bug。二十年后,这群程序员老了,可是新一代的青年程序员又要为老一辈的懒散而付出代价。

据《纽约时报》报导,纽约的泊车收费表从 2020 年 1 月 1 日开端不支持信用卡付款,整个城市的一万多个计费表已手动更新,仅经过现金或 ParkNYC 承受付款;波兰公司 Novitus 出产的收银机因为记载时刻毛病而无法打印收据;视频游戏 WWE 2K20 于 2020 年 1 月 1 日午夜中止工作;华为手表和部分设备丢掉了新年伊始两三天的 TrueSleep 睡觉数据,需求更新并重启……

图 | 纽约市交通局表明,泊车计时器的信用卡付出软件设定在 1 月 1 日失效,导致了一同大规模毛病(来历:The New York Times)

程序员 Jef Poskanzer 在推特上发文:好像有适当数量的体系呈现 #2020 过错。当年处理 Y2K 问题的计划把这样的一个问题推迟了 20 年……20 年后的今日,其时的一些体系依然还在运用,体系以为咱们在 1920 年。”

图 | Jef Poskanzer 的推文(来历:Twitter 截图)

千禧年前后出世的青少年们或许很少有人知道“千年虫”。

大约在 20 世纪 80 时代中期曾经投用的体系上,囿于存储空间有限,再加上人们遍及觉得体系更新会很快,所以程序员大多选用两位数来表明年份,比方 06/15/98,而不是 06/15/1998。可是到了 2000 年,体系只知道是 01/01/00,不知道这是 1900 仍是 2000。

千年虫首要会集在装备较早的主机体系上,如在 IBM 4381,IBM AS/400 等机型上运转的应用程序,比方美国的 AT&T 电讯公司,其内部就有超越 3.6 亿行的应用程序需求检测是不是真的存在 Y2K 问题。别的,在自动化仪器仪表、电梯、警报体系、恒温灯等嵌入式设备也简单存在千年虫危险。

视频 | Y2K 启示录(来历:YouTube)

核算机在上世纪六七十时代开端遍及,到九十时代,人们开端意识到问题的严重性:不知道从 1999 年最终一天的 23:59 到 2000 年第一天的 00:00 的改变意味着什么?在烘托和炒作下,群众的惊慌程度不亚于“2012”。人们猜想,假如程序中止运转、溃散或许宣布过错指令,是否影响到银行、电站、航线等等,存款会一夜清零、恐怖袭击、飞机掉落、股市溃散,国际堕入紊乱?

其时甚至有新闻媒体报导,有人把山洞作为避难所,存储了许多食物、医疗包等必需品,还有一些人把银行存款纷繁取出来或许是购买黄金。

图 | 1999 年 1 月 18 日,TIME 的封面(来历:Time)

为了尽最大或许防止 “灾祸” 发作,政府和企业动用许多资源查找和修正这个 bug。有报导显现,其时克林顿政府和业内人士估量,用 “windowing” 的方法修补 80% 的核算机,估计耗资数千亿美元。BBC 报导以为全球花在防范千年虫上的费用在 3000 亿到 5000 亿美元之间。实在耗资现在无法考证。也有言论说千年虫是个商业大圈套。

其时修正 bug 的方法有两种:彻底重写代码,或许选用 “windowing” 的方法快速修正。“windowing”便是把 00 到 20 之间的一切日期都作为 20XX 年而不是 19XX 年。很显然,比较于把一切两位数表明的年份都修改成四位数,后一种方法更省钱、更快并且更简单。

从 1970/01/01 开端,许多编程语言和体系都把日期时刻以秒来处理,也叫 Unix time。因而,鉴于中点 1970 的重要性,编码人员挑选 1920 到 2020 作为规范窗口。

Unix time 被大范围的运用在各种职业操作体系,并被视为是一种规范。Unix 和 Windows 体系有环境变量来为体系设置 “转折年”。“转折年” 今后的任何一年归于本世纪,“转折年”以及 “转折年” 之前的恣意一年归于上个世纪。可是一些产品,如 Microsoft Excel 95 运用的是 1920-2020 年的 windowing,在处理千年虫问题之后,只是过 20 年就有或许再次呈现日期过错。

图 | 2020 年 “Y2K” 又回来了(来历:Popular Mechanics)

其时的专家以为,比及程序员投入许多的资金和时刻去永久修正好这些 bug 之后,体系早就被更换了。所以,虽然 “windowing” 修正的程序智能运用二三十年,专家也觉得足够了。

伦敦经济学院 (London School of Economics) 的迪伦 穆尔文 (Dylan Mulvin) 表明:“windowing 是一切处理计划中最糟糕的一种,即便是在千年虫问题期间。”

2020 年的到来,意味着咱们已进入到了 1920-2020 窗口期的结尾。2019 年 11 月,因为被发现简单遭到 Y2020“进犯”,大数据公司 Splunk 向用户推出了修正服务,它的用户涵盖了美国《财富》一百强公司中的 92 家。因为各家公司没有发表相关细节,现在还不清楚 “Y2020” 将继续多久

别的,在 2038 年咱们将面对另一个数据存储问题。32 位的 Unix 和 Linux,能存储的最大数字为 2 的 31 次方,即 2147483647。从 1997 年开端核算,2147483647 用来表明的秒数最多只能用到 2038 年 01 月 19 日 03 时 14 分 07 秒,在这个时刻之后,体系会回到 - 2147483648,代表的时期是 1901 年 12 月 13 日 20 时 45 分 52 秒。

不同于千年虫,2038 会影响的不单单是应用层,而是会影响到最底层的时刻操控功用。不过走运的是,假如能在 2038 年之前把一切 32 位体系筛选并选用 64 位的话,咱们将会奇妙地躲开 2038 问题。

-End-

参阅:

https:///article/2229238-a-lazy-fix-20-years-ago-means-the-y2k-bug-is-taking-down-computers-now/