#作者:任少近
文章目录
1.背景与问题
1.1.背景
MongoDB 是一款高性能、高可用的分布式 文档数据库,广泛应用于现代应用开发中的大数据存储、实时分析和灵活的数据管理场景。在 磐基PaaS平台 上,我们为客户提供经过优化配置的 MongoDB 解决方案,支持通过 容器镜像 或 二进制文件 等多种形式部署。
注意:自 MongoDB 4.0 版本(2018年10月)起,官方采用 Server Side Public License (SSPL) v1.0 作为核心数据库的许可证,用户在商业部署时应仔细评估其合规要求。
1.2.问题
作为云PaaS平台提供商,在向客户提供MongoDB时,是否存在(SSPL) v1.0 许可证下的合规风险。
2.SSPL 条款逻辑结构
SSPL 是 MongoDB Inc. 在 2018 年推出的新型开源协议,基于GPLv3修改,主要针对云服务提供商(如 AWS、阿里云) 使用 MongoDB 的方式增加了额外限制。其核心目标是防止云厂商将 MongoDB 作为托管服务商业化而不回馈社区。
SSPL 的 17 个条款 可划分为 4 个逻辑模块:
- 基础自由与 Copyleft 条款(条款 0-10)
- SSPL 特有 SaaS/托管服务限制(核心新增部分)(条款 11-13)
- 专利与商标条款(条款 14-15)
- 免责与终止条款(条款 16-17)
3.SSPL条款解读分析
SSPL主要为以下17个条款,以下逐一条款进行说明
3.1.条款0:定义条款
条款0是SSPL的基础定义条款,明确协议中关键术语的法律含义,其解释直接影响后续所有条款的适用范围。与GPLv3§0结构相似,但包含SSPL特有的云服务相关定义。
官方原文如下:
原文关键部分1
“The ‘Program’ refers to any copyrightable work licensed under this License.”
法律意义:
涵盖所有受版权保护的SSPL授权作品(如MongoDB社区版代码、文档、配置文件)。
如:明确排除聚合作品(Aggregate)中独立的部分(见条款5末段)。
- “Covered Work”(涵盖作品)
原文关键部分2
“A ‘covered work’ means either the unmodified Program or a work based on the Program.”
法律意义:
包括:
原始SSPL软件;
任何修改版或衍生作品(需满足条款5的声明要求)。
边界争议:
动态链接库是否属于衍生作品
“Convey”(传递)
原文关键部分3
“‘Convey’ means any kind of propagation that enables other parties to make or receive copies, or to interact with the work remotely through a computer network.”
法律意义:
包括:
传统分发(如提供下载、物理介质);
云服务/SaaS(用户远程交互即视为“传递”)。
关键影响:触发条款12(服务栈开源)的核心条件。“Corresponding Source”(对应源代码)
原文关键部分4
“The ‘Corresponding Source’ includes all source code needed to generate, install, and run the object code, and to modify the work.”
法律意义:
必须提供的源代码范围:
编译工具链(如构建脚本);
依赖库(除非是标准系统库);
配置文件。
SSPL特殊性:
若涉及云服务(条款12),还需包含服务栈代码(如管理平台、监控工具)。
- “Aggregate”(聚合作品)
原文关键部分5
“An ‘aggregate’ is a compilation of a covered work with other separate works, which are not by their nature extensions of the covered work.”
法律意义:
允许行为:
将SSPL软件与独立作品(如Nginx、Linux内核)打包分发,不触发传染性。
禁止行为:
若组合后形成功能耦合(如专有工具直接调用MongoDB内核),则视为衍生作品(需整体SSPL授权)
- 企业合规关键点
安全使用场景
聚合分发:如将MongoDB与Apache Kafka打包为容器镜像,两者无代码级依赖。
内部修改:如不对外“传递”(Convey)则无需开源。
3.2.条款一:源代码条款
官方原文如下:
原文关键部分
.“The ‘source code’ for a work means the preferred form of the work for making modifications to it. ‘Object code’ means any non-source form of a work.”
- 解读:“作品的‘源代码’是指对该作品进行修改的首选形式。‘目标代码’是指作品的任何非源代码形式。”
源代码定义
“Preferred form for modifications”(修改的首选形式):
不仅包括原始人类可读代码(如.js/.py文件),还涵盖:
构建脚本(如Makefile);
配置文件(如.yaml);
文档注释(若影响编译)。
排除项:自动生成的代码通常不视为源代码。目标代码定义
“Any non-source form”(任何非源代码形式):
包括:
编译后的二进制(如.exe/.so);
字节码(如Java .class文件);
混淆后的代码(如经过UglifyJS处理的JS)。企业合规要点
源代码提供义务(条款4关联)
必须提供:
修改后的完整源代码;
构建环境说明(如Dockerfile);
第三方依赖的获取方式(除非是标准库)。
提供方式:
随二进制包附带;
提供书面下载承诺(有效期3年)。
3.3.条款二:基本授权条款
官方原文如下:
原文关键部分. “You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force.”
- 解读:“只要您的许可证仍然有效,您可以制作、运行和传播您未传递(not convey)的涵盖作品,且不受任何附加条件的限制。”
允许的行为(无需合规义务)
制作(Make):
编译、安装、部署SSPL软件(如MongoDB)。
运行(Run):
在本地或服务器上自由使用。
传播(Propagate):
在内部网络中共享副本(如企业内部分发)。
关键限制:
仅适用于“未传递”(not convey)的场景:
若行为构成“传递”(Convey,见条款0定义),则需遵守条款4~12(如开源要求)。企业合规建议
安全行为:
内部研发、测试、非商业化部署。
高风险行为:
任何形式的对外分发或SaaS化(需严格评估条款12)
法律审查:
确认“传递”行为的边界(如子公司间共享是否构成“传递”)
3.4.条款三:反规避保护条款
官方原文如下:
原文关键部分: “You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force.”
- 解读:只要您的许可证仍然有效,您可以制作、运行和传播您未传递的涵盖作品,而无任何附加条件
- 合规行为:
- 内部使用: 企业修改MongoDB代码后仅用于内部业务系统,不对外分发或提供云服务
- 私有修改与测试: 开发者fork MongoDB社区版进行实验性优化,未公开代码或服务
- 非传递性运行: 在本地开发环境中运行修改后的MongoDB,未部署到公有云或提供给客户
- 风险行为:
- 任何构成“传递(convey)”或违反SSPL扩展义务的操作,均超出条款3的保护范围。
如:子公司向关联公司收费提供,就有可能触发条款12
3.5.条款四:逐字传播条款
官方原文如下:
原文关键部分:
“You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you:
a) conspicuously and appropriately publish on each copy an appropriate copyright notice;
b) keep intact all notices stating that this License applies to the code;
c) keep intact all notices of the absence of any warranty;
d) give all recipients a copy of this License.”
- 解读:“您可以以任何媒介传递您收到的程序的源代码的逐字副本,但您必须:
a) 在每个副本上显著且适当地发布适当的版权声明;
b) 保留所有声明本许可证适用于代码的通知;
c) 保留所有关于无担保声明的通知;
d) 向所有接收者提供本许可证的副本。” - 核心义务:规范二进制分发(Object Code)时的源代码提供要求,是SSPL Copyleft传染性的关键条款
- 合规行为:
- 提供对应源代码: 必须随二进制分发提供完整的、机器可读的源代码(或明确的获取方式)
- 源代码完整性: 源代码需与二进制版本完全匹配,包括依赖项(除非是标准系统库)
许可证声明保留: 保留所有原始版权声明和SSPL许可证文件(如LICENSE) - 违规行为:
- 二进制分发不提供源代码获取方式(违反条款4与条款1关联义务)
- 在下载页面隐藏许可证文本(需"conspicuously"显著展示)
- 重新打包时删除NOTICE文件
- 显著标注的标准
- 网页下载按钮旁直接显示许可证
- 二进制安装包启动时显示声明
3.6.条款五:修改版本传播条款
官方原文如下:
原文关键部分:You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
- 解读:条款5规定了修改版本的分发条件,在遵守条款4(基础分发要求)的前提下,必须满足以下额外要求:
- 修改声明(5a)在修改版代码中必须包含醒目的修改声明。包括:
明确标注“此版本已修改”
注明修改日期 - 许可证声明(5b)必须明确声明修改版仍遵循SSPL,并保留所有原始许可证声明(条款4要求),同时需包含条款7可能的附加条件
在项目根目录保留 LICENSE 文件(SSPL原文)
在代码文件头注明 Licensed under SSPLv1 - 全作品许可(5c)要求:修改版必须整体以SSPL授权,不得部分闭源或混合其他许可证。“无论以何种方式打包”:即使分模块分发,所有部分均需遵守SSPL
- 交互界面法律声明(5d)要求:若修改版有交互界面(如Web UI),需展示法律声明(如“基于SSPL授权”)
- 合规行为:
- 仅为本公司修改代码
- 企业A修改MongoDB并分发,所有代码(含新增文件)必须采用SSPL
- 违规行为:
- 标注修改来源或日期可能导致协议违反
将修改版MongoDB与专有代码打包,仅开源MongoDB部分。
- 标注修改来源或日期可能导致协议违反