

一次选型评审,技术方案都过了,卡在法务:产品要通过网络对外提供基于 MinIO 的能力,而 MinIO 是 AGPL v3,按条款"网络服务即分发",得把整个服务的源码开源。团队不想为用一个存储组件把核心业务敞开,于是开始找 S3 替代。
协议这件事,比"用 Rust 还是 Go 写的"更早决定你到底能不能用。下面把两家的协议摊开比。
1. 两份协议,两套义务
RustFS 用 Apache 2.0 ,MinIO 用 GNU AGPL v3.0。表面都是开源,约束差很多:

- 传染性:Apache 2.0 几乎不传染,改了也只需保留声明;AGPL v3 的"强 copyleft"会要求衍生作品整体开源。
- 网络服务条款:这是 AGPL 最特殊的一条------哪怕你不分发二进制,只要通过网络提供基于 AGPL 代码的功能,就要开源整个服务。Apache 2.0 没有这条。
- 商业集成:把存储塞进闭源商业产品,Apache 2.0 基本无碍;AGPL v3 下要么开源、要么买商业授权。
对一个要对外提供 SaaS 的团队,AGPL 的"网络条款"是真正会触发义务的雷,不是纸面风险。
2. MinIO 社区版的变化:不只是协议
光看协议还不够,MinIO 社区版的获取方式也变了。官方 README 明确:社区版改为仅源码分发,不再提供预编译二进制 ;控制台(Web UI)从社区版移除;历史二进制不再维护。GitHub 仓库镜像也标了"不再维护 / maintenance mode"。要装社区版得自己 go install github.com/minio/minio@latest 或从 Dockerfile 构建,生产环境这意味着你要自己背构建、打镜像、跟安全更新的链路。
RustFS 这边是 Apache 2.0,预编译镜像正常发,docker pull rustfs/rustfs:1.0.0-rc.1 就能跑,协议上也不会因为"通过网络提供服务"被要求公开业务源码。
3. 迁移:协议风险是顺手消除的
从用法上,RustFS 是 MinIO 的 drop-in 替代:同样的 S3 API、同样的 mc/aws-cli 工具、同样的 endpoint 模式。把应用的 endpoint 从 MinIO 指到 RustFS,代码基本不改:
bash
mc alias set minio http://minio.internal:9000 $AK $SK
mc alias set rustfs http://rustfs.internal:9000 $AK $SK
mc mirror --watch minio/my-bucket rustfs/my-bucket
迁移数据用 mc mirror 增量追平,协议层面的"要不要开源业务"这件事,在切换 endpoint 的那一刻就消失了。
4. 边界:RustFS 还年轻
换协议自由不等于没有功课。RustFS 目前处于 1.0.0-rc 阶段,社区和生态比 MinIO 年轻,生产前请固定版本、先备份再迁移,别拿 latest 直接上。它的官方 Helm Chart、S3 兼容性矩阵、事件通知、可观测性都在快速完善中,选型时把"版本固定 + 备份策略"写进上线清单就行。
5. 总结与下一步
- 协议是第一道坎:Apache 2.0(RustFS)无强 copyleft、无网络服务开源条款;AGPL v3(MinIO)会触发衍生作品开源。
- MinIO 社区版已改为仅源码分发、不再发预编译二进制、控制台移除,生产要自己背构建链路。
- 迁移是 drop-in:换 endpoint 即可,
mc mirror增量追平,协议风险顺手消除。 - 边界:RustFS 在 rc 阶段,生产固定版本、先备份。
下一步:把你被法务打回的那个桶,按第 3 节把 endpoint 指到 RustFS 试跑 mc mirror --dry-run,确认数据能迁、协议不再卡,再决定全量切换。
以下是深入学习 RustFS 的推荐资源:RustFS
官方文档: RustFS 官方文档- 提供架构、安装指南和 API 参考。
GitHub 仓库: GitHub 仓库 - 获取源代码、提交问题或贡献代码。
社区支持: GitHub Discussions- 与开发者交流经验和解决方案。
意见反馈:GitHub Issues