ZeroTierOne的MPL-2.0合规避坑解析
2026/9/10 13:34:53 网站建设 项目流程

ZeroTierOne的MPL-2.0合规避坑解析

【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOne

周五傍晚,你把改了三十行的 LinuxEthernetTap.cpp 提交进公司私有仓库,想着等内部评审完再公开。周一早上邮件到了:这个文件来自 ZeroTierOne,采用 MPL-2.0 许可,修改过的文件在分发时就必须以同一许可公开源码。这篇文章只解决一个问题——你碰了这个仓库的代码之后,哪些文件必须开源,哪些可以留在私有仓库。

文件级copyleft:只追到文件,不追到整个项目

MPL-2.0 最关键的设计决策是"文件级"触发。看 LICENSE-MPL.txt 的 §1.10,"Modifications" 的定义是按文件算的:被改动的文件,以及包含其代码的新文件,才属于"被覆盖的源码"。这和 GPL(项目级 copyleft,组合后整体都算衍生作品、必须整体开源)、MIT(宽松型,分发时只要求保留声明)放在一条轴上对比,MPL 恰好卡在中间:你改了一页,就只公开这一页,剩下的书可以锁进抽屉。

这个仓库的目录结构就是照着这条边界画的。根目录 LICENSE.txt 把全仓切成三块:node/、osdep/、service/ 下的核心代码走 MPL 许可;nonfree/ 是 source-available(源码可查、商用要买授权)许可;ext/ 保留第三方库的原始许可。你把 ZeroTierOne 的 agent(负责加入虚拟网络的客户端守护进程)集成进自己的产品时,没碰过的文件维持原样,只有你改过的文件进入义务范围。

四个最容易踩坑的条款逐条翻译

改过就得开源的那批文件

LICENSE-MPL.txt §3.1 只说了一件事:分发被覆盖源码(包括你的修改)必须沿用 MPL 许可,并告知接收方如何获取许可文本。仓库里 node/Node.cpp 这类文件头部都写着 MPL 声明,那就是"被覆盖"的标记。你一旦修改 osdep/LinuxEthernetTap.cpp(Linux 下的 TAP 虚拟网卡实现),这个文件就成为你的义务载体。

// 错误:改了 LinuxEthernetTap.cpp 却只交付二进制 // → 违反 §3.1,必须以同一许可发布源码 // 正确:保留原 MPL 头声明,并在其下补一行修改说明 /* Modified by Acme 2025-06: buffer pool reuse */ // 同时把这个文件的源码放进分发包

如果你改了代码、留在私有仓库、只给客户发二进制——产品出货那一刻就构成违约,许可会按 §5.1 自动终止。

专利授权没写到的那一半

§2.1 给了你专利许可,但 §2.3(b) 划出例外:它只覆盖每位贡献者自己的贡献部分,不覆盖"该代码与其他软件组合"的情形,也不覆盖你自己修改造成的侵权。node/ 下的 ECC.cpp、AES.cpp(椭圆曲线与对称加密实现)属于被覆盖部分。如果你以为"用了 MPL 就全链路专利免疫",把一个自研加密模块硬塞进 agent 里,组合产生的专利风险由你承担,ZeroTier 不替你背书。

商标和名字不随代码给你

§2.3 最后一段写得很直白:本许可不授予贡献者商标、服务标志或 logo 的任何权利。如果你把原版图标原样放进产品、还取名"ZeroTier One 企业版",等来的会是商标混淆层面的函件。代码权利随许可白给,品牌权利要单独谈,这两条线必须分开。

同一个仓库里的三种许可

⚠️ 这是本仓库风险最高的一条。根 LICENSE.txt 写明 nonfree/ 受 nonfree/LICENSE.md 约束:个人、教学、30 天以内评估免费,但"Commercial Use"(含任何营利实体的使用)必须另签商业协议。嵌入式网络控制器 nonfree/controller/EmbeddedNetworkController.cpp 就在这个区。如果你用 ZT_NONFREE=1(这个开关就写在 debian/rules 里)构建出"完整版"再作为商业服务转售,会直接撞上 nonfree 许可的付费条款,而 agent 的免费部分不受影响——分区处理,别一锅端。

内部部署、SaaS、二次售卖的合规动作表

你的用法要做的不能做的参考文件
内部部署,不分发保留头声明与许可文本,记录改过的文件不删 MPL 头、不对外流出二进制debian/rules
交付客户 / SaaS修改文件提供完整源码及获取方式(§3.2)不裸发二进制、不无授权混入 nonfree 组件pkg/snap/snapcraft.yaml
二次开发售卖修改文件继续按 MPL 开源,你的新文件可闭源不把 nonfree/ 代码混进开源部分nonfree/LICENSE.md

commit 前的一次自查

全文最有用的判断只有一句:MPL-2.0 只追"你改过的文件",而本仓库真正的商业红线在 nonfree/ 里。下次 commit 前跑一遍git diff --name-only,把每个改动文件对着 node/ 和 osdep/ 核一遍,改过的文件在头部补一行修改说明。后续如果看到根 LICENSE.txt 或 nonfree 许可文本有版本更新,回来重新核对一次分区——许可边界是按发布版本走的,值得每次发版前验证一遍。

【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOne

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询