近來,微軟嘗試使用Rust來提升軟件的安全性。在巴塞羅那舉行的RustFest大會上,微軟工程師Ryan Levick和Sebastian Fernandez分享了他們在微軟使用Rust時所面臨的挑戰。微軟的Rust之旅包括使用Rust重寫Windows的一個底層組件。
Fernandez和Levick表示,軟件行業建立在一個不安全的技術基礎之上,涉及鉅額成本。保守估計,微軟的軟件裏被爆出的每一個問題平均需要耗費15萬美元,而受安全漏洞侵害的組織需要付出更高的成本。英國國家醫療保健系統就是這樣的一個案例,因爲受到贖金攻擊,預計損失達到40億美元。
他們說,這些問題大部分與使用C語言和C++有關。
C語言和C++非常適合用來開發底層系統,它們只使用非常少的資源。實際上,它們是我們創建的系統的基礎,但問題是它們不夠安全。在使用它們開發系統時,開發人員並沒有考慮到安全問題。
這也解釋了爲什麼微軟在嘗試使用Rust,希望能夠消除軟件bug,特別是那些會導致安全漏洞的bug。
我們可以使用Rust開發出安全的組件。
兩位工程師表示,這個有待驗證,但他們希望結果能夠如他們所願。
實現這個目標的一個主要障礙是使用Rust從頭開始重寫所有東西是不可能的。Rust應該與其他語言共存,雖然這樣也不容易。例如,對於Windows來說,第一個障礙是LLVM(Rust的編譯器),它對Windows的支持並不好。類似的,Rust的構建工具Cargo無法管理微軟的整個構建系統,只能被集成到現有的構建系統中。
這個問題適用於所有的Rust工具,以及被封裝進DLL的共享可執行程序(它們大部分使用C語言和C++開發)和對COM、WinRT、Win32的支持。
除此之外,微軟以及其他類似的企業還有其他問題需要解決,包括人的因素在內。Rust的受衆通常是那些具有多年C語言或C++經驗的開發者,需要說服他們轉向Rust。
之前,當我們向有經驗的C++程序員推薦Rust時,他們一般都能夠快速上手,因爲他們的知識體系裏已經有一些形式化的東西,這是好事。但對於那些從其他領域轉過來的人來說就有一點困難。不過,雖然學習曲線比較陡峭,但一旦他們上手了,就會變得非常高效。
來自微軟Hyper-V團隊的工程師Adam Burch分享了微軟使用Rust開發項目的經驗。他講述了使用Rust重寫一個Windows底層系統組件的經歷,並把Rust編譯器的安全性保證說成是一股清流:
Rust編譯器提供的內存和數據安全性保證讓程序員信心滿滿,因爲通過能夠編譯的代碼都是內存安全的。
與Fernandez和Levick一樣,Burch也同樣認爲C/C++程序員能夠快速上手Rust,他還提供了一些有關Rust與C/C++代碼互操作以及如何保持語言安全的建議,包括使用工具生成可表示C語言數據的Rust數據結構,以及與COM API有關的東西。
原文鏈接: