Rust來了!汽車軟件工程師準(zhǔn)備迎接又一個“漲薪潮”
一直以來,汽車ECU的編程語言90%都是C語言編寫(大部分是涉及到MCU的控制編程),還有部分C++語言。比如,大多數(shù)主流的機器學(xué)習(xí)框架實際上都是依賴C++。
過去幾年時間,通過盡可能少的代碼簡化任務(wù)也催生了大量的新編程語言的應(yīng)用,然而,特斯拉仍然依賴于最基礎(chǔ)的語言:C和C++。
“原因是C和C++可以在幾乎任何一種系統(tǒng)上運行,尤其是對于安全關(guān)鍵的嵌入式系統(tǒng)來說,可以幫助工程師優(yōu)化軟件!边@是特斯拉的結(jié)論,實際上英偉達也在大量使用C和C++。
不過,考慮到整車系統(tǒng)的復(fù)雜性以及越來越多的應(yīng)用功能開發(fā),不同語言的組合也是趨勢。但毋庸置疑的是,核心軟件價值仍然在芯片和域控制器這一級別。
近日,有消息稱,AUTOSAR(汽車開放系統(tǒng)架構(gòu))組織正在考慮保持經(jīng)典AUTOSAR(基于C++14編程語言)的基礎(chǔ)上,尋求為AUTOSAR Adaptive啟動Rust編程語言的導(dǎo)入。
按照計劃,AUTOSAR決定從2022年4月開始,在功能安全工作組(WG-SAF)內(nèi)成立一個子小組,制定兩份和Rust相關(guān)的指南文件,包括在AUTOSAR Adaptive使用Rust的指導(dǎo)文件以及相應(yīng)的編碼指南。
這意味著,對于處于起步期的AUTOSAR Adaptive以及域控制器電子架構(gòu)、軟件定義汽車開發(fā)模式來說,有可能會產(chǎn)生深遠的影響。
一、
眾所周知,Rust是一種多范例、通用的系統(tǒng)編程語言,目標(biāo)是提高性能和安全性,特別是并發(fā)安全。Rust在語法上類似于c++,但可以在不進行垃圾回收的情況下保證內(nèi)存安全。除了函數(shù)式編程等高級特性外,它還提供低內(nèi)存管理機制。
這種語言在2006年前后出現(xiàn),此后在Firefox瀏覽器引擎的開發(fā)中進行了一系列改進(通過使用Rust語言重建組件來提高瀏覽器的速度),也在過去十幾年時間獲得了包括亞馬遜、Facebook、谷歌和微軟等軟件巨頭的支持,也多次被選為“最受歡迎的編程語言”。
Rust在語法上和C++類似 ,但是設(shè)計者想要在保證性能的同時提供更好的內(nèi)存安全。這一點,已經(jīng)在過去幾年成為汽車行業(yè)的最大完全風(fēng)險之一。
有數(shù)據(jù)顯示,當(dāng)今汽車中使用的代碼超過1億行。在接下來的十年,汽車中使用的代碼平均將達到3億行。隨著汽車聯(lián)網(wǎng)越來越多,黑客也會越來越多地瞄準(zhǔn)汽車應(yīng)用。
此前,靜態(tài)代碼分析安全公司Veracode曾發(fā)布一份應(yīng)用程序分析報告,結(jié)果發(fā)現(xiàn)比起JavaScript和Python等語言,C++的安全漏洞要嚴(yán)重得多。原因之一就是C++不是內(nèi)存安全的語言,代碼庫中頻頻出現(xiàn)內(nèi)存漏洞,大量的時間被耗費在修補漏洞上。
比如,易受攻擊的嵌入式Web服務(wù)器是用C++編寫的,并通過智能汽車的WiFi網(wǎng)絡(luò)對外暴露,致使攻擊者在訪問WiFi網(wǎng)絡(luò)后可攻擊web服務(wù)器。
按照谷歌Linux內(nèi)核安全工程師的說法,C語言是一種高級的匯編程序,但C語言也帶來了一些導(dǎo)致安全缺陷和基礎(chǔ)設(shè)施漏洞。C語言中存在大量的開源漏洞是有原因的。而C語言的使用時間相對其他語言要長,并且擁有最多的編寫代碼量。
相比較而言,Rust試圖從一開始就阻止許多漏洞進入代碼。如果有語法錯誤或其他內(nèi)存安全漏洞,根本不會編譯。這是設(shè)計上的內(nèi)存安全編程,確保沒有對無效內(nèi)存的訪問(無論軟件如何執(zhí)行)。
而對于汽車,尤其是智能汽車來說,多核多線程處理是主流。這意味著,運行在多個核上的多線程應(yīng)用程序可能會導(dǎo)致更多的問題。此前,工程師可以通過使用靜態(tài)代碼分析器來完成bug的定位,解析源代碼并報告任何潛在的錯誤。
在AUTOSAR的C++14語言編程指南中,有這樣一句話,“如果本文檔的用戶使用了并行計算、C++標(biāo)準(zhǔn)庫或開發(fā)了與安全相關(guān)的軟件,那么他們有責(zé)任為這些應(yīng)用自己的指導(dǎo)方針!
依賴于靜態(tài)代碼分析和手工審核,已經(jīng)是一種“常規(guī)”的解決方案,大部分工程師也已經(jīng)習(xí)慣了這種解決方案,而在過去幾年時間,C++也成為了高性能編程的首選語言。
這意味著,如果軟件是多線程的,并且使用了多核,那么工程師就只能靠自己了,而Adaptive AUTOSAR對于這些問題沒有任何指導(dǎo)。
但大多數(shù)新的軟件系統(tǒng)都是多線程,并運行在多個核上,尤其是多核SoC逐步成為主流搭載平臺,而非傳統(tǒng)的MCU(MCU本身也處于多核、大算力的趨勢發(fā)展,控制系統(tǒng)本身也越來越復(fù)雜,融合集成度越來越高)。
從這個角度來說,Rust編譯器在編譯時執(zhí)行所有檢查,因此不會產(chǎn)生任何運行時的開銷。性能可與C++相媲美。此外,Rust的目標(biāo)是零成本的抽象,一旦代碼編譯完成,就可以確信它能夠正常工作。
一些汽車行業(yè)人士認(rèn)為,多核系統(tǒng)是未來的趨勢,而Rust正是一種適用于復(fù)雜嵌入式軟件的優(yōu)秀編程語言,潛力不可估量。
二、
不過,任何一種語言都存在自己的天然弊端。作為一種適合于系統(tǒng)軟件開發(fā)的語言,Rust的開發(fā)人員也要跨越一些已知的障礙。
比如,Rust保證安全性的代價就是學(xué)習(xí)門檻很高,對于習(xí)慣了腳本語言或者C語言的程序員來說,Rust顯得不是那么友善,同時學(xué)習(xí)成本也很高。比如,Rust還沒有一套完善的開發(fā)棧可供參考,這也是長期被“吐槽”的地方。
但,Rust的獨特優(yōu)勢也已經(jīng)明確。比如,在過去幾年時間,全球已經(jīng)有不少知名互聯(lián)網(wǎng)或科技公司都在采用Rust重構(gòu)技術(shù)棧,不過,生態(tài)還不是很豐富,有些領(lǐng)域還沒有很好的庫支撐。
而在汽車行業(yè),尤其是關(guān)鍵安全領(lǐng)域,Rust編程語言可以進行安全關(guān)鍵型軟件開發(fā),來改善安全關(guān)鍵型軟件質(zhì)量,這是對現(xiàn)有編程語言的重大改進。
比如,Rust目前只有一個主編譯器,這意味著,關(guān)鍵安全系統(tǒng)開發(fā)對于嚴(yán)謹(jǐn)性和穩(wěn)定性的關(guān)注被視為Rust的一個主要競爭優(yōu)勢,也是一種比其他語言更容易分析和檢查的語言。
目前,全球已經(jīng)有一些公司在汽車行業(yè)應(yīng)用Rust語言提供相關(guān)的開發(fā)和培訓(xùn)支持。比如,F(xiàn)errous Systems是一家德國的公司,主要服務(wù)就是驗證Rust語言和編譯器在安全關(guān)鍵領(lǐng)域的使用。要知道,在汽車行業(yè),目前還沒有安全認(rèn)證的Rust工具鏈。
按照計劃,該公司的第一個目標(biāo)是ISO 26262/ASIL-B認(rèn)證,并在2022年底正式對外,為關(guān)鍵任務(wù)和高安全性環(huán)境中的開發(fā)人員提供了一個健全的、經(jīng)過驗證的、可尋址的基礎(chǔ)架構(gòu)和驗證工具,以構(gòu)建關(guān)鍵庫、分析工具和進一步的系統(tǒng)保證。
在今年初,AdaCore(軟件開發(fā)和驗證工具提供商)宣布與Ferrous Systems建立戰(zhàn)略合作伙伴關(guān)系,進一步開發(fā)后者的Rust開發(fā)工具鏈,以支持嵌入式任務(wù)和安全關(guān)鍵應(yīng)用,并使其符合相關(guān)行業(yè)軟件安全標(biāo)準(zhǔn)。
而AdaCore同樣也是類似英偉達這樣的全球芯片巨頭的合作伙伴,前者的工具鏈可以在在軟件生命周期的早期檢測代碼缺陷,并通過集成到英偉達的芯片,來最大限度地降低軟件發(fā)生故障或者惡意漏洞攻擊的可能性。
“自動駕駛很復(fù)雜,需要軟件的復(fù)雜程度超過了目前最嚴(yán)格的標(biāo)準(zhǔn)!痹谟ミ_軟件安全副總裁Daniel Rohrer看來,軟件必須與硬件具有一樣的功能安全標(biāo)準(zhǔn),并經(jīng)過同樣嚴(yán)格的安全評估。
實際上,以目前車載座艙操作系統(tǒng)的主流安卓平臺為例,過去主要是基于C和C++開發(fā),但內(nèi)存安全漏洞成為最難以解決的錯誤代碼來源,占到了約70%的高嚴(yán)重安全漏洞比例。
在谷歌看來,Rust有幾個關(guān)鍵特性,比如內(nèi)存安全性、數(shù)據(jù)并發(fā)性、默認(rèn)情況下不可變的引用和變量、更安全的整數(shù)處理、標(biāo)準(zhǔn)庫中更好的錯誤處理等等特點。
去年,谷歌首次表示,一直在為安卓開源項目增加對Rust的支持。但是在Android平臺上添加一種新的語言是一項巨大的任務(wù)。一些工具鏈和依賴關(guān)系需要維護,測試基礎(chǔ)設(shè)施和工具必須更新,開發(fā)人員需要接受培訓(xùn)。
谷歌的策略,就是從一部分新的代碼開發(fā)入手。
比如,安卓最新的藍牙軟件棧重寫代碼名為“Gabeldorsche”,就是用Rust編寫。Keystore 2.0模塊(存放開發(fā)者信息、私鑰、公鑰的容器)也是用Rust編寫。一些行業(yè)人士表示,使用Rust寫安卓庫也是一個重要方向,之前大多數(shù)都是基于C/C++。
此外,豐田此前公布的汽車級開發(fā)平臺OS—Arene,其中的API就是用Rust編寫的,是一個預(yù)編譯的C/C++庫(目前是為x86和arm構(gòu)建的)。它被部署在一個ECU上可以讀取、編寫和驗證豐田官方CAN信息,并將在未來擴展到支持更多車型。
而作為實時操作系統(tǒng)的供應(yīng)商,風(fēng)河公司開發(fā)的VxWorks,同樣支持Rust編程語言,并允許構(gòu)建和部署多線程的Rust應(yīng)用程序,作為實時進程運行。
同樣,作為汽車芯片IP核的主流供應(yīng)商,Arm在去年底宣布加入Rust基金會,被視為對這種編程語言未來大范圍應(yīng)用的巨大推動,同時加入的還有豐田汽車。這個基金會由亞馬遜、谷歌、華為、微軟和Mozilla建立。
這意味著,Rust編程語言已經(jīng)進入快速發(fā)展周期。高工智能汽車研究院監(jiān)測數(shù)據(jù)顯示,目前國際一線汽車零部件供應(yīng)商已經(jīng)開始在大量招聘同時具備Rust和C/C++開發(fā)能力的軟件工程師。
來源:高工智能汽車V
以上是關(guān)于軟件工程師的相關(guān)信息,以供大家查看了解。想要了解更多軟件工程師信息,第一時間了解軟件工程師相關(guān)資訊,敬請關(guān)注唯學(xué)網(wǎng)軟件工程師欄目,如有任何疑問也可在線留言,小編會為您在第一時間解答!