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