
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.10Modifications 的定义是按文件算的被改动的文件以及包含其代码的新文件才属于被覆盖的源码。这和 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.cppLinux 下的 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_NONFREE1这个开关就写在 debian/rules 里构建出完整版再作为商业服务转售会直接撞上 nonfree 许可的付费条款而 agent 的免费部分不受影响——分区处理别一锅端。内部部署、SaaS、二次售卖的合规动作表你的用法要做的不能做的参考文件内部部署不分发保留头声明与许可文本记录改过的文件不删 MPL 头、不对外流出二进制debian/rules交付客户 / SaaS修改文件提供完整源码及获取方式§3.2不裸发二进制、不无授权混入 nonfree 组件pkg/snap/snapcraft.yaml二次开发售卖修改文件继续按 MPL 开源你的新文件可闭源不把 nonfree/ 代码混进开源部分nonfree/LICENSE.mdcommit 前的一次自查全文最有用的判断只有一句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),仅供参考