BusyBox GPL v2 许可证合规说明
许可证类型
BusyBox 使用 GNU General Public License v2(GPLv2) 协议发布。这是 FSF(自由软件基金会)维护的开源许可证之一,核心要求是相同方式共享——修改后发布的代码必须以相同协议公开。
BusyBox 的版权持有者是多个贡献者(最初 Bruce Perens,后来 Denys Vlasenko 等),GPL 执行由 Software Freedom Conservancy 代理。如果你发现 GPL 违规,可以写信到 gpl@busybox.net 报告。
对你意味着什么
情况一:下载使用预编译二进制(大多数人)
几乎没限制。GPL 只要求分发代码的人提供源码。你:
- 从网上下载 BusyBox 二进制,个人使用:完全自由
- 在公司内部产品中分发预编译二进制:需要向客户提供 BusyBox 源码或获取源码的途径
情况二:直接编译后不修改(OEM 厂商)
你的产品 → 用原始 BusyBox 编译的二进制
需要做:
- 产品文档中声明"包含 BusyBox,基于 GPLv2"
- 向客户提供获取 BusyBox 源码的方式(网络链接即可)
- 不需要公开你产品的其他代码(BusyBox GPL 只要求公开 BusyBox 本身的源码,不传染你的其他组件)
情况三:修改了 BusyBox 源码(定制厂商)
你的产品 → 修改后的 BusyBox 二进制
需要做:
- 产品文档中声明修改了 BusyBox
- 公开你的修改部分的源码(通常提供 patch 文件或完整源码)
- 修改后的源码也以 GPLv2 发布
情况四:把 BusyBox 集成到你的项目里(嵌入式系统)
你的根文件系统 → BusyBox + 内核 + 你的应用
需要做:
- 根文件系统里包含 BusyBox 时,按情况二或三处理
- 内核是 GPLv2,需要提供内核源码(这个大家都知道)
- 你的应用如果和 BusyBox 完全独立(只是在同一个根文件系统里),你的应用不需要开源(GPL 是文件级传染性,不是目录级)
不需要担心的情况
以下场景不需要公开任何代码:
- 个人学习和研究:自己编着玩、自己设备上用
- 内部开发:公司内部用、不对外分发
- 只是运行 BusyBox:在终端里敲命令不涉及代码分发
- 脚本/配置文件:调用 BusyBox 命令的 Shell 脚本本身不需要 GPL(除非脚本里包含了 BusyBox 修改后的代码)
常见误区
误区:GPL 会传染我的闭源应用
GPL 是文件级(或程序级)传染,不是目录级、不是系统级传染。你的闭源应用和 BusyBox 在同一个根文件系统里,应用本身不会因此变成 GPL——只要你的应用没有直接链接 BusyBox 的源代码,也不是基于它修改的。
误区:用了 BusyBox init,我的整个启动流程都必须开源
你写的 inittab、rcS 脚本、其他启动脚本是你自己的作品。GPL 只要求公开 BusyBox 本身的源码。即使这些脚本和 BusyBox 二进制放在同一个目录下,脚本也不受 GPL 约束(除非脚本里嵌入了 BusyBox 源代码)。
误区:BusyBox Pro(Android 应用)使用了 BusyBox,所以它必须开源
BusyBox Pro 是一个独立的 Android 应用,它链接/打包了 BusyBox 二进制作为资源。按照 GPLv2,它需要提供 BusyBox 源码获取途径,但 BusyBox Pro 应用本身的代码(Java/Kotlin)不受 GPL 约束——除非项目选择以 GPL 发布整个应用。
合规清单(嵌入式产品)
在发布包含 BusyBox 的产品时,检查清单:
- [ ] 产品文档中提到"包含 BusyBox,基于 GPLv2 协议"
- [ ] 提供 BusyBox 源码获取方式(网站链接、README 说明)
- [ ] 如果修改了 BusyBox 源码:公开修改部分的代码
- [ ] 产品内包含 BusyBox 二进制,这是合规的(只要源码可获取)
- [ ] 不需要公开内核之外的其他组件代码
遵守 GPL 很简单——给出去,拿回来。你用了别人的开源代码,提供源码给你的客户就行。
更多信息
- BusyBox 官方许可证页面:busybox.net/license.html
- FSF GPLv2 全文:fsf.org/licenses/gpl-2.0.html
- Software Freedom Conservancy:sfconservancy.org