2000错误的历史

在90年代后期,世界担心即将发生故障的计算机系统。专家恐吓说,在2000年开始时,该软件将无法正确处理日期,世界将陷入混乱:支付系统将关闭,交易将停止,任何电子产品都将发生故障。实际上,新世纪没有任何问题,经验是徒劳的。



这就是公众意识如何看待2000年的错误。例如,英国脱欧政治家表示,对脱欧角色的经济影响的担忧与Y2K错误恐慌相似。



千年错误几乎在2000年后就被遗忘了。即使在非核心出版物中,他们也讨论了2000年的Y2K错误,但是在新年的第一天,对这个主题的关注就消失了。从1999年到2000年数量惊人的变化并没有造成如此可怕的灾难。怀疑论者宣布,这笔钱浪费在修复漏洞上。



幕后发生的事情比非专家的观点更为重要。公众的恐慌程度确实超出了应有的水平。2000年1月1日,全球计算机故障的真正危险已经存在,需要软件开发人员的干预。程序员的整个部门多年来一直在解决Y2K问题。



问题根源



在日常生活中,我们不会写一年中的前两个字符-它们几乎总是相同的。类似的逻辑规定了在早期计算机的驱动器上节省空间的规则:如果世纪不重要,则可以将其丢弃。日期用六位代替,而不是八位。节省的资金似乎很少,但是如果有数百万个日期,那么账单将转到兆字节的内存,而第一台计算机很少。







1958年出版的《打孔卡在科学和工业中的应用》一书主要涉及机电打孔卡读取器。在标准的IBM打孔卡上进行参考书目。第15和16栏显示了出版年份的最后两位数字。在另一段中,这本书激发了选择较短的年份格式,以便大多数条目用于20世纪。



该人于XX20年1月1日出生,并于XX20年1月2日死亡。他是过着充实的生活,还是生完孩子后突然死了?没有背景就不可能确定这一点,因此我们将再次询问是否有异常的长肝或婴儿死亡。同样,在未指定世纪的情况下,计算机也无法区分2000和1900。这是Y2K错误的本质。



一个简单的例子:银行卡上的到期日期以MM / YY表示,一些最简单的付款系统算法通过对YYMM编号进行算术比较来检查到期。这种算法的反例是任何在2000年之后有效的卡。在1999年,天真的算法会使失效日期为12/01的卡失效,直到2001年12月。



缩短世纪的坏习惯一直持续到九十年代后期,这似乎很奇怪。人们常说,问题的根源是最早的计算机和编程语言的特里遗产,由于某种愚蠢的原因,它们在近40年中一直没有变化。这只是部分正确:计算机时代的曙光首先奠定了仍然存在的开发传统。例如,现代开发环境的宽度超过了80列打孔卡,但是三个月前才从Linux删除了每行代码的80个字符限制



即使到了七十年代后期,商业计算机的特征仍然适中。同时,他们已经被要求在自动化中具有实际应用。大型机每秒要有90万次操作,需要1.5 MiB的RAM和2 GiB的磁盘存储,因此必须每小时从300-500个并发用户中挤出20,000个事务。这些脆弱的计算机要花费数十万,数百万美元。只有到1990年,数据的硬盘上的技嘉下跌港币$ 80以下万。



但是,并非每个企业都能负担得起旗舰级S / 360S / 370S / 390系列。对于小型客户,IBM开发了计算机S / 3S / 32S / 34S / 36S / 38AS / 400具有中等得多的特性。IBM System / 32商用计算机的硬盘最大容量 为13兆字节,您不仅需要容纳代码,还需要容纳数据。







单用户计算机IBM System / 32,1975年。带六行屏幕的机器专为会计级别的任务而设计。照片:计算机历史博物馆



在这种情况下,XML或JSON级别的暴涨根本就不会出现。有哪种文本格式-帐单转到每个字节。



同样,日期是用最古老的业务应用程序编程语言之一Cobol编写的。此处YY是年份的两位数字,MM是月份的数字,DD是日期。



01 EMP-HIRE-DATE.
     03 EMP-HIRE-DATE-YY    PIC 99.
     03 EMP-HIRE-DATE-MM  PIC 99.
     03 EMP-HIRE-DATE-DD   PIC 99.


这里的日期表示为3个字节,每个数字4位。 Cobol非常古老,以至于其中的数字都是十进制的(除非另有说明,否则USAGE IS COMPUTATIONAL)。



Cobol中没有标准化的日期字段,但是自写实现仍然受某些指导。该代码ACCEPT todays-date FROM DATE以6位数的YYMMDD数字返回当前系统日期。如果将它与上面演示中的数字进行比较,那么很容易理解这一天是否到来。 CENTURY-DATE函数将日期以带世纪的8位数字YYYYMMDD返回,将在以后的语言标准中出现



通过YYMMDD格式的日期进行排序很方便:将之前发生的情况的比较简化为算术运算。



随着新世纪的到来,排序将中断:00年必须晚于99年,反之亦然。编号000101将小于991231,即在2000年1月1日,程序将说1999年12月31日尚未到来。尝试计算这些日期之间的时间间隔将返回将近100年,而不是1天。



即使升级较旧的系统,日期格式也不会更改,以保持与现有数据库和其他组件的兼容性。程序员认为他的软件不会在20-30年后使用。对他来说,“ 2000年的错误”听起来比我们“ 32位Unix时间的溢出”还要遥远。后者将在2038年发生,并且仅在5.6内核之后才在Linux中为32位系统修复。但是由于某些原因,我们不急于更新旧路由器。



“怪罪”的部分原因在于二进制十进制代码BCD的泛滥,其中十进制数字的每个数字将以4位写入。二进制十进制代码是由于在四舍五入数字时的速度和可预测性而在银行业的普及所导致的,在这种情况下,0.1 + 0.2答案是0.30000000000000004不可能的。当出现二进制浮点数的舍入伪像时,会计师和金融家会有些紧张。因此,用于业务应用程序的处理器支持本机BCD处理,并且很少需要在表示形式之间转换数字。



6位数字的日期可以容纳3个字节。当然,将日期转换为单个二进制整数更为安全。但是转换将需要复杂的数学运算:这是长周期或表格。这比在线性时间内将BCD转换为十进制代码更加困难,有时甚至使用芯片制造商提供的单条机器指令也是如此。 BCD仅向日期记录添加1-2个额外的字节,但是消除了5-10条汇编指令,这些指令难以理解并且容易引起混淆。



在八十年代,壁橱大小的商业应用程序世界中的程序员正在转向台式个人计算机,但保留了这种想法。在早期的8位和16位个人计算机上,它们受到熟悉的硬件BCD支持的欢迎。



最后,一些与日历有关的问题。如果2000年是a年(可以被400整除),则1900年不是。在实际的2000年是2月29日。如果计算机计算出院子中的时间是1900,则2月28日之后,3月1日将立即到来。



预警



加拿大程序员彼得·德·杰格吸引了公众对世纪之交错误的关注。 1978年,他当时是IBM的雇员,他注意到一台计算机在1900年可能取两个零。管理层驳回了彼得的抱怨:为什么要考虑一个在未来22年内不相关的问题?他被告知,到2000年,错误肯定会得到纠正。



到1989年,情况没有改变。当时,de Jager在一家部署Professional Office Systems的公司工作。 1990年1月1日,系统“病倒”:附录中为该年度分配了一位数字。为了进行实验,彼得再次想起2000年,他将个人计算机上的时间偏移了几分钟,直到1999年12月31日午夜。十分钟后,日期更改为1984。



在1993年,de Jaeger为Computerworld写了三页的文章,从此开始了这一切。标题“ Doomsday 2000”(2000年世界末日)引起了人们的关注。最初,人们并没有认真对待即将发生的灾难的丰富多彩的描述,但是随着2000年的临近,de Jager获得了数字世界末日大战的专家的声誉。从那时起,彼得就专门处理日期问题。《时代》杂志







封面,1999年1月18日



但是,已经注意到该行业中日期处理的怪异之处,没有任何文章。领导德勤咨询公司Y2K错误修复团队的马丁·托马斯(Martin Thomas)描述了英国杂货连锁店是如何在1980年代后期收到一批罐装食品的。会计系统将1900年1月的到期日期定为01/00,并要求处置80岁的流动性不佳。



1997年中,克莱斯勒将斯特林高地装配厂的所有工作时间转移到了1999年12月31日进行测试,这带来了很多惊喜。无法支付工资。安全系统只是关闭了:没有人可以进入或退出。



到本世纪末,公司拥有的工程师团队只能分析和修复Y2K错误。这个问题甚至被带到了州际层面:在1998年八国集团峰会上,所有参与者都同意存在漏洞的危险。 1998年10月19日,美国总统通过了2000年信息和就绪披露法。在俄罗斯,Y2K兼容性问题由国家通信和信息化委员会和一个专门的政府委员会处理。



并非没有恐慌。在整个90年代,美国人意识中都存在着世界末日场景的流行。记者和作家们开始热情地为数字世界末日画一幅画。甚至大型和有信誉的新闻媒体建议补充水和食物







Y2K后置文件夹以及为家庭主妇提供建议的元素有关Y2K错误的



文献,从详尽的生存指南到全球计算机崩溃后有关世界的小说小说不等。小说作品描绘了一个可怕的未来。 1月1日,降水以客机的形式从天上掉下来,每个核电站都有当地的切尔诺贝利核电站。家用电器爆炸,全球金融体系崩溃,电网和电话中断。然后,从这些因素中,构想出一个场景,将文明压抑性地分解为一个饥饿,半封建的社会,那里有猖ramp的暴力有组织犯罪。









伦纳德·尼莫伊Leonard Nimoy)主演的短片利用了流行的Y2K对错误主题的恐惧,这本生存主义者的手册详细介绍了如何摆脱文明的衰退。他们几乎没有说过要解决此错误的内容,也没有讨论过有关2000错误的理论的问题。相反,在银行关闭和失业猖after之后,这些书直接变成了恐怖故事和对世界的建议。有人只是建议购买黄金。其他人则花了很多页面列出需要紧急库存的物品和资源。



但是,正如书店的工作人员所记得的那样,这种文学在2000年问世后并不流行,并且从书架上消失了。



由进取的商人试用的Y2K Survivor Kits至少具有一定的实用价值。不管计算机数据的格式如何,干粮都将保持其营养价值,即使它们以虚高的价格出售,也试图摆脱歇斯底里的浪潮。







来自科罗拉多州的2000年启示录就绪家庭



修复类型



两个数字相加可以解决8000年的问题。



01 EMP-HIRE-DATE.
     03 EMP-HIRE-DATE-YR.
          05 EMP-HIRE-DATE-CC    PIC 99.
          05 EMP-HIRE-DATE-YY    PIC 99.
     03 EMP-HIRE-DATE-MM  PIC 99.
     03 EMP-HIRE-DATE-DD   PIC 99.


但是Cobol中的记录长度是有限的。如果需要在中间插入两个字节,则必须从头开始将整个文件重写为一个新文件,然后将原始文件替换为正确的副本。处理该文件的应用程序代码也将需要调整。该过程保证了长时间的测试和关闭。数据库并非总是可能像这样慢下来。



对程序代码进行相对较小的更新并不那么优雅,并且仅增加了几十年的生命,但耗时较少。即使年份少于50,也已经是二十一世纪了。



IF EMP-HIRE-DATE-YY > 50
   MOVE 19 TO PRINT-HIRE-DATE-CC
ELSE
   MOVE 20 TO PRINT-HIRE-DATE-CC.


并非所有数据都假定不可能有1950年之前或2050年之后的日期。在某些情况下,此类“拐杖”仅将使用寿命延长20年。它变成了今年一月:有人从1920年收到的账单,一些软件无法正常工作。







一个错误的收据来到在一月2020.In之初



某些情况下,2000年已得到纠正直到10,000,但对于9个世纪。如果将3个字节的日期存储在一个4位带符号的数字中,则将一个数字放入未使用的半字节中以签署世纪。带有此修补程序的程序受2100年或2900年的影响。



日期可以表示为从过去某个点过去的天数。天数以14位二进制数记录。因此,您可以想象16 384个不同的年份。具体限制由时代的选择决定。



有时一年根本没有更正。北美航空航天防御司令部的TLE格式描述了地球轨道上的物体。到现在为止,只显示一年中的最后2个字符。令人奇怪的是,这种情况可能会受到卫星互联网公司的间接影响,这些公司计划将成千上万的航天器送入轨道。 TLE是为五位数的对象而设计的,因此要耗尽数字池,将需要修改整个数据格式。



军事硬件补丁的细节是秘密的,这是可以理解的。多数情况下,媒体发布了使用模拟器和特殊测试环境成功完成Y2K准备测试的报道。有时会进行全面的战斗测试。 1999年5月1日,美国海军发射了“战斧”巡航导弹。发射的前一天,火箭时间定为2000年2月29日,以便同时检查the年的处理方式。







到2000年,设备准备就绪的简洁标签



但是,资深程序员退休后并没有大规模返回。公司往往没有像预期的那样招募大量的空想主义者,而是将公司局限于全职工人或外包修理。为准备2000年,美国公司已向Infosys,Wipro和TCS的低成本劳动力投入了数十亿美元。Y2K的意外结果是印度公司的普及。在未来的几年中,印度外包将成为常态。



1999年12月31日23:59:59之后的生活



只有7%的美国人非常担心Y2K错误。 1999年12月的一项民意测验显示,只有五分之一的人计划用现金储备股票。有人害怕在一年的最后一天飞。彼得·德·杰格(Peter de Jager)说,他于12月31日飞行以展示补丁的安全性。



1月1日上午,“令人不愉快”感到惊讶。没有停电,金融交易仍在定期进行,计算机漏洞没有启动ICBM。废物计数立即开始。尽管贾格本人估计全世界的损失在300-4000亿美元之间,但确切的数字很难说出来。他说,一些银行的支出高达1亿美元。



批评仍然有基础。委员会和专家都夸大了这一承诺,并承诺将无法实现。



世界并没有因为微妙的微电路而陷落,在微电路中,用两个字符表示年份。其中包括一些计算机和许多微控制器的BIOS芯片。恐怖故事声称,它们太多了,一切都无法替代。实际上,Y2K专家通常没有硬件开发经验-充其量是他们了解软件。他们认为在这些微电路上根本不会发生日期的转换和比较。







Geek Squad的Fifties B电影风格的Y2K海报计划在公交车站张贴,但根本不需要额外的营销。照片:百思买



另一个令人恐惧的情况涉及开发一系列故障,从一个程序传播到另一个程序,再扩展到支持Y2K的组件。实际上,如果一个子系统错误地返回了1900年,则与之交互的另一个子系统将进一步超过1900年,或者给出错误,或者将年份标记为不正确。



不难想象,由于2000年2月29日的leap日未记录,飞机已经准备好接受Y2K攻击并容易受到2000年飞行漏洞的影响,因此飞机获得了计算机的许可,可以降落在同一车道上。但是在Web应用程序中,一个不正确的数据库条目将不会像病毒一样开始在系统中四处走动。



外行既没有感觉到要准备一个错误,也没有感觉到世纪之交的技术支持团队不眠之夜,也没有感觉不到未安装系统的后果。 Y2K消除小组的目击者和领导人回想起了小毛病,但没有什么灾难性的,甚至没有什么特别有趣的。其中一些涉及修复该错误的原因是,崩溃报告的数量很少是因为公司根本不想大肆宣传自己的故障。



一些问题仍然泄露给媒体。这只是一些计算机崩溃。他们都没有威胁到生命。



  • . , . . . .
  • - . Y2K, .
  • . CyberCash.  — . Apple. 700 .
  • . , . Golden 1 Credit Union 31 1999 .
  • 桌面软件供应商通常只修补较新的版本。例如对于Access版本2.0(1994)和更早版本不能正确处理2000年之后的日期。后者对于Windows 3.0用户而言不令人满意,在Windows 3.0中,较新版本的Access表现较差。另一方面,该操作系统当时已经不可用。


除了一些小问题,媒体还报道了一些奇怪的案件。



  • 丹麦2000年的第一个新生儿注册为100岁。
  • 纽约的一个视频租赁客户准时归还了《将军的女儿》的录像带,但因拖延了一个世纪而被罚款91,250美元。该错误被立即修复。
  • 1899年12月30日的600万美元转帐汇入了德国居民的银行帐户。关于他作为百万富翁坚持了多久,历史一直保持沉默。
  • 受到2000错误的影响的警察系统使青少年变成了老人。犯罪报告称,一名80岁的男子和两名失踪的分别为83岁和84岁的少年对一名83岁的妇女进行了性骚扰。


由于Y2K错误,至少存在一个严重的医疗错误。2000年后的几个月,在英格兰的一个地区,人们发现患有唐氏综合症的儿童人数异常多。该评估程序错误地估计了154名孕妇的年龄,并错误地确定了随后进行羊膜穿刺术研究的危险人群。总体上,低风险组定义不正确的母亲有4名唐氏综合症患儿。由于对高风险的评估不正确,因此错误地进行了2次流产。






在新的千年中,全世界立即忘记了处理日期的计算机错误。只有贴在准备迎接新世纪的设备上的“符合Y2K标准”的贴纸使他想起了。



从表面上看,2000年的错误与卢布下跌时将兑换处的显示从四个字符更改为五个字符几乎没有什么不同。将日期调整为四位数似乎是一个很小的尝试,尽管代价不菲,在整个经济范围内都是如此。



为纠正错误,已花费了数千亿美元。没有明显的灾难性后果,Y2K修补工作看上去多余且不必要地昂贵。专家们借口说这个问题存在并且已经解决。一些人只是对公众对关键基础架构和升级的关注感到高兴。



标志结束时发生的事件已经发生,将来会继续发生。从IPv4过渡到IPv6网络旨在消除世界上Internet地址的短缺。总有一天,电话号码会再增加一位。对于未打补丁的Unix系统,2038年1月19日将是1970年1月1日,或者由于使用带符号变量而将是1901年12月13日。



任何信息项目都有局限性。但这不应该害怕。如果系统超出其固有假设,则仅表明其计划外的普及。







基于从材料堆栈交易所堆栈溢出,国防部档案美国商务部(12),CelesTrak(12大众机械克里斯·韦斯顿的博客如何到野人心理肉松BBCcs.swarthmore.edu快速公司Inc.com计算机世界的Cnet石板



All Articles