Announcement

👇Official Account👇

Welcome to join the group & private message

Article first/tail QR code

Skip to content

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)"
Stars27,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:

bash
# 构建所有目标
./bazelw build //...

# 构建指定模块(例如 Mojo 标准库)
./bazelw build //mojo/stdlib/...

# 运行全部测试
./bazelw test //...

# 运行单个测试
./bazelw test //max/kernels/test/linalg:test_matmul

此外仓库大量使用 Pixi(conda 生态的现代包管理器)管理开发环境:

bash
# 在含 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 平台的许可证也变了

  1. device usage 限制移除:旧版 MAX 许可证包含"只能在特定设备类别上使用"的条款,现在彻底移除——你可以在任何硬件上跑 MAX,不再受授权限制;
  2. 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 完成收购 ModularLattner 出任高级副总裁;社区担忧"独立中立性"
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 三个"终于可以"

  1. 终于可以读编译器源码了:想知道 x[unsafe_offset=i] 到底怎么下降的?读 KGEN/lib/KGENToLLVM/。想理解 interior origins 的 lifetime 检查?读 KGEN/lib/Elaborator/。Mojo 之前是黑盒,现在源码就是最好的文档。

  2. 终于可以构建自己的 Mojo:clone + ./bazelw build //...,你可以得到一份自己从源码编译的 Mojo 工具链。想给 Mojo 移植新平台?现在有了完整的起点。

  3. 终于可以放心做长期投入:许可证宽松(Apache 2.0 无传染性)+ 源码稳定(1.0 承诺)+ 源码可用(编译器开源)——三块拼图齐了。你的 Mojo 代码不会被锁死在任何公司的商业策略里。

6.2 三个"暂时不要期待"

  1. 编译器 PR 合并:2026 年底前,编译器贡献通道冻结。想深度共建,请耐心等到贡献开放。
  2. MAX 全开源:MAX 平台预构建产物仍在 Modular Community License 下。开源的是 Mojo 语言 + 编译器,不是整个 MAX 服务栈。
  3. "社区治理":目前仍是 Modular(Qualcomm 旗下)主导的单向治理。项目能否走向真正的多利益方治理,要看 2026 年底贡献开放后的实际运转。

6.3 中国开发者视角

对中文社区的开发者,Mojo 开源有几层直接价值:

  • 学习价值:Mojo 编译器是"MLIR 落地最佳实践"的活教材——一个完整的、生产级、基于 MLIR 方言的系统语言编译器,这在开源世界是稀缺样本。想学编译器后端/MLIR 的开发者,这是绝佳研究素材。
  • 工具链机会:编译器开源后,IDE 插件、调试器、linter、格式化器、包管理工具的第三方实现都成为可能——不再需要等 Modular 官方排期。
  • 硬件适配机会:开源编译器 + Apache 2.0 宽松许可,意味着国内芯片厂商(无论是 GPU 还是 NPU)都可以基于 Mojo 编译器做自家加速器的后端适配,无需担心授权问题。

6.4 与同类语言开源对比:Mojo 处在什么位置

把 Mojo 的开源放进系统语言谱系里看,能更清楚它的成色:

语言编译器许可证治理模式备注
MojoApache 2.0 + LLVM 例外公司主导,PR 暂冻结2026 年底开放贡献
RustMIT/Apache 2.0 双许可社区主导(Rust 基金会)治理成熟度标杆
ZigMIT社区 + 创始主导0.16 阶段
SwiftApache 2.0社区 + Apple 主导与 Mojo 模式最接近
VMIT公司 + 社区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 是否值得押注,现在是评估的最好时机——因为这次,你可以自己看源代码来下判断。


参考来源

上次更新于: