Canonical與英國布里斯托大學展開3年研究合作,研究如何提高C程式自動轉成Rust的可靠度,目標是建立一套完整轉換平臺,處理數十萬行C程式碼的大型儲存庫。研究將結合大型語言模型、程式分析、測試與形式化方法(formal methods),除了產生Rust程式碼,也要確認轉換後的程式維持原本行為,降低大型軟體遷移需要人工修正的成本與風險。
現有C轉Rust工具雖然能處理大量程式碼,但常直接沿用C原本的程式結構,產生的Rust可能大量使用unsafe操作,也就是部分程式碼不再受到Rust一般的記憶體安全檢查保護,或保留不符合Rust慣用方式的寫法。
LLM則能在範圍較小、需求明確的程式上產生較自然的Rust,但面對大型儲存庫時,較難同時掌握跨檔案的資料型別、相依關係與程式行為,而且程式碼能夠編譯,也不代表執行結果與原始C程式一致。
研究系統會先分析大型儲存庫,把程式分成可分別處理的區塊,同時保留需要的型別與相依資訊,再由語言模型進行轉換。產生Rust程式碼後,系統會透過模糊測試及更嚴格的程式驗證方法,比對新舊版本是否有相同行為,而要是驗證失敗,再分析可能出錯的位置並嘗試修正。
Canonical也會將AppArmor與snap-confine列為實際研究案例,用兩個專案的現有程式碼測試自動C轉Rust方法。由於長期維護的系統軟體通常包含複雜建置流程、不同作業系統環境的處理方式、特殊錯誤路徑及低階系統操作,比小型測試程式更難自動轉換,Canonical強調,兩個專案目前只是用來驗證研究方法,並不代表已決定以產生的Rust版本取代現有實作。
Canonical近年已在Ubuntu採用以Rust開發的uutils coreutils與sudo-rs等專案,但成熟C程式碼庫往往累積多年錯誤修正、相容性處理與效能最佳化,直接重新開發可能帶來額外成本與風險。此次研究因此把重點放在保留既有程式行為,同時降低轉換成Rust需要的人工作業。
研究計畫由Canonical出資,並獲英國研究與創新署(UKRI)對等支持,由布里斯托大學教授Meng Wang主持,預計於2026年稍晚開始。
Comments (0)