本文来自微信公众号:果壳 (ID:Guokr42),作者:Owl,编辑:窗敲雨、Steed,科学审核:Andrija,题图:由DALL-E生成
本文来自微信公众号:果壳 (ID:Guokr42),作者:Owl,编辑:窗敲雨、Steed,科学审核:Andrija,题图:由DALL-E生成
今天,2024年2月29日,有消息称,激光雷达大厂禾赛,遭遇了闰年bug:固件没处理闰年,凡是用了禾赛激光雷达的车,自动驾驶功能全都歇菜了。
据“凤凰网科技”,禾赛已经回应:有2个老款L4机械式激光雷达今天出现了软件bug,问题原因已经找到,我们也跟相关客户都做了深入沟通、并提供了相关解决方案。预计该问题会在24小时内彻底解决。此问题不涉及AT128、不影响OEM客户,对路上跑的所有搭载AT128的乘用车都无影响。
禾赛的合作厂商,包括理想、长城、路特斯、飞凡等。声明中特别提及“不受影响”的AT128,则是禾赛的旗舰产品,已搭载在理想L9、路特斯EMEYA等车型上。
图源:微博截图
每4年就有一个2月29日,形形色色的闰年日bug总是准时出现。
什么是闰年日Bug?简单来说,就是在闰年多出来的这一天,由于对日期和时间的计算处理存在错误,导致某些系统或设备无法正常工作的问题。这类Bug如果不及时发现和修复,就可能造成严重后果。
下面几个真实案例可以帮助我们更好地理解闰年日Bug的危害:
2016年2月29日,德国杜塞尔多夫国际机场由于行李输送系统控制软件中存在闰年日错误,超过 1200 个行李和手提箱未能按时登机。
2020年2月29日,丹麦第四大城市奥尔堡整个城市的自动路灯系统未能正常运行。在黑暗中度过了几个小时后,该市的运营经理才找出问题并手动开灯。
2024年2月29日(也就是今天),新西兰众多加油站的自助支付系统瘫痪。支付解决方案供应商Invenco确认,这起事故就是由于他们的系统在闰年日期计算上出了问题。
类似的案例还有很多,比如航空公司无法正常登机、售票系统瘫痪、交通设施发生故障等,严重影响着人们的出行和生活。
其实,除了四年一遇的闰年日bug,在手机和电脑上还有其他跟日期有关的奇怪bug,比如:
世界末日到底是哪一天?
这个无厘头的问题一直有着各种各样的离奇答案。当你打开手机系统设置(不是日历),关闭自动设置时间,往未来的方向滑动数字时,你会发现时间停在了2038年。
小米、华为可以设置到2037年12月31日,iPhone也只多两天
不仅是手机,在电脑上,当你尝试将时间从2037年再往上调整时,会发现不管怎么按设置按钮,日期都不会继续改变。
日期调整超过2038年时,会停在2038年1月1日
2038年到底会发生什么?为什么各种设备都无法“逾越”2038年?在网上搜寻2038,你还能发现有人专门设置了倒计时网页。这其中包含了一个更加精确的时间:2038年1月19日 3点14分7秒。而下一秒,你的电子设备将会穿越回到1901年。
著名的“2038问题”,将在此刻爆发。
到“2038年问题”发生,还剩……
2038年,时间“摧毁”系统
问题发生在2038年1月19日 3点14分7秒的下一秒。这一天的03:14:08不会到来,迎接你的将会是1901年12月13日20:45:52。
使用脚本模拟系统时间,会出现时间的跳变【平台 Debian GNU/Linux (内核 2.4.22)】丨William Porquet/deepsky.com
对于很多电子设备而言,这是个毁灭性的打击。文件的创建与修改、应用软件的运行、网络系统的同步……时间作为一个关键数值,在整个电子系统里起着绝对重要的作用。因此有一阵子苹果手机的语音助手Siri,还把这一天当成了“世界末日”。为什么是这一天?Siri回答中的关键词也给出了答案。
早期Siri对于世界末日问题的回答(新版本系统已无此回答)
Unix、32位,这两个词让2038年的这一天注定成为末日。Unix是一种操作系统,这种系统中计时方式是以1970年1月1日 00:00:00为基准,按秒为单位进行增减。比如到2022年1月1日0点,只需要用基准值加上1640966400秒。而我们现在使用的安卓、苹果系统都属于类Unix系统,采用了同样的方案。
电子系统使用0和1对数据进行储存,也就是二进制。如果只用1位数,只能表示0和1,如果2位数,则可以用00、01、10、11分别表示0、1、2、3这四个数。随着位数的增加,二进制可以表示的数也越来越大,但总会遇到上限。如果用32个0、1储存数字,第一位表示符号,0代表+,1代表-,则剩下31位最大可以表示2147483647。在计算机资源非常宝贵的年代,用32位来放置时间,已经很够用了。
1970年1月1日00:00:00 + 2147483647秒 = 2038年1月19日 3点14分7秒。下一秒,数据就会出现“装不下”的情况,发生溢出。此时第一位符号位从0变成1,本来的加号变成了减号,时间突然穿越到过去。
从上到下分别是二进制秒数、对应的十进制秒数、32位Unix系统时间、实际时间。超过2147483647后,符号位会变成1(负号),整个数字会突然发生翻转,回到1901年。丨Pemu/Wikicommons
这个存在于将来的问题,它会给我们带来怎样的影响?回溯过往,一次又一次的“千年虫”问题已经给了我们一些预告。
千年之外的千年虫
2000年,千禧年。而在很多应用程序看来,这一年会变成1900年。
同样因为硬件资源宝贵,早期程序使用了年份的后两位数字来表示日期,而前两位数都默认为19。这个不起眼的时间问题,在整个世界引发了巨大的关注。政务系统、银行系统、航空系统等多个系统都可能受到影响而失效。全球各地对这一问题进行了响应,试图解决这一问题。我国多次发文强调这一问题的重要性。美国也推出了有关千年虫问题的法案,以敦促各行业共享信息解决此类问题。
全球各地对“千年虫”采取行动丨人民日报网络版
多亏人们对“千年虫”的高度重视,使得这一问题在集中爆发前得以解决。但在此之后,类似“千年虫”的事件却依然层出不穷。
2010年的第一周,德国约3千万张银行卡同时“失效”。持卡人不仅无法直接刷卡消费,连在自动取款机上取钱都成问题。这不仅影响了本国居民的生活,也使得在外度假的德国人滞留在当地。
由于不同编码方式存在差异,2010在德国的银行系统中被错误地识别成2016。银行卡也因此“被过期”了。同样的情况出现在使用Windows Mobile系统的手机上:你在2010年第一天收到的新年短信,会被系统显示成2016年。
德国加速修复了银行系统,所幸没有造成更大的损失。但放眼太空,事情就没那么简单了。2013年9月,航天器Deep Impact突然失联,迫使美国航空航天局宣布相关探测任务正式结束。Deep Impact的首席任务科学家 Mike A'Hearn认为,这是一个“千年虫问题”。航天器的部分软件无法正确识别2013年8月11日之后的日期,导致计算机不断重启。最终,科学家们失去了航天器的信号。
Deep Impact与坦普尔1号彗星相遇模拟图丨NASA
就在2022年初,“2022年虫”让微软的程序员体会了新年大加班。1月1日,微软的邮件服务系统Exchange突然中断,使用该服务的用户都无法发送电子邮件。微软随后给出了声明,称该问题与日期检查失败以及新年的变化有关。简单点说,和2038问题一样,时间“溢出”了。好在微软团队加班加点,在当天解决了该问题。
在未来,“类千年虫”问题一定还会出现。对于可以预料的问题,人们已经开始尝试提供解决方法。比如使用新的格式存储时间信息。与此同时,系统团队提供的新内核也在解决32位平台上的“历史问题”。你也不用太担心,毕竟到那时,你应该已经换了好几波手机了。
不过,再遇到类似的突发Bug也很正常。因为世界上总在发生情理之中、意料之外的事情。
参考文献
[1]Year 2038 Problem Countdown. https://gregnk.com/2038/
[2]The Project 2038 Frequently Asked Questions (FAQ). http://www.deepsky.com/~merovech/2038.html#What_operating_systems_and_platforms_are_affected_by_it
[3]Why does Siri say the world will end on January 2038? https://www.quora.com/Why-does-Siri-say-the-world-will-end-on-January-2038
[4]Unix time. https://en.wikipedia.org/wiki/Unix_time
[5]Unix Time Stamp - Epoch Converter. https://www.unixtimestamp.com/
[6]Unix-like. https://www.computerhope.com/jargon/u/unix-like.htm
[7]2038年问题. https://zh.wikipedia.org/wiki/2038%E5%B9%B4%E9%97%AE%E9%A2%98
[8]中国解决计算机2000年问题的进展情况. http://www.scio.gov.cn/xwfbh/xwbfbh/wqfbh/1999/1201/Document/328000/328000.htm
[9]话说“千年虫”. http://www.people.com.cn/item/hs2000/july.html
[10]Clinton Urges Americans To Act On Y2K Problem. https://edition.cnn.com/ALLPOLITICS/1998/07/14/clinton.y2k/
[11]Y2K-type bug hits German cash, credit cards. https://www.eetimes.com/y2k-type-bug-hits-german-cash-credit-cards/
[12]Carry cash as well as a card, says German bank association. https://www.computerworld.com/article/2759697/carry-cash-as-well-as-a-card--says-german-bank-association.html
[13]Windows Mobile Bug Dates Messages from 2016. https://www.wired.com/2010/01/windows-mobile-bug-dates-messages-from-2016/
[14]NASA Declares End to Deep Impact Comet Mission. https://www.nationalgeographic.com/science/article/130920-deep-impact-ends-comet-mission-nasa-jpl#:~:text=NASA%20officials%20declared%20the%20Deep,July%204%20of%20that%20year.
[15]Exchange Year 2022 Problem: FIP-FS Scan Engine failed to load – Can’t Convert “2201010001” to long (2022/01/01 00:00 UTC). https://borncity.com/win/2022/01/01/exchange-fip-fs-scan-engine-failed-to-load-cant-convert-2201010001-to-long-1-1-2022/
[16]Email Stuck in Exchange On-premises Transport Queues. https://techcommunity.microsoft.com/t5/exchange-team-blog/email-stuck-in-exchange-on-premises-transport-queues/ba-p/3049447
本文来自微信公众号:果壳 (ID:Guokr42),作者:Owl,编辑:窗敲雨、Steed,科学审核:Andrija
支持一下 修改