IT天空

 找回密码
 加入我们

手机号码,快捷登录

搜索

[新资讯] 20年前偷懒修复的千年虫bug归来 程序员:该来的总会来

[复制链接]
Lacy 发表于 2020-1-12 16:58:05 | 显示全部楼层 |阅读模式

IT天空 定制版高速U盘 64G/128G/256G | 固态U盘 256G Pro/512G Pro


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

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

1 (1).jpg


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

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

1 (2).jpg


  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".人们猜测,如果程序停止运行、崩溃或者发出错误指令,是否影响到银行、电站、航线等等,存款会一夜清零、恐怖袭击、飞机坠落、股市崩溃,世界陷入混乱?

  当时甚至有媒体报道,有人把山洞当做避难所,存储了很多食物、医疗包等必需品,还有一些人把银行存款纷纷取出来或者是购买黄金。

1 (3).jpg


  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 年就有可能再次出现日期错误。

1 (4).jpg


  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 问题。















原文链接:https://www.cnbeta.com/articles/tech/931651.htm
最近访问 头像模式 列表模式
fudashuai 发表于 2020-1-12 19:41:13 | 显示全部楼层

活跃 9660| 技术 0| 互助 0| 钻石 0

还有这种错误出现?!
hchh17 发表于 2020-1-13 09:37:24 | 显示全部楼层

活跃 7011| 技术 0| 互助 5| 钻石 0

这个BUG很高端的样子...
啾啾啾啾啾 发表于 2020-1-13 10:19:32 来自手机 | 显示全部楼层

活跃 4439| 技术 3| 互助 3| 钻石 20

时代变了
啾啾啾啾啾 发表于 2020-1-13 10:22:54 来自手机 | 显示全部楼层

活跃 4439| 技术 3| 互助 3| 钻石 20

这个等于要在18年以内淘汰世界上90%的代码、系统

还好我的系统应该没有这个Bug
啾啾啾啾啾 发表于 2020-1-13 10:24:11 来自手机 | 显示全部楼层

活跃 4439| 技术 3| 互助 3| 钻石 20

加油啊!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Lacy

47075

活跃

2

技术

9

互助
签到任务
最火的业界新闻
  • 微软披露全新高危漏洞:影响所有Windows 10
  • 老外自愧不如!全球App吸金能力最强厂商:
  • 电影院复工首批上映电影公益方式发行 平均
  • 围观罗永浩近照:本人2020年首场电商直播要
  • 比官方宣传还猛!台积电5nm晶体管密度比7nm
  • Redmi K30 Pro真机曝光:“恒星系统”四摄
  • 麒麟820安兔兔跑分曝光:接近麒麟980
  • 超算联盟向COVID-19研究人员开放了十六组超
  • 王思聪又缺钱?旗下熊猫互娱1亿被执行人案
  • [图]华为P40系列规格参数曝光:双打孔3200
炫酷的硬件Show
  • 振华SUPER FLOWER 铜皇450W 铜牌电源
  • 比小更小,Mini-STX装机
  • 华擎X99E-ITX + 银欣ML06 装机记
  • 最强双路泰坦硬管水冷 制作流程
  • 银欣FT02,双路E5工作站
  • 迟到的定制机箱小钢炮清理灰尘
  • 乔思伯UMX1 Plus,小巧的家用综合主机
  • 分体水冷第二弹-Inwin 805 infinity
  • 第一次DIY硬管水冷~~
  • 樱桃MX6.0 青轴 机械键盘 开箱
有趣的美图分享
  • 差点看错了
  • 我不想出去了.....
  • 原来这么扎头发的都是秃头?
  • 闹心的污渍
  • 好男孩
  • 你刚才说剪哪根?
  • 算了,不注册了
  • 凑活一下,还能用
  • 强迫症看完很爽
  • 守纸
关注官方微信
快速回复 返回顶部 返回列表