當前位置: 華文天下 > 辟謠

不認2月29?歇菜的可遠不止自動駕駛

2024-03-01辟謠

今天,2024年2月29日,有訊息稱,激光雷達大廠禾賽,遭遇了閏年bug:固件沒處理閏年,凡是用了禾賽激光雷達的車,自動駕駛功能全都歇菜了。

據「鳳凰網科技」,禾賽已經回應:有2個老款L4機械式激光雷達今天出現了軟件bug,問題原因已經找到,我們也跟相關客戶都做了深入溝通、並提供了相關解決方案。預計該問題會在24小時內徹底解決。此問題不涉及AT128、不影響OEM客戶,對路上跑的所有搭載AT128的乘用車都無影響。

禾賽的合作廠商,包括理想、長城、路特斯、飛凡等。聲明中特別提及「不受影響」的AT128,則是禾賽的旗艦產品,已搭載在理想L9、路特斯EMEYA等車型上。

圖源:微博截圖

每4年就有一個2月29日,形形色色的閏年日bug總是準時出現。

什麽是閏年日Bug?簡單來說,就是在閏年多出來的這一天,由於對日期和時間的計算處理存在錯誤,導致某些系統或器材無法正常工作的問題。這類Bug如果不及時發現和修復,就可能造成嚴重後果。

圖源:DALL-E

下面幾個真實案例可以幫助我們更好地理解閏年日Bug的危害:

  • 2016年2月29日,德國杜塞爾多夫國際機場由於行李輸送系統控制軟件中存在閏年日錯誤,超過 1,200 個行李和手提箱未能按時登機。

  • 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.

    對於很多電子器材而言,這是個淪陷性的打擊。檔的建立與修改、套用軟件的執行、網絡系統的同步…… 時間作為一個關鍵數值,在整個電子系統裏起著絕對重要的作用 。因此有一陣子蘋果手機的語音助手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年问题

    [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 officials declared the Deep,July 4 of that year.

    [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