微軟 Azure CTO Mark Russinovich 呼籲放棄 C 和 C++ 這兩門久經時間考驗,被廣泛應用於高性能本機應用程序開發的編程語言。C++ 之父 Bjarne Stroustrup 回應稱企業高管就是喜歡新事物,且一些人總愛發表非常片面的言論。
本周一,Russinovich 敦促科技行業放棄 C/C++。他強調,「說到編程語言的選擇,是時候停止用 C/C++ 創建新項目了。Rust 才是無垃圾回收語言中的最佳選項。出於安全性和可靠性的考量,整個軟件行業都該棄用這兩種陳舊的語言。」
Mark Russinovich 本人是著名的黑客和逆向工程大師,2005 年,曾運用逆向工程在索尼 DRM 產品中發現 rootkit 複製保護有害程序。該曝光事件在當時極其有名,因為 rootkit 性質惡劣,它通過修改操作系統,阻止計算復刻 CD 副本,並無法卸載,甚至無法被反病毒和反間諜程序檢測到,為其他惡意軟件打開了滲透 Windows PC 的大門。另外,他還曾利用閒暇時間寫過三本安全相關的小說(堪稱摸魚大師)。
在 Reddit 上,他被人譽為「地球上最有才華的 C/C++ 程序員之一」。在加入微軟之前,Russinovich 編寫並發布了數十個流行的 Windows 管理和診斷實用程序。2006 年,微軟收購了他一手創辦起來的企業 Winternals Software,Russinovich 也因此加入微軟,成為微軟技術研究員——這是它可以授予的最高榮譽之一,隨後職位變更為微軟 Azure 主架構師以及 CTO。
截圖來源:https://www.linkedin.com/in/markrussinovich/
因其微軟 Azure CTO 的身份,Mark Russinovich 的評論值得注意,因為微軟的核心產品,如 Windows、Office 和 SQL Server,主要是用 C 和 C++ 編寫的。而在 Azure 雲平台上得到廣泛應用的 Linux 也是如此,主要語言為 C 和 C++。根據報道,Linux 締造者 Linus Torvalds 已經證實,除非出現不可預見的特殊狀況,否則 Linux 6.1 版內核將使用 Rust 代碼。作為向來以 C 語言編寫,同時包含少量匯編及膠水腳本的傳世項目,Linux 對 Rust 的接納堪稱里程碑式事件。
Rust 是 Graydon Hoare 出於個人愛好設計的編程語言,於 2006 年在 Mozilla 初步成型,並在 2010 年正式亮相。隨着 2015 年 Rust 1.0 的發布,它也逐漸以 C/C++ 替代選項的姿態得到人們的廣泛關注。
自那時起,Rust 連續七年成為 Stack Overflow 年度調查中最受歡迎的編程語言。儘管學習難度不低,但它還是被各大科技巨頭先後納入自家項目當中。
蘋果、亞馬遜、谷歌、Meta 乃至微軟等等,都已經在功能開發和實際生產中使用 Rust。Cloudflare 最近大肆宣傳的全新 HTTP 代理 Pingora 也是用 Rust 編寫而成,據稱在提高性能的同時削減了 CPU 與內存用量。
Rust 的最大優勢在於出現內存損壞 bug 的幾率更低,也就讓軟件變得更加安全。至少自 2019 年以來,微軟就一直在討論放棄 C/C++、轉用 Rust 的可能性。微軟還在開發自己的雲內存安全編程語言,即 Verona 項目。所以,Russinovich 這次提出放棄 C/C++ 的主張,可以說是早有先例。
另外,這也不是微軟第一次公開支持 Rust。三年前,微軟安全響應中心 (MSRC) 曾在博客上發表文章表示「 Rust 是目前 C 和 C++ 的最佳替代品」。MSRC 團隊還表示,「大多數修復的漏洞和分配的 CVE 都是由開發人員無意中將內存損壞錯誤插入到其 C 和 C++ 的代碼中造成的。自 2006 年以來,微軟修復的 CVE 中約有 70% 跟內存安全問題相關。這意味着,如果該軟件是用 Rust 編寫的,那麼這些安全問題很可能會被消除。」
外媒 The Register 詢問了 Russinovich 的建議是否會在全公司內部推行,但微軟方面拒絕置評。當然,單靠 Rust 本身並不足以保障軟件安全。它雖然提供針對內存安全漏洞的防禦,但卻無法消除其他威脅元素。
正如 Rust 說明文檔所言,「Rust 是種既安全、又不那麼安全的語言。」開發者有可能在某些任務中編寫出不安全的 Rust 代碼,這是無法單靠語言自身解決的問題。另外,Rust 也解決不了健全軟件設計範疇之外的攻擊向量(例如社會工程)。但必須承認,Rust 的品質相當過硬,在自己的領地內足以支撐起更強的安全信心。
Rust 基金會執行董事兼 CEO Rebecca Rumbul 在採訪中表示,「我們希望各方的支持和肯定能推動針對 Rust 基礎設施和技術社區的持續投入,確保 Rust 能夠在未來的發展道路上延續安全、可靠和可持續等優勢。」
對此,外媒請 C++ 締造者 Bjarne Stroustrup 發表了評論。在回覆中,Stroustrup 站在 C++ 的立場做了一番辯護。
「人們總是迷戀那些看似能讓生活更輕鬆的新事物,這一點在企業高管身上體現得尤其明顯。」
「另外,選擇新事物也能激起人們的興奮之情;相比之下,解決舊有知名工具中的已知問題就顯得沒那麼『酷』。很遺憾,新語言往往需要多年曆練和完善,才能在廣泛的應用領域中獲得與成熟語言相比肩的水平。但大多數人看不到一點,而且總愛發表一些非常片面的評論。」
Stroustrup 表示,「當然,安全性在大多數開發場景下都至關重要,所以多年來我一直致力於提高 C++ 的安全性。」
「我們現在已經在 ISO C++ 中實現了可靠的完美類型與內存安全。也就是說,每個對象都會根據它的定義類型進行使用。具體而言,我們消除了空指針問題、能夠捕捉範圍錯誤,並消除了數據爭用。請注意,包括 Rust 在內,任何一種號稱『安全』的語言都無法徹底避免風險代碼。」
Stroustrup 還以參與編寫的 C++ Core 指南為例,提出「這份指南的基本思路,就是定義一組必須遵循的安全規則,而後通過靜態分析強制執行這些規則。之所以需要這些規則,是因為任意 C 或 C++ 代碼本身無法自證安全。」
「這就是符合 ISO 標準的 C++ 代碼,可以強制要求開發者通過分析器保障代碼安全和更新。目前,微軟 Visual Studio、Clang Tidy 等都提供類似的分析器實現選項。」
「C++ 正在積極進步,而且已經在實際應用當中發揮出良好的靈活性和性能表現。當前,各類項目中部署的 C++ 代碼多達數十億行。」
「所以無論是直接替換掉這些 C++ 代碼,還是所謂讓它們更加『安全』,都會是一項艱巨的任務。如果沒有分期分批、持之以恆的努力,大量不安全的 C 代碼和陳舊 C++ 代碼將『永遠』存在。縱觀歷史,在顛覆性革命出現慘烈失敗之後,更溫和的演進方式往往能夠最終取得成功。」
參考鏈接:
https://www.theregister.com/2022/09/20/rust_microsoft_c/
https://devclass.com/2022/09/20/microsoft-azure-cto-on-c-c/
https://www.csoonline.com/article/2998952/sony-bmg-rootkit-scandal-10-years-later.html
https://news.ycombinator.com/item?id=32905885
https://www.reddit.com/r/programming/comments/xj3muf/mark_russinovich_azure_cto_its_time_to_halt/
NGINX 局限太多,Cloudflare 最終放棄它並用 Rust 自研了全新替代品
CEO 們突然介入到 IT 建設, 企業紛紛遷出 VM 虛擬機基礎設施
「羊了個羊」一天宕機 3 次,馬化騰闢謠日賺 468 萬元;60 歲史玉柱「重返一線」改遊戲;曠工為由辭退員工,脈脈被判賠 24 萬|Q 資訊
Adobe 豪擲 200 億美元收購 Figma,開發者卻將其罵上了「熱搜」
ArchSummit 全球架構師峰會開幕倒計時 5 天。本次杭州站以「數字化轉型下的架構升級」為主題,13 個專題演講論壇,匯聚近 70 位技術專家,分享國內外一線大廠和優秀技術團隊的 80 多個前沿技術落地實踐案例。了解更多請掃描下方二維碼或點擊閱讀原文。