Loading...
正在加载...
请稍候

MinIO 的 AGPL 困局,被一个 Rust 项目撕开了口子

✨步子哥 (steper) 2026年09月18日 21:47

MinIO 的 AGPL 困局,被一个 Rust 项目撕开了口子

一个让法务头疼的协议

一家公司想自建对象存储。技术选型会上,工程师说:"用 MinIO 吧,Go 写的,S3 兼容,社区活跃。"法务翻到协议那一行,脸色变了——AGPLv3

AGPL 的杀伤力在于"网络使用条款"。GPL 只在分发软件时触发开源义务,AGPL 在"通过网络提供服务"时也触发。这意味着:如果你用 MinIO 搭一个 S3 服务对外提供,你的整个服务端代码(包括调用 MinIO 的业务逻辑)理论上都得开源。

大公司的法务部门看到 AGPL 就头疼。Google 内部直接禁用 AGPL 协议的依赖。阿里、腾讯、字节都有类似的内部红线。结果就是:MinIO 功能再强、性能再好,很多企业根本不敢碰。

替代选项不多。Ceph 太重,部署复杂,适合超大规模场景。AWS S3 太贵。自研?没那个工程能力。

rustfs/rustfs 切入的就是这个空档:用 Rust 重写一个 MinIO 的等价物,但用 Apache 2.0 协议发布。

RustFS 是什么

一句话:RustFS 是一个用 Rust 写的、S3 兼容的、分布式对象存储系统,Apache 2.0 协议。

它的定位非常清晰——对标 MinIO,但在两个维度做差异化:

  1. 协议:Apache 2.0(宽松,商业友好)vs MinIO 的 AGPLv3(传染性,商业受限)
  2. 语言:Rust(内存安全 + 零成本抽象)vs Go(GC + 运行时)

这两个差异点不是随机的,而是相互强化的。AGPL 协议让企业不敢用 MinIO,Apache 2.0 让企业敢用 RustFS。Rust 的内存安全让 RustFS 在系统编程层面比 Go 更安全(无 data race、无空指针解引用),而性能层面两者差距不大——Go 的 GC 在对象存储这种 I/O 密集场景里不是瓶颈,但 Rust 的零成本抽象让锁-free 数据结构和无分配热路径成为可能。

特性矩阵:和 MinIO 的全面对标

RustFS 的特性表读起来像 MinIO 的镜像:

特性 RustFS 说明
S3 Core API 完整 S3 兼容
分布式模式 横向扩展
单节点模式 小规模部署
版本控制 对象历史
Object Lock (WORM) 合规留存
服务端加密 SSE-S3/SSE-KMS
Bitrot 保护 静默错误检测
纠删码 + 自愈 数据冗余
桶复制 跨区域同步
站点复制 多站点灾备
生命周期管理 自动分层/过期
IAM/策略 细粒度权限
OIDC/SSO 企业身份集成
OpenStack Swift API 多协议支持
SFTP/FTPS/WebDAV 文件协议
K8s Helm 云原生部署
S3 Tables (Iceberg REST) 🧪 Preview 数据湖原生

这张表几乎覆盖了 MinIO 的所有核心特性。最后那一行 S3 Tables (Iceberg REST) 值得单独说——这是对象存储向数据湖演化的关键一步。

S3 Tables:对象存储的数据湖化

2024 年 AWS re:Invent 发布 S3 Tables,把 Iceberg 表格式原生集成进 S3。这意味着你不再需要单独的 Iceberg catalog 服务(如 Glue、Nessie、Polaris),S3 本身就能管理表的元数据和 manifest。

这对数据湖架构是革命性的。之前的链路是:S3 存数据文件 → Glue/Nessie 存元数据 → Spark/Trino 查询。S3 Tables 把中间环节干掉了,变成:S3 Tables 存数据+元数据 → Spark/Trino 直接查。

RustFS 把这个能力带到了开源世界。它的 S3 Tables 实现是 Iceberg REST Catalog 兼容的,意味着 PyIceberg、DuckDB、Spark 都能直接连。这对自建数据湖的团队是个大消息——你不再需要 AWS,也不需要自己搭 Glue,一个 RustFS 集群就齐活了。

这个特性目前是 Preview 状态,但方向已经清晰:对象存储正在从"存文件"演化成"存表"。 RustFS 在这条路上和 MinIO 同步推进,但用 Apache 2.0 协议降低了采用门槛。

Bitrot 保护:沉默的数据杀手

对象存储有一个被忽视的问题:数据会自己坏掉。

不是磁盘故障那种显式坏掉,而是 bit rot——磁盘或 SSD 上的某个 bit 自己翻转了,文件系统检测不到,文件内容悄悄变化。你的备份里也存着这个坏数据,因为备份是"忠实复制"的。

对个人用户,bitrot 可能几年才碰到一次。但对 PB 级对象存储,每天可能有几百个 bit 在悄悄翻转。如果没有校验机制,你的数据在慢慢腐烂,而你一无所知。

RustFS 的 Bitrot Protection 用 SHA-256 或 Highway Hash 给每个对象块计算校验和,读取时验证。这和 MinIO 的 Bitrot 实现思路一致,但 Rust 的实现可以利用编译期优化——哈希算法的 SIMD 指令在 Rust 里可以通过 std::simd 直接调用,Go 需要依赖汇编或 cgo。

Rust vs Go:对象存储的语言选择

MinIO 用 Go,RustFS 用 Rust。这个选择背后的逻辑值得拆解。

Go 的优势:

  • 开发速度快(语法简单、编译快)
  • 并发模型成熟(goroutine + channel)
  • 生态丰富(S3 SDK、gRPC、etcd 都有成熟 Go 库)
  • 部署简单(单二进制)

Rust 的优势:

  • 内存安全(编译期保证无 data race)
  • 零成本抽象(无 GC、无运行时)
  • 性能可预测(无 GC 暂停)
  • 系统编程能力(可以直接操作硬件、内存映射)

对象存储的核心工作负载是 I/O——读磁盘、写磁盘、网络传输、校验和计算。这些操作都是 CPU + I/O 密集型,GC 暂停的影响有限(因为大部分时间在等 I/O)。所以 RustFS 选 Rust 的主要动机可能不是性能,而是内存安全

对象存储系统是攻击面的关键节点——它存储用户数据、处理认证、暴露 API。一个内存安全 bug(如 buffer overflow)可能导致数据泄露或 RCE。Rust 在编译期消除这类 bug,Go 需要运行时检查(且有些检查不到位,如 data race)。

所以 RustFS 选 Rust 的逻辑是:协议(Apache 2.0)解决商业问题,语言(Rust)解决安全问题。 两者叠加,构成了对 MinIO 的差异化竞争。

性能对比:视频比文字更有说服力

RustFS 的 README 里嵌了一个压力测试视频,对比 RustFS 和 MinIO 在相同硬件下的吞吐。测试环境:

  • CPU: 2 核 Intel Xeon Sapphire Rapids 8475B
  • 内存: 4GB
  • 网络: 15Gbps
  • 磁盘: 4 × 40GB SSD,IOPS 3800/盘

这个配置故意选得很小——2 核 4GB 是入门级服务器配置。在这种资源受限场景下,Rust 的零 GC 优势会更明显,因为 Go 的 GC 暂停在内存紧张时会更频繁。

视频内容我没法在这里展示,但 RustFS 团队公开这个对比本身就是一个信号——他们有信心在公开基准测试里赢 MinIO。MinIO 没有公开回应这个对比,这本身就是一种回应。

协议之战:AGPL vs Apache 2.0

RustFS 的 README 有一句话值得划重点:

RustFS is released under the permissible Apache 2.0 license, avoiding the restrictions of AGPL.

这句话不是技术声明,是商业声明。它在告诉企业用户:你可以放心用 RustFS,不用担心传染性开源义务。

AGPL vs Apache 2.0 的争论在开源社区已经持续了二十年。AGPL 的支持者(包括 MongoDB、Elastic、MinIO)认为:云厂商(AWS、阿里云)拿开源项目做托管服务赚钱,却不回馈社区,AGPL 是唯一能阻止这种"吸血"的协议。Apache 2.0 的支持者认为:AGPL 把企业用户也一起吓跑了,最后项目反而做不大。

两种观点都有道理,但结果很清楚——MongoDB 从 AGPL 切到 SSPL 后股价涨了,Elastic 从 Apache 切到 AGPL 后 AWS 直接 fork 了 Elasticsearch(OpenSearch)。MinIO 在 AGPL 下依然活跃,但企业采用率确实受限。

RustFS 选 Apache 2.0 是务实的选择——它要的是企业采用率,不是协议纯洁性。这个选择能不能撑住商业模式,要看后续。

对象存储的 Rust 时刻

过去几年,Rust 在系统编程领域持续蚕食 C/C++ 的地盘。Linux 内核接受 Rust、Windows 内核接受 Rust、Cloudflare 用 Rust 写 Nginx 替代品(Pingora)、AWS 用 Rust 写 Firecracker。

对象存储是这条线上的下一个目标。MinIO 用 Go 证明了"用现代系统语言写对象存储"是可行的,RustFS 用 Rust 证明了"在 MinIO 的基础上进一步用内存安全语言重写"也是可行的。

这个方向的意义不只是"换个语言"。对象存储是云原生架构的基石——Kubernetes 的持久化卷、AI 训练的数据管道、数据湖的存储层,都依赖对象存储。如果这个基石从 Go 迁移到 Rust,意味着整个云原生栈的内存安全水平提升一个台阶。

RustFS 还在早期阶段(今日 298 stars,对比 MinIO 的 50k+),但方向清晰、执行扎实。Apache 2.0 + Rust + S3 兼容 + Iceberg REST,这四个标签组合在对象存储领域是唯一的。对想自建对象存储又不想碰 AGPL 的团队,RustFS 是 2026 年最值得关注的选项。


项目地址https://github.com/rustfs/rustfs
文档https://docs.rustfs.com/
协议:Apache 2.0
语言:Rust
今日 Stars:298(2026-09-18 GitHub Trending)

讨论回复

加载中...
正在加载回复...

正在加载回复...

推荐
智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

领取 2000万 Tokens 通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力
登录