您的位置 首页 > 产业综合

虫之歌bug(20年前偷懒修复的千年虫bug归来)

今天给各位分享虫之歌bug的知识,其中也会对20年前偷懒修复的千年虫bug归来进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

二十年前,在千禧之年钟声敲响的时候,诸多Y2K应急队的程序员坐在电脑前惴惴不安,他们此前刚刚用最简单易行的“懒人方法”修补了一个被称为“千年虫”(MillenniumBug,又称Y2000problem,简称“Y2K”)的大bug。二十年后,这群程序员老了,但是新一代的青年程序员又要为老一辈的懒惰而付出代价。

据《纽约时报》报道,纽约的停车收费表从2020年1月1日开始不支持信用卡付款,整个城市的一万多个计费表已手动更新,仅通过现金或ParkNYC接受付款;波兰公司Novitus生产的收银机由于记录时间故障而无法打印收据;视频游戏WWE2K20于2020年1月1日午夜停止工作;华为手表和部分设备丢掉了新年伊始两三天的TrueSleep睡眠数据,需要更新并重启……

图|纽约市交通局表示,停车计时器的信用卡支付软件设定在1月1日失效,导致了一起大规模故障(来源:TheNewYorkTimes)

程序员JefPoskanzer在推特上发文:似乎有相当数量的系统出现#2020错误。当年解决Y2K问题的方案把这个问题推迟了20年……20年后的今天,当时的一些系统仍然还在使用,系统以为我们在1920年。”

图|JefPoskanzer的推文(来源:Twitter截图)

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

大约在20世纪80年代中期以前投用的系统上,囿于存储空间有限,再加上人们普遍觉得系统更新会很快,所以程序员大多采用两位数来表示年份,比如06/15/98,而不是06/15/1998。但是到了2000年,系统只知道是01/01/00,不知道这是1900还是2000。

千年虫主要集中在配备较早的主机系统上,如在IBM4381,IBMAS/400等机型上运行的应用程序,比如美国的AT&T电讯公司,其内部就有超过3.6亿行的应用程序需要检测是否存在Y2K问题。另外,在自动化仪器仪表、电梯、警报系统、恒温灯等嵌入式设备也容易存在千年虫隐患。

计算机在上世纪六七十年代开始普及,到九十年代,人们开始意识到问题的严重性:不知道从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开始,很多编程语言和系统都把日期时间以秒来处理,也叫Unixtime。因此,鉴于中点1970的重要性,编码人员选择1920到2020作为标准窗口。

Unixtime被广泛用于各种行业操作系统,并被视为是一种标准。Unix和Windows系统有环境变量来为系统设置“转折年”。“转折年”以后的任何一年属于本世纪,“转折年”以及“转折年”之前的任意一年属于上个世纪。但是一些产品,如MicrosoftExcel95使用的是1920-2020年的windowing,在解决千年虫问题之后,仅仅过20年就有可能再次出现日期错误。

图|2020年“Y2K”又回来了(来源:PopularMechanics)

当时的专家认为,等到程序员投入大量的资金和时间去永久修复好这些bug之后,系统早就被更换了。所以,尽管“windowing”修复的程序智能使用二三十年,专家也觉得足够了。

伦敦经济学院(LondonSchoolofEconomics)的迪伦?穆尔文(DylanMulvin)表示:“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问题。

OK,本文到此结束,希望对大家有所帮助。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023