ZeroTierOne 的 MPL-2.0 合规地图:3 个判断问题,用对不踩坑
2026/9/10 9:57:13 网站建设 项目流程

ZeroTierOne 的 MPL-2.0 合规地图:3 个判断问题,用对不踩坑

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

ZeroTierOne 是开源组网项目,能把分散在不同网络的机器拼进同一个二层网络。它的核心代码用 MPL-2.0 许可,但仓库里还藏着另一套更严格的许可规则,合规与否,取决于你能不能分清"哪些代码归 MPL 管、哪些不归"。这篇文章不逐条背条款,而是把整个使用过程拆成 3 个你迟早要做的判断:拿到代码后先分清目录边界,动手前分清改动类型,分发前分清动作性质。每个判断都给出结论、依据和反例,照做即可安全使用、修改和分发。

一、先分清目录:这个仓库的许可是分三层画的

结论:不是整个仓库都归 MPL-2.0 管。仓库根目录的 LICENSE.txt 用三行话划清了边界,这是你做任何事之前唯一需要通读的文件。

MPL-2.0(Mozilla Public License 2.0)是一种"文件级 copyleft"许可——copyleft 可以白话理解为"你分发的软件必须继续允许别人自由使用",而文件级意味着它只约束被修改的那个文件本身,不会蔓延到你链接的其他代码。这正是 ZeroTierOne 能同时保持核心开源、又保留商业模块的原因。

三层边界如下,记住这张表就够了:

目录适用许可你能做什么
node/、osdep/、service/ 等MPL-2.0自由使用、修改、分发,改动的文件须按 MPL-2.0 开源
ext/各自保留原许可只做构建依赖,不改动、不重打包成你的作品
nonfree/ZeroTier Source-Available License(见 nonfree/LICENSE.md)可阅读、可修改,但商业使用须另行购买授权

nonfree/ 目录是新手最容易忽视的地方。它名义上"源码可见",实际按 nonfree/LICENSE.md 的约定:免费授予的只有非商业用途(个人、教学、不超过 30 天的评估),任何以营利组织、政府机构为受益方的使用,包括把控制功能嵌入自家产品,都算"商业使用",需要单独签商业授权。

反例:某创业团队基于开源版搭了一套面向客户的组网方案,其中启用了 nonfree/controller/ 的控制器组件,上线后才被告知这部分代码不属于 MPL,商业部署需要购买授权,最终被要求整改并补签协议。教训不在代码写得对不对,而在没在第一天就分清哪些目录"能白用"。

二、改动要不要开源?——只看你改的是哪个文件

结论:你改过的 MPL 文件必须继续按 MPL-2.0 公开;你新写的文件想闭源可以。依据是 LICENSE-MPL.txt 第 3.1 条和它对"Modifications"的定义(第 1.10 条):任何对 Covered Software 的增删改所形成的文件,以及任何包含 MPL 代码片段的新文件,都成为受许可的"覆盖软件"。

也就是说,判断标准不是"我的项目整体开不开源",而是按单个文件看:

  • 你改了 node/Node.cpp 里的任何一行,这个文件整体必须继续提供源码、继续挂着 MPL-2.0。
  • 你新写一个文件,只要其中复制了 MPL 代码片段,这个新文件也要按 MPL-2.0 对待。
  • 你新写一个纯独立文件(不复制 MPL 代码),它属于许可证所说的"Larger Work"(组合作品),可以自己定许可。

修改文件要留什么痕迹

仓库里每个 MPL 文件头部都有标准声明,例如 node/Node.cpp 前几行。按 LICENSE-MPL.txt 第 3.4 条,你不得删除或篡改这些声明。修改文件后,在原声明下追加一条你的记录即可,参考写法:

/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. * * (c) ZeroTier, Inc. */ /* Modified 2026-09-09 by Acme Corp: tuned tap buffer size, * this file remains under MPL-2.0. */

另外一条容易被忽略的条款:把专有代码"塞进"MPL 文件里再分发,等于把专有代码也纳入了 MPL,想闭源就闭源不了了。专有逻辑请放在独立文件,并保持它与 MPL 文件的边界干净。

三、分发与商用:三个最常问的判断

这一节回答三个决定"能不能卖"的问题,全部出自 LICENSE-MPL.txt 原文。

只在自己机房跑,算不算"分发"?

不算。MPL-2.0 的义务触发点是"分发"(distribute)这个动作。企业内部部署、内部 SaaS 平台自用,都没有把软件交给外部接收者,你既不用公开修改后的源码,也不用附带任何许可文本——只需内部保留好修改记录。注意这里常被说反:单纯通过网络提供服务(用户只能访问、拿不到软件本身)不构成分发,义务依然不触发。

一旦交付二进制,源码就得跟着走

结论先行:分发可执行文件时,必须同时让接收者能以合理方式、不高于分发成本的价格拿到对应源码(LICENSE-MPL.txt 第 3.2 条),并随附完整的 LICENSE-MPL.txt。打包者可以直接参考 debian/rules 与 debian/control 的做法:软件包内保留许可文本、依赖声明齐全,这就是一个可核对的合规模板。

反过来,新增的独立模块可以闭源:MPL-2.0 第 3.3 条允许你把覆盖软件与自己的材料组成 Larger Work 后按自选条款分发,只要 MPL 那部分自身的义务(提供源码、保留声明)没有被打折扣。

商标和专利,许可不给你

两个"隐形"限制值得单独记住:

  • 商标不在许可范围内(LICENSE-MPL.txt 第 2.3 节末段):MPL 授予的是版权与部分专利权,不是商标权。把 artwork/ 里的图标当自家产品 Logo、在产品名里直接写 ZeroTier,都不被许可覆盖,商用需单独取得授权。
  • 专利授权只到贡献者自己的那部分(LICENSE-MPL.txt 第 2.3 节):你把 ZeroTierOne 与自研模块组合后产生的新侵权风险,贡献者不替你兜底;反过来,若你以专利侵权起诉贡献版本,你在第 2.1 条获得的专利授权会整体终止(第 5.2 条)。

动手改代码前,先核对这 5 个文件

  1. 通读根目录 LICENSE.txt,把三层目录边界记下来;
  2. 对照 LICENSE-MPL.txt 第 3.1、3.2、3.4 条,确认你的改动落在哪一层;
  3. 若涉及控制器相关功能,先翻 nonfree/LICENSE.md 确认是否触发商业授权条款;
  4. 分发包里检查是否包含完整的 LICENSE-MPL.txt 和源码获取方式;
  5. 商用产品出街前,确认 artwork/ 里的商标素材没有被挪作品牌使用。

把这五步走完,你在 ZeroTierOne 上的每一次使用、修改和分发,都有据可查。

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

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

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

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

立即咨询