一週內的第二步:編譯器與工具鏈全數釋出

8 月 18 日,Modular 在官方部落格宣布 Mojo 語言完整開源:整個編譯器與工具鏈的原始碼全數釋出。文章把時間點說得直接——上週 Mojo 剛以原始碼穩定的狀態邁入 1.0,今天我們開源整個編譯器與工具鏈。距離 8 月 11 日的 1.0 發布,只隔七天。

這一步兌現的是一個掛在檯面上超過半年的承諾。1.0 的發布文章當時寫明:承諾不變,2026 年內會開源 Mojo 編譯器與工具鏈。本站在 Mojo 1.0 的報導中即指出,編譯器開源是檢驗這份穩定承諾誠意的關鍵一步——現在答案揭曉,而且沒有拖到年底。

授權與去處也一併講清楚:Apache 2.0 含 LLVM 例外,原始碼放在 GitHub 的 modular 儲存庫。發布日期落在舊金山 ModCon 的同一天,正是 1.0 文章預告會進一步說明開源計畫的場合。

開源了什麼:標準庫之外,編譯管線全線透明

對不寫編譯器的人來說,「編譯器與工具鏈開源」需要翻譯。Mojo 的分層大致是:最上層是 Python 風格的語法;標準庫是語言隨附的模組與工具;編譯器是把 Mojo 原始碼一路轉譯到 MLIR、再產出各硬體機器碼的引擎;工具鏈則是圍繞引擎運轉的周邊,讓語言可以日常使用。MLIR 是 Chris Lattner 主導設計的編譯基礎設施,Mojo 是第一個從無到有以 MLIR 建構的程式語言——這也是它敢於主張一套語法從應用層寫到 GPU 核心的原因。

2024 年 3 月那次開源,開的是標準庫。貢獻者從此可以改這門語言的配備,但廚房仍然上鎖:你交出的標準庫程式碼,是由一個看不見內部的編譯器編出來的;官方當時以釋出編譯器建置的方式,讓貢獻者能對著它測試改動,但編譯器本身始終是黑箱。現在黑箱打開:從語法解析、型別檢查,到 MLIR 降階與後端程式碼產生的整條管線,都攤在原始碼裡。

具體的差別可以用一個場景說明。過去開發者追蹤 Mojo 的效能問題,最多只能看到編譯結果與錯誤訊息;現在可以一路讀進編譯器內部,看型別怎麼推導、記憶體配置怎麼決定、程式碼怎麼被降到硬體上。對一門以「Python 語法、系統語言效能」為賣點的語言,編譯器正是效能主張的發生地——看得到,才談得上驗證。

編譯管線各站點的外殼全部卸下:Mojo 原始碼卷軸進入 MLIR 齒輪組,輸出 CPU 與 GPU 的機器碼版,全程開放檢視。
圖1 過去標準庫開放、編譯器仍是黑箱;現在從原始碼到機器碼的每一站都攤在原始碼裡,開發者可以對著管線逐站查證效能主張。

授權結構:Apache 2.0 為何加上 LLVM 例外

授權不是行政細節,是治理宣言。Apache 2.0 是寬鬆授權:允許商業使用、修改與再散布,內建專利授權條款,不要求衍生作品公開原始碼。LLVM 例外則是 LLVM 專案自己的慣例,允許部分程式以更寬鬆的條件嵌入其他專案。Mojo 這次採用的正是「Apache 2.0 加 LLVM 例外」,等於直接沿用 LLVM 與 Clang 生態的授權結構——也就是 Chris Lattner 一手建立起來的編譯器世界的規矩。官方部落格對這個選擇的說法是:Apache 2.0 是程式語言與編譯器的金牌標準,理由是它給使用者很大的彈性。

對照主流語言的授權版圖,這個位置很清楚:Swift 是 Apache 2.0,Rust 是 Apache 與 MIT 雙授權,Go 採 BSD。Mojo 選在同一陣營——寬鬆、商業友善、專利風險低。這對一家已於 7 月 29 日完成被 Qualcomm 收購的公司尤其重要:易主之後的語言若走向封閉,開發者的觀望會立刻轉為撤退;寬鬆授權加上完整原始碼在手,是說服生態繼續投入的最直接籌碼。

分階段開源:看得到,還不能改

開源有兩個常被混為一談的層次:原始碼看得到,與接受外部貢獻。Modular 對這件事的立場,早在說明開源路線的官方文章裡就寫明:開源是他們的基因,Mojo 要發揮全部潛力就必須開源,而開源有很多種做法,有些專案公開原始碼但不接受外部貢獻。這次落地正是那個劇本:編譯器與工具鏈的原始碼先全面公開,但暫不接受相關貢獻;官方目標是在今年底前,把編譯器與工具的貢獻管道也打開。標準庫則自 2024 年起持續收受社群貢獻。

儲存庫的貢獻說明現在列出的範圍是:Mojo 標準庫、MAX 加速函式庫、MAX 模型架構、程式範例與 Mojo 文件。編譯器與工具鏈不在這份清單上,與公告的時程一致——現在是可讀,還不是可改。

這種「先看得到、再改得到」的路徑有其工程邏輯。編譯器是整個語言的中樞,審查標準與測試基礎設施沒有就位就開放提交,受傷的會是貢獻者自己。標準庫的經驗顯示規模可以做多大:1.0 發布時,近 200 名貢獻者合入超過 1,100 個 pull request、改動超過 20 萬行程式碼。編譯器的複雜度與審查負荷是另一個量級,先公開再逐段開放貢獻,是可辯護的順序——但順序本身也要被追蹤:承諾的兌現紀錄,現在是這個專案最重要的信用資產。

時間軸:從 2024 年標準庫到 1.0 後七天

把鏡頭拉遠,Mojo 的開源是分三段走的。第一段,2024 年 3 月:標準庫以 Apache 2.0 含 LLVM 例外開源,開始接受社群貢獻。第二段,2026 年 8 月 11 日:1.0 發布,原始碼穩定承諾生效。第三段,8 月 18 日:編譯器與工具鏈全數釋出。中間還有一個不該忽略的節點:7 月 29 日,Modular 完成被 Qualcomm 收購的程序,本站先前報導有所著墨。也就是說,1.0 與全源開源這兩個最關鍵的里程碑,都落在易主之後——對新東家而言,這是最省話的信任宣言:語言的根基,現在任何人都可以拿走一份。

時間軸道路:2024 年 3 月標準庫開源、7 月 29 日加入 Qualcomm、8 月 11 日 Mojo 1.0、8 月 18 日編譯器開源,最後兩站只隔七天。
圖2 開源分三段走:2024 年先開標準庫,1.0 立下穩定底座後七天,編譯器與工具鏈跟著全數釋出;易主 Qualcomm 落在兩個里程碑之間。

七天內連續兩步,節奏本身就是訊號。1.0 處理的是「語言會不會一直變」的疑慮,開源處理的是「語言會不會被收走」的疑慮;前者靠版本紀律,後者靠授權與原始碼。兩件事在一週內先後落地,等於把評估 Mojo 的兩大前提一次收掉。

對開發者與企業:現在能做什麼

對開發者,最直接的變化是可驗證性。以前要相信 Mojo 的效能主張,只能跑基準測試;現在可以讀到主張的實作本身。對貢獻者,標準庫的參與門檻進一步下降——改標準庫不再需要對著黑箱提交,可以對照編譯器原始碼理解後果。對企業與研究團隊,開源移除的是供應商風險:即使 Modular 或 Qualcomm 未來改變路線,語言的完整實作已經在公共領域,fork 的選項存在,談判籌碼就存在。

務實的下一步可以分三種角色。正在評估 Mojo 的團隊,現在可以把「原始碼可取得、授權可商用」寫進盡職調查清單的已勾選欄位。想參與的開發者,從標準庫與文件下手,等年底編譯器貢獻管道打開再進場核心。而對語言設計有興趣的人,這是少數能完整讀到「以 MLIR 從零建構的語言」全貌的機會——從語法定義到後端程式碼產生,一路讀完。

限制與值得追蹤的指標

必須誠實面對邊界。第一,開源不等於開放貢獻:編譯器目前是可讀不可改,年底時程能否兌現,是接下來最值得追蹤的單一指標。第二,開源也不等於治理轉移:路線圖、審查與發布節奏仍由 Modular 主導,現有公告中未見基金會或多方治理的規畫;開源保障的是「拿得到的東西」,不是「誰決定方向」。第三,此次公告明言涵蓋編譯器與工具鏈,儲存庫同時收錄 MAX 平台的開放部分,但哪些環節仍在商業授權範圍,需以各目錄的授權檔與官方文件為準。第四,開源不會自動讓語言變快或變好——貢獻動能、套件生態與實際採用,才是接下來幾季見真章的地方。

值得追蹤的指標因此很明確:年底前編譯器貢獻管道是否如期開放;標準庫的貢獻速度在編譯器可讀之後是否加快;官方對 Mojo 2.0 實驗旗標的進一步說明;以及 Qualcomm 體系內 Mojo 與 MAX 的整合案例。1.0 收掉了「會不會變」,開源收掉了「會不會被收走」;對這門語言,剩下的問題只有一個——有沒有人用。