微軟:為啥安全的系統(tǒng)得用 RUST 寫

本系列文章中,我們探討了主動采取一些措施消除一類漏洞的必要性,并介紹了在 Microsoft 的代碼中發(fā)現的一些內存安全問題的例子撕瞧,這些問題可以用其他語言避免。現在我們來看看為什么我們認為 Rust 是目前可用的 C 和 C++ 最好的替代品狞尔。

雖然丛版,已經有許多非常好用的內存安全語言,廣泛應用于微軟內外偏序,包括 .NET 語言(如 C# 和 F#)和其他語言(如 Swift, Go, and Python)页畦。 我們鼓勵正在使用 C 或 C++ 的人考慮使用這些語言中的一種。然而研儒,我們正在討論對安全的系統(tǒng)編程語言的需求(即豫缨,可以構建其他軟件運行的系統(tǒng)的語言,如OS內核)端朵。此類工作負載需要 C好芭,C ++ 和 Rust 提供的速度和可預測的性能。通過垃圾回收實現內存安全的語言不是系統(tǒng)編程的理想選擇冲呢,因為它們的運行時會導致不可預測的性能和不必要的開銷舍败。

性能和控制

在考慮為什么Rust是一個很好的替代方案時,最好考慮一下我們不能因為從 C 或 C++ 轉換而放棄什么——即性能和控制敬拓。 Rust邻薯,就像 C 和 C++ 一樣,有一個最小的和可選的“運行時”乘凸。Rust 的標準庫依賴于 libc 來支持它的平臺厕诡,就像 C 和 C++ 那樣,但是標準庫也是可選的翰意,所以在沒有操作系統(tǒng)的平臺上也是可以運行的木人。

Rust 與 C 和 C++ 一樣信柿,也為程序員提供了對何時分配內存以及分配多少內存的細粒度控制冀偶,從而使程序員能夠非常清楚地了解程序運行時將如何執(zhí)行。這對于原始性能渔嚷,控制和可預測性的性能意味著什么进鸠,Rust,C 和 C ++可以用類似的術語來思考形病。

安全

Rust 與 C 和 C++ 的區(qū)別在于其強大的安全保障客年。除非通過使用“unsafe”關鍵字明確選擇使用霞幅,否則Rust完全是內存安全的,這意味著我們在上一篇文章中說明的問題是無法表達的量瓜。 在以后的文章中司恳,我們將重新討論這些示例,以了解 Rust如何在不添加任何運行時開銷的情況下防止這些問題绍傲。正如我們所看到的扔傅,MSRC 分配給 CVE 的大約70%的安全問題是內存安全問題。 這意味著如果軟件是用 Rust 編寫的烫饼,那么70%的安全問題很可能已經消除猎塞。我們并不是唯一一家報道這一發(fā)現的公司。

在系統(tǒng)編程中杠纵,有時程序員必須執(zhí)行無法靜態(tài)驗證為安全的操作荠耽。Rust 為程序員提供了將這些操作包裝在安全抽象的工具中,這意味著Rust編譯器可以靜態(tài)地強制執(zhí)行那些曾經屬于代碼注釋或約定的操作比藻。必須顯式地標記內存不安全操作铝量,從而極大地減少了安全專家必須仔細檢查內存安全漏洞的面積。

不僅僅是性能和安全性

雖然 Rust 最初因為上述原因引起了 MSRC 的興趣银亲,但是微軟的其他團隊已經因為其他原因開始采用 Rust:

  • 根據一項內部調查款违,采用的首要原因是“正確性”——這是 Rust 安全保障的延伸,可以實現“if it compiles, then it works”的格言群凶。
  • Rust 靜態(tài)地強制執(zhí)行程序的許多特性插爹,這些特性超出了內存安范圍,包括空指針安全性和數據競爭安全性(即请梢,不允許從兩個或多個線程非同步地訪問一塊內存)赠尾。
  • 微軟的許多團隊都發(fā)現 Rust 的豐富類型系統(tǒng)使編寫富有表現力的程序成為可能。具有相關數據的枚舉和強大的特征系統(tǒng)等概念進一步強化了 Rust 的目標毅弧,即盡可能使程序減少 BUG气嫁。
  • Rust 現有的社區(qū)對該語言有巨大的好處。語言的大部分功能來自于其核心之外的庫够坐、工具和學習資料寸宵。 Rust 仍然是一個年輕的語言,但是它擁有一個健康的生態(tài)系統(tǒng)元咙,擁有一個活躍的梯影、開放的編譯器和語言的開發(fā)過程,并且它顯示出了強大的促進開源社區(qū)和支持用戶生產力的能力庶香。這給了我們更多的理由相信該語言有一個光明的未來甲棍。

所有這些都解釋了Rust過去四年在Stack Overflow最受歡迎的語言列表中高居榜首的記錄。 雖然現在說采用 Rust 的規(guī)模和微軟的工程組織一樣大還為時過早赶掖,但早期采用 Rust 通常是非常積極的感猛。

一個光明的未來

我們相信 Rust 會改變編寫安全的系統(tǒng)軟件的游戲規(guī)則七扰。Rust 提供編寫低級系統(tǒng)所需的性能和控制,同時允許軟件開發(fā)人員編寫健壯陪白、安全的程序颈走。

在研究 Rust 的過程中,我們發(fā)現了一些問題咱士,這些問題一直困擾著我們疫鹊。其中一些問題包括如何規(guī)范Rust的“不安全”超集的使用,缺乏與 C ++ 一流的互操作性司致,以及與現有Microsoft工具的互操作性拆吆。 我們將在以后的博客中討論其中的許多問題,因為它們對微軟的大規(guī)模采用構成了挑戰(zhàn)脂矫,我們希望讓 Rust 和更廣泛的軟件社區(qū)參與進來枣耀,幫助我們找到適合所有人的解決方案。

但我們對這些可能性感到興奮庭再。雖然還有許多問題有待解決捞奕,比如 Rust 如何融入微軟的整個工程設計中,但是我們鼓勵其他人加入我們的行列拄轻,認真研究這種語言颅围,以滿足他們的系統(tǒng)編程需求。

Ryan Levick, Principal Cloud Developer Advocate


本文翻譯于:Why Rust for safe systems programming

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末恨搓,一起剝皮案震驚了整個濱河市院促,隨后出現的幾起案子,更是在濱河造成了極大的恐慌斧抱,老刑警劉巖常拓,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異辉浦,居然都是意外死亡弄抬,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門宪郊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掂恕,“玉大人,你說我怎么就攤上這事弛槐“猛觯” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵丐黄,是天一觀的道長斋配。 經常有香客問我孔飒,道長灌闺,這世上最難降的妖魔是什么艰争? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮桂对,結果婚禮上甩卓,老公的妹妹穿的比我還像新娘。我一直安慰自己蕉斜,他們只是感情好逾柿,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宅此,像睡著了一般机错。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上父腕,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天弱匪,我揣著相機與錄音,去河邊找鬼璧亮。 笑死萧诫,一個胖子當著我的面吹牛,可吹牛的內容都是我干的枝嘶。 我是一名探鬼主播帘饶,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼群扶!你這毒婦竟也來了及刻?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤竞阐,失蹤者是張志新(化名)和其女友劉穎提茁,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體馁菜,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡茴扁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了汪疮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峭火。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖智嚷,靈堂內的尸體忽然破棺而出卖丸,到底是詐尸還是另有隱情,我是刑警寧澤盏道,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布稍浆,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏衅枫。R本人自食惡果不足惜嫁艇,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弦撩。 院中可真熱鬧步咪,春花似錦、人聲如沸益楼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽感凤。三九已至悯周,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陪竿,已是汗流浹背队橙。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萨惑,地道東北人捐康。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像庸蔼,于是被迫代替她去往敵國和親解总。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容

  • TITLE: 編程語言亂燉 碼農最大的煩惱——編程語言太多姐仅。不是我不學習花枫,這世界變化快! 有時候還是蠻懷念十幾掏膏、二...
    碼園老農閱讀 5,321評論 2 35
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,101評論 1 32
  • 原文:Fearless Concurrency with Rust by Aaron Turon Apr 10,...
    猿基地閱讀 12,035評論 0 71
  • 卡車載了一車舊夢 跑在104國道上 那些夢也許無關姑娘 也許劳翰,無關遠方 我躺在卡車的尾端 和這些舊夢一起 被丟棄到...
    租了五顆星閱讀 366評論 8 4
  • 世上總有一個溫暖的人佳簸,只為你悲喜 臨摹的作品,頭發(fā)沒有一點層次請無視颖变。生均。0.5的中性筆畫瞎了眼睛。腥刹。马胧。 線稿,擦改...
    波波啦閱讀 607評論 6 13