Mojo 编译器全面开源深度解析:Apache 2.0 落地、KGEN 源码结构与中国开发者能做什么
导语
2026 年 8 月 18 日,旧金山 ModCon 大会,Modular 兑现了它最重要的承诺:整个 Mojo 语言——包括编译器与全部工具链——以 Apache 2.0 许可证(含 LLVM 例外条款)全面开源。
这条新闻的份量,需要结合我们一周前对 Mojo 1.0 正式发布 的分析来看:8 月 11 日 Mojo 1.0 落地,交付了源码稳定性承诺;8 月 18 日编译器开源,交付了开源的自由。一周之内,Modular 把"这门语言可以拿来做长期投入"的两块拼图全部补齐。
这背后还有一个关键时间线:7 月 29 日 Qualcomm 完成对 Modular 的收购(Lattner 出任高级副总裁)。被芯片巨头收购三周后,编译器就全面开源——这个动作本身就是对"Modular 是否还能保持中立"质疑的最强回应。
本文将拆解:
- 许可证的准确边界:Apache 2.0 + LLVM 例外到底是什么、能做什么不能做什么
- KGEN 编译器源码的真实结构:MojoParser、Elaborator、Interpreter……这些目录各司何职
- 从源码构建 Mojo:Bazel 构建体系怎么用
- 治理的现状与边界:编译器 PR 何时开放?为什么"开源"不等于"开放治理"?
- 开源战略的完整拼图:Windows 原生支持、MAX 源可用、Qualcomm 硬件生态
一、事件本身:ModCon 2026 的四大宣布
ModCon 2026 的 keynote 一口气宣布了四件事(Modular 官方公告):
| 宣布 | 内容 |
|---|---|
| Mojo 全面开源 | 编译器 + 全部工具链,Apache 2.0(含 LLVM 例外) |
| Modular Cloud GA | 面向公众开放,旗舰客户 MiniMax(M3 模型,每分钟数十亿 tokens) |
| 硬件生态扩展 | 新增支持 AWS Trainium、Google TPU、Qualcomm Cloud AI 100 / Dragonfly 加速器 |
| Windows 原生支持 | 与微软 Windows 团队官方合作,原生 Windows 版 Mojo 在路上 |
其中 Windows 支持尤其值得注意:Mojo 此前只有 macOS 和 Linux,Windows 开发者只能通过 WSL 使用。微软 Windows 平台 CVP Logan Iyer 亲自站台背书——这是微软对一门非微软语言罕见的官方合作姿态,也说明 Mojo 在 AI 系统编程生态中的位置已经被主流平台认可。
一句话概括:8 月 18 日是"Mojo 从公司项目变成公共基础设施"的一天。
二、许可证深度解析:Apache 2.0 + LLVM 例外
2.1 许可证文本实测
我们直接读取了 modular/modular 仓库根目录的 LICENSE 文件,开篇即声明:
The Modular repository is licensed under the Apache License v2.0 with LLVM Exceptions
这个组合很讲究,需要拆开看:
Apache License 2.0(基础):宽松许可,允许商用、修改、分发、再许可。它比 GPL 友好得多——你在 Mojo 编译器上做的任何修改,不需要对外开源。这保证了:无论是企业做私有定制,还是云厂商做商业发行,都没有传染性义务。
LLVM Exceptions(例外条款):这是关键。Apache 2.0 本身不含专利报复条款的例外,而 LLVM 例外明确补充了针对编译器输出产物的豁免——编译器生成的机器码/目标文件,不视为"派生作品"。换句话说:你用 Mojo 编译器编译出来的任何程序,许可证完全归你,与 Mojo 的开源许可证无关。
这正是 LLVM 生态的经典做法(LLVM 自身就是 Apache 2.0 with LLVM Exception),Mojo 沿用了这一套,说明编译器层面与 LLVM 系保持了一致的法律框架。
2.2 仓库实测:27K+ stars 的主仓库
开源代码全部并入 Modular 的主仓库 modular/modular(不是单独拆一个编译器仓库):
| 指标 | 实测值 |
|---|---|
| 仓库名 | modular/modular |
| 描述 | "The Modular Platform (includes MAX & Mojo)" |
| Stars | 27,377(且持续增长中) |
| 主分支 | main |
| 最近提交 | 2026-08-19(开源后仍在高频迭代) |
| 构建系统 | Bazel(./bazelw 包装器) |
| 仓库体量 | 约 878 MB(含全部历史) |
仓库里同时包含 MAX 框架与 Mojo 语言的全部开源组件——开源不是象征性的"放个代码",而是把日常开发真正搬进了公开仓库。
三、KGEN:Mojo 编译器的源码结构
3.1 KGEN 是什么
Mojo 编译器内部代号 KGEN,位于仓库 KGEN/ 目录。我们实测了它的目录结构:
KGEN/
├── BUILD.bazel # Bazel 构建定义
├── include/KGEN/ # 公共头文件
├── lib/ # 编译器核心实现
├── test/ # 集成测试
├── unittests/ # 单元测试
├── tools/ # 配套工具
├── utils/ # 工具函数
└── docs/ # 文档3.2 编译器核心模块(KGEN/lib 实测)
KGEN/lib/
├── MojoParser/ # 词法 + 语法解析(Mojo 前端)
├── Elaborator/ # 语义分析 + 类型检查 + 宏展开
├── KGENDialect/ # Mojo 中间表示方言(MLIR 之上)
├── KGENToLLVM/ # KGEN 方言 → LLVM IR 的下降
├── Interpreter/ # 解释器(REPL/即时执行路径)
├── ExecutionEngine/ # 执行引擎(JIT)
├── CompilerRT/ # 编译器运行时库
├── MojoJupyter/ # Jupyter 内核支持
├── MojoLLDB/ # LLDB 调试器插件
├── HLCFDialect/ # 高层控制流方言
├── DialectChecksum/ # 方言校验
└── LowerLIT/ # 方言下降工具这套结构与 Lattner 的 MLIR 世界观一脉相承:前端解析 → Elaborator 语义分析 → MLIR 方言(KGENDialect)→ 逐层下降 → LLVM IR → 机器码。Mojo 的编译管线不是"从零写一个编译器",而是"在 MLIR 生态里长出一个新方言"——这正是 Lattner 二十年编译器工程经验的直接体现。
3.3 编译器核心模块的技术定位(逐目录解读)
| 模块 | 职责 | 对应编译阶段 |
|---|---|---|
MojoParser/ | Mojo 词法与语法解析 | 前端:源码 → AST |
Elaborator/ | 语义分析、类型检查、宏展开、interior origins 的 lifetime 检查 | 前端:AST → 带类型信息的 IR |
KGENDialect/ | Mojo 专属中间表示(MLIR 方言) | 中端:语言无关 IR |
KGENToLLVM/ | KGEN 方言 → LLVM IR 的下降 | 后端入口 |
Interpreter/ | 解释执行路径(REPL / mojo run 快速路径) | 执行 |
ExecutionEngine/ | JIT 执行引擎 | 执行 |
CompilerRT/ | 编译器运行时支撑(内存管理钩子等) | 运行时 |
MojoJupyter/ | Jupyter 内核(%mojo 魔法命令背后) | 工具链 |
MojoLLDB/ | LLDB 调试器插件 | 工具链 |
HLCFDialect/ | 高层控制流方言(循环/分支的结构化表示) | 中端 |
这套布局直接把 Mojo 的"性格"写在目录名里:它不是一个前端 + 一个后端的传统编译器,而是一个方言家族。KGENDialect 承载语言语义,HLCFDialect 承载控制流结构,再经过 KGENToLLVM 一路下降——任何想给 Mojo 增加新硬件后端的人,入口非常清晰:在 LLVM 后端层接入自己的 Target。
3.4 从源码构建 Mojo(Bazel 体系实测)
仓库根目录提供 bazelw 包装脚本,一切构建走 Bazel:
# 构建所有目标
./bazelw build //...
# 构建指定模块(例如 Mojo 标准库)
./bazelw build //mojo/stdlib/...
# 运行全部测试
./bazelw test //...
# 运行单个测试
./bazelw test //max/kernels/test/linalg:test_matmul此外仓库大量使用 Pixi(conda 生态的现代包管理器)管理开发环境:
# 在含 pixi.toml 的目录初始化环境
pixi install
# 用环境内 Mojo 直接跑文件
pixi run mojo hello.mojo
# 格式化代码
pixi run mojo format ./也就是说:任何一个开发者,现在都可以 clone 仓库、跑通构建、改编译器源码、跑全部测试。这是"可读可改可测试"的完整自由。
四、治理边界:开源 ≠ 开放治理
这是本文想重点讲清楚的一点。代码开源了,但贡献通道还没有全开。
4.1 现状:双轨制
Modular 官方公告明确说:"我们还没有准备好接受编译器与工具链的贡献",目标是 2026 年底前 开放。当前的实际状态:
| 组件 | 开源时间 | 外部 PR |
|---|---|---|
| Mojo 标准库 | 2024 年 3 月 | ✅ 一直开放 |
| MAX GPU/CPU 内核 | 2024-2025 | ✅ 开放 |
| Mojo 编译器 + 工具链 | 2026-08-18 | ⛔ 冻结至 2026 年底 |
社区贡献数据(Mojo 1.0 发布时官方数据):
- 标准库贡献者:近 200 人
- 合并的 PR:1100+
- 改动代码:20 万+ 行
但这些贡献全部集中在标准库层面。编译器本身的 PR,现在提了也不会被合并——Modular 需要一个过渡期来建立编译器贡献的评审流程和治理框架。
4.2 MAX 许可证变更:device usage 限制移除 + source-available
ModCon 上还有一条容易被 Mojo 开源盖过的消息:MAX 平台的许可证也变了:
- device usage 限制移除:旧版 MAX 许可证包含"只能在特定设备类别上使用"的条款,现在彻底移除——你可以在任何硬件上跑 MAX,不再受授权限制;
- MAX 转为 source-available:配合一个 open alliance program(开放联盟计划),让更广泛的生态可以"参与共建 MAX 平台"。
这是一个分层开源策略的典型结构:
| 层 | 许可证 | 状态 |
|---|---|---|
| Mojo 语言 + 编译器 + 工具链 | Apache 2.0 + LLVM 例外 | 全面开源(可自由构建/分发) |
| MAX 源码 | source-available | 可读可研究,配合开放联盟计划共建 |
| MAX 预构建产物 | Modular Community License | 使用受限,官方分发 |
理解这个分层很重要:Mojo 是"完全开源"的,MAX 是"源可用"的。两者是不同的承诺,别混为一谈。
4.3 开源与开放治理的区别
Reddit 上 r/ProgrammingLanguages 的讨论一针见血:
"Open source and open governance are different things, and Mojo currently has only the first."
翻译过来就是:你能看到、能改、能分叉,但暂时不能"共建"。这对个人开发者影响不大(个人用开源编译器完全自由),但对想深度参与编译器开发的组织/贡献者,需要等到 2026 年底贡献通道开放。
另外还有一块灰色地带:MAX 平台的预编译构建产物仍在 Modular Community License 下分发,不在 Apache 2.0 范围内。并且——Modular 官方承认——定制 MAX 内核/模型时,仍然需要一个预编译的 Mojo 编译器二进制。也就是说:开源的是"全量构建 Mojo 的能力",而 MAX 平台的使用仍部分依赖 Modular 分发的二进制。
五、开源战略的完整拼图:一次 Qualcomm 收购后的信任重建
5.1 时间线的深意
把最近一个月的事件串起来看:
| 日期 | 事件 | 意义 |
|---|---|---|
| 7 月 29 日 | Qualcomm 完成收购 Modular | Lattner 出任高级副总裁;社区担忧"独立中立性" |
| 8 月 11 日 | Mojo 1.0 发布 | 源码稳定性承诺落地 |
| 8 月 18 日 | 编译器全面开源 | 开源自由落地;回应"被收购后会不会闭源"的质疑 |
被芯片巨头收购三周后,核心编译器全面开源——这个动作的战略意图非常清晰:用开源作为信任锚点,对冲"Mojo 会不会变成 Qualcomm 私器"的疑虑。Phoronix 的评论点出了另一层:"鉴于 Qualcomm 在开源上的过往记录,我原本没期待收购后会有开源动作。"
而 Modular 在 ModCon 上的表述也刻意强调中立性:平台将继续支持与 Qualcomm 竞争的其他硬件——AWS Trainium、Google TPU 与 Qualcomm 自家加速器并列支持,就是要用行动证明"Mojo 不属于任何一家芯片厂"。
5.2 开源路径:渐进式放开的四年
Mojo 的开源不是一蹴而就,而是一条清晰的渐进路径:
- 2023 年:Mojo 首次公开,闭源
- 2024 年 3 月:标准库开源(Apache 2.0 + LLVM 例外),接受社区贡献
- 2024-2025:GPU/CPU 内核源码逐步放出(官方报告 45 万+ 行内核代码)
- 2026 年 8 月 11 日:Mojo 1.0,源码稳定性承诺
- 2026 年 8 月 18 日:编译器 + 工具链全面开源
Lattner 本人对此的解释是:"小而精的设计团队最适合找到语言的'灵魂',而广泛的社区反馈是打破行业回音壁的关键。"——先用闭源保证语言设计的连贯性,再用开源换取生态的广度。
5.3 Windows 支持与硬件版图
开源之外,ModCon 还透露了两条重要的生态信息:
Windows 原生支持:与微软 Windows 团队合作,原生 Windows 版 Mojo 开发中(此前仅 WSL)。这将打开数百万 Windows 开发者的市场。
硬件版图:Modular Platform 的加速器支持扩展为:CPU + GPU(NVIDIA/AMD)+ AWS Trainium + Google TPU + Qualcomm Cloud AI 100 + Qualcomm Dragonfly。Mojo 作为"异构计算统一语言"的野心,正在变成现实。
六、这对开发者意味着什么
6.1 三个"终于可以"
终于可以读编译器源码了:想知道
x[unsafe_offset=i]到底怎么下降的?读KGEN/lib/KGENToLLVM/。想理解 interior origins 的 lifetime 检查?读KGEN/lib/Elaborator/。Mojo 之前是黑盒,现在源码就是最好的文档。终于可以构建自己的 Mojo:clone +
./bazelw build //...,你可以得到一份自己从源码编译的 Mojo 工具链。想给 Mojo 移植新平台?现在有了完整的起点。终于可以放心做长期投入:许可证宽松(Apache 2.0 无传染性)+ 源码稳定(1.0 承诺)+ 源码可用(编译器开源)——三块拼图齐了。你的 Mojo 代码不会被锁死在任何公司的商业策略里。
6.2 三个"暂时不要期待"
- 编译器 PR 合并:2026 年底前,编译器贡献通道冻结。想深度共建,请耐心等到贡献开放。
- MAX 全开源:MAX 平台预构建产物仍在 Modular Community License 下。开源的是 Mojo 语言 + 编译器,不是整个 MAX 服务栈。
- "社区治理":目前仍是 Modular(Qualcomm 旗下)主导的单向治理。项目能否走向真正的多利益方治理,要看 2026 年底贡献开放后的实际运转。
6.3 中国开发者视角
对中文社区的开发者,Mojo 开源有几层直接价值:
- 学习价值:Mojo 编译器是"MLIR 落地最佳实践"的活教材——一个完整的、生产级、基于 MLIR 方言的系统语言编译器,这在开源世界是稀缺样本。想学编译器后端/MLIR 的开发者,这是绝佳研究素材。
- 工具链机会:编译器开源后,IDE 插件、调试器、linter、格式化器、包管理工具的第三方实现都成为可能——不再需要等 Modular 官方排期。
- 硬件适配机会:开源编译器 + Apache 2.0 宽松许可,意味着国内芯片厂商(无论是 GPU 还是 NPU)都可以基于 Mojo 编译器做自家加速器的后端适配,无需担心授权问题。
6.4 与同类语言开源对比:Mojo 处在什么位置
把 Mojo 的开源放进系统语言谱系里看,能更清楚它的成色:
| 语言 | 编译器许可证 | 治理模式 | 备注 |
|---|---|---|---|
| Mojo | Apache 2.0 + LLVM 例外 | 公司主导,PR 暂冻结 | 2026 年底开放贡献 |
| Rust | MIT/Apache 2.0 双许可 | 社区主导(Rust 基金会) | 治理成熟度标杆 |
| Zig | MIT | 社区 + 创始主导 | 0.16 阶段 |
| Swift | Apache 2.0 | 社区 + Apple 主导 | 与 Mojo 模式最接近 |
| V | MIT | 公司 + 社区 | 0.5 阶段 |
| 传统 C/C++ 系(GCC) | GPL | 自由软件社区 | 传染性最强 |
Mojo 的许可证选择与 Swift 完全一致(Apache 2.0,无传染性),但治理成熟度目前接近 Zig 早期——公司主导、贡献通道未开。真正的分水岭是 2026 年底:贡献开放后,Mojo 是走向 Rust 式的社区治理,还是停留在 Swift 式的"公司主导 + 社区共建",将决定它的长期生态走向。
七、FAQ:开源后开发者最常问的问题
Q1:现在能用 Mojo 写商业软件吗?
可以。Apache 2.0 是宽松许可证,无传染性。你写的 Mojo 代码、以及编译器生成的产物,完全归你所有。与用 Rust/Swift 写商业软件的法律风险相当。
Q2:需要给 Modular 付钱吗?
不需要。编译器、标准库、工具链全部免费开源。需要付费的是 Modular Cloud 的推理服务(按 token 计费)和企业级支持,用不用全凭自愿。
Q3:我的 Mojo 代码会被"锁死"吗?
不会。三个层面都自由:源码稳定(1.0 承诺)、编译器可自建(源码构建)、许可证宽松(Apache 2.0)。即便未来 Modular 停止维护,你也有完整的工具链和源码可以继续。
Q4:现在可以给编译器提 PR 吗?
可以提,但不会被合并。编译器贡献通道预计 2026 年底开放。标准库和 MAX 内核的贡献一直开放。
Q5:Windows 原生版什么时候来?
ModCon 只宣布了"与微软合作开发中",没有给具体时间表。保守估计 2026 年 Q4 到 2027 年上半年之间能看到首个原生版本。在此之前 Windows 用户继续用 WSL。
Q6:开源后 Mojo 和 MAX 是什么关系?
Mojo 是语言(完全开源),MAX 是平台(source-available + 开放联盟)。Mojo 可以脱离 MAX 独立使用;需要 GPU/加速器编程时,MAX 提供设备管理、张量运算等 API。
Q7:从哪里开始读编译器源码?
推荐路径:KGEN/lib/MojoParser/(语法)→ KGEN/lib/Elaborator/(语义+类型)→ KGEN/lib/KGENDialect/(IR)→ KGEN/lib/KGENToLLVM/(后端)。配合仓库 docs/ 目录和 MLIR 官方文档交叉阅读。
八、总结
| 维度 | 结论 |
|---|---|
| 事件 | 8 月 18 日 ModCon:Mojo 编译器 + 工具链 Apache 2.0(含 LLVM 例外)全面开源 |
| 许可证 | 宽松、无传染性;编译器输出归你所有;与 LLVM 法律框架一致 |
| 仓库 | modular/modular 主仓库,27K+ stars,KGEN 编译器目录 + Bazel 构建体系 |
| 治理 | 标准库贡献开放(200 人/1100+ PR);编译器 PR 冻结至 2026 年底 |
| 战略 | Qualcomm 收购 3 周后开源 = 信任重建;Windows 原生支持 + 多硬件生态同步推进 |
| 对开发者 | 可读、可改、可构建、可长期投入;共建需等贡献通道开放 |
Mojo 开源这件事,用一句话总结最准确:这是"source available"到"open source"的许可证转换,也是"语言稳定"到"生态开放"的接力。社区协作的部分要等下半场(2026 年底贡献开放),但自由的部分——读源码、改源码、构建源码、基于它做任何事——今天就已经完全属于你了。
结合我们此前对 Mojo 1.0 的解读:8 月 11 日的 1.0 是"语言的成年礼",8 月 18 日的开源是"语言走向公共基础设施"的宣言。Mojo 是否值得押注,现在是评估的最好时机——因为这次,你可以自己看源代码来下判断。
参考来源
- ModCon 2026: Open source, open cloud, open silicon(Modular 官方博客,2026-08-18)
- modular/modular GitHub 仓库(LICENSE / KGEN / bazelw 实测)
- Mojo 官网(mojolang.org,开源横幅声明)
- Modular's Mojo Language Now Open-Source Following Qualcomm Acquisition(Phoronix,2026-08-18)
- Mojo Programming Language Goes Fully Open Source(linuxiac,2026-08-19)
- Modular open-sources Mojo three weeks after Qualcomm acquisition(RuntimeWire,2026-08-19)
- Mojo Language Open Source: License, Limits, and Python Reality(AIReiter,2026-08-19)
- 高通收下 Modular 一个月,Mojo 编译器开源(Cocoloop,2026-08-19)
- Mojo 1.0 正式发布深度解析(本站,2026-08-18)

