新的十年已经开始。二十年前,当千年钟声敲响之时,许多千年虫应急小组的程序员们焦急地坐在电脑前。一个被称为“千年虫”(MillenniumBug,又称千年虫问题,简称“Y2K”)的大虫子。二十年后,这群程序员老了,但新一代的年轻程序员不得不为老一辈的懒惰买单。据?报道,从2020年1月1日起,纽约停车收费表将不再支持信用卡支付,全市超过10000个收费表已手动更新为仅接受现金或ParkNYC付款;波兰公司Novitus生产的2020年收银机因记录时间故障无法打印收据;视频游戏WWE2K20于2020年1月1日午夜停止运行;华为手表和一些设备在新年伊始丢失了两三天的TrueSleep睡眠数据,需要更新和重启……NYCDOT表示停车收费表的信用卡支付软件在1月1日出现故障,导致大规模中断(来源:纽约时报)程序员JefPoskanzer在推特上写道:系统上似乎出现了相当数量的#2020错误。当年Y2K问题的解决方案把问题推迟了20年……20年后,当时的一些系统还在使用,系统认为我们是在1920年。”JefPoskanzer的推文(来源:来自Twitter的屏幕截图)在千禧年左右出生的青少年中可能很少有人知道Y2K问题。在80年代中期左右投入使用的系统上,存储空间有限,另外,人们普遍认为系统更新很快,所以大多数程序员用两位数字来表示年份,比如06/15/98而不是06/15/1998。但是2000年,系统只知道是01/01/00,不知道这是1900还是2000。千年虫主要集中在较早的主机系统上,如运行在IBM4381、IBMAS/400等机型上的应用程序,如美国AT&T电信公司,其应用程序超过3.6亿行。检查Y2K问题。此外,自动化仪器仪表、电梯、报警系统、恒温灯等嵌入式设备也容易出现Y2K隐患。视频Y2KApocalypse(来源:YouTube)计算机在1960年代和1970年代开始流行。20世纪90年代,人们开始意识到问题的严重性:从1999年最后一天的23:59到2000年的第一天,这一天的00:00班次是什么意思?夸大炒作之下,大众的恐慌程度不亚于《2012》。人们猜测,如果程序停止运行、崩溃或发出错误指令,会不会影响银行、电站、航空公司等,存款一夜清零,恐怖袭击,飞机失事,股市崩盘,世界将崩塌陷入混乱?当时甚至有媒体报道称,有人将山洞当做避难所,存放了很多食物、医疗包等必需品,还有人拿出银行存款或购买黄金。TIME封面,1999年1月18日(来源:Time)为了避免“灾难”,政府和企业投入了大量资源来查找和修复这个bug。据报道,克林顿政府和业内人士当时估计,要给80%的电脑打上“开窗”补丁,将耗资数千亿美元。BBC报道称,全球应对Y2K的成本在3000亿至5000亿美元之间。实际成本目前无法核实。也有人说Y2K是一个商业大骗局。当时有两种修复错误的方法:完全重写代码,或者使用“窗口化”快速修复。“windowing”是将00到20之间的所有日期都视为20XX而不是19XX。显然,后一种方法比将所有两位数年份改为四位数年份更便宜、更快捷、更容易。自1970/01/01以来,许多编程语言和系统都以秒为单位处理日期时间,也称为Unix时间。因此,鉴于中点1970的重要性,编码人员选择1920年至2020年作为标准窗口。Unix时间广泛用于各种行业操作系统,被认为是一种标准。Unix和Windows系统都有环境变量来设置系统的“过渡年”。“转年”之后的任何一年都属于本世纪,“转年”和“转年”之前的任何一年都属于上个世纪。但有些产品,如MicrosoftExcel95,使用的是1920-2020的窗口,解决了Y2K问题后,只有20年的时间,日期错误可能会再次出现。“Y2K”回到2020年(来源:大众机械)当时的专家认为,等到程序员投入大量金钱和时间永久修复这些bug时,系统早就被替换掉了。因此,虽然“开窗”修复程序被巧妙地使用了二十、三十年,但专家们觉得已经足够了。“开窗是最糟糕的解决方案,即使在Y2K期间也是如此,”伦敦经济学院的DylanMulvin说。2020年的到来,意味着我们进入了1920-2020窗口期的尾声。2019年11月,在被发现容易受到Y2020“攻击”后,大数据公司Splunk向用户推出了修复程序,其中包括美国100强公司中的92家。目前尚不清楚“Y2020”将持续多久,因为这些公司尚未披露细节。此外,在2038年,我们将面临另一个数据存储问题。对于32位的Unix和Linux,最大可以存储的数是2的31次方,即2147483647。从1997年开始算,2147483647使用的秒数最多只能用到1月的03:14:072038年19月19日,过了这个时间,系统会返回-2147483648,代表1901年12月13日20点45分52秒的时间段。与千年虫不同,2038影响的不仅仅是应用层,还有最底层的时间控制功能。不过幸运的是,如果我们能够在2038年之前逐步淘汰所有32位系统并采用64位系统,我们将巧妙地避开2038年的问题。
