GPL v2 许可证深度解析:条款逻辑与合规风险指南(下)
#作者:任少近
文章目录
- 4.GPLv2合规案例建议
- 4.1.源代码提供方式
- 4.2.必须包含的文件
- 4.3.Dockerfile中强化说明
- 4.5.平台客户告知
- GPLv2 组件
- 4.6.平台授权自动终止
- 4.7.版本对应要求
- 4.8.免责声明强化
- 4.9.源码托管目录结构建议
- 4.10.平台服务协议关键条款
- 4.11.平台免责声明保险
- 4.12.平台交互式合规引导
- 4.13.平台地域分发限制
- 4.14.平台开源组件合规指南
- 5.GPLv2对商业用途的立场
- 5.1.法律依据
- 5.2.商业用途的场景
- 5.3.商业的增值服务流程
- 5.4.关键合规原则
- 6.总结:
- 6.1.直接使用官方二进制
- 6.2.内部部署不触发GPLv2
- 6.3.合法收费模式
- 6.4.若需分发需遵守
- 6.5.法律风险防控
- 6.6.特殊场景处理
- 6.7.用户管理
- 6.8.持续合规
- 6.9.增值服务设计
- 7.GPLv2 的链接:
4.GPLv2合规案例建议
4.1.源代码提供方式
这一内容源自GPLv2条款3
方案 操作步骤
镜像内嵌源代码 在镜像中添加/usr/src目录存放对应版本源码
下载 镜像中放置LICENSE文件,注明:
“源码获取:wget https://xx.com/keepalived-2.2.4.tar.gz”
书面承诺函 在平台服务条款中声明:
“本镜像所含GPLv2软件源码可联系support@xxx.com获取,有效期至少3年”
表格方案与条款的对应关系
表格方案 对应条款选项 法律要求要点
镜像内嵌源代码 条款3(a) 必须包含完整可构建的源码
下载 条款3(b) 需提供3年有效的获取承诺
书面承诺函 条款3(b) 必须明确联系方式和有效期
4.2.必须包含的文件
/(镜像根目录)
├── Dockerfile # 需保留构建记录
├── LICENSE # 完整GPLv2文本
├── NOTICE # 声明包含的GPLv2组件
└── /usr/local/bin # 可执行文件
此目录结构要求主要基于 GPLv2 条款1和条款3 的综合要求,具体法律依据和解析如下:
一、核心条款依据
-
条款1(原始代码分发)
“You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.” -
条款3(可执行文件分发)
“Accompany it with the complete corresponding machine-readable source code… on a medium customarily used for software interchange” -
FSF官方解释
《GPLv2 合规指南》明确要求:
分发时必须包含构建环境说明(对应Dockerfile)
NOTICE文件用于声明衍生作品关系(避免"隐蔽传染"风险)
二、文件清单的法律必要性
文件/目录 | 对应要求 | 条款依据 | 违规案例 |
---|---|---|---|
Dockerfile | 保留构建方法(满足"可构建源码"要求) | 条款3(a) | 某云厂商因未提供构建脚本被起诉 |
LICENSE | 完整GPLv2文本(不可删减) | 条款1 | 删除LICENSE文件导致权利终止 |
NOTICE | 声明GPLv2组件及修改记录 | 条款2(a) | 未标注修改被认定侵权 |
/USR/LOCAL/BIN | 可执行文件存放规范 | 行业惯例 | 混乱路径导致源码关联失败 |
4.3.Dockerfile中强化说明
# 基础镜像(建议使用官方GPLv2镜像)
FROM alpine:3.18# 1. 安装未修改的GPLv2软件
RUN apk add --no-cache \keepalived=2.2.4-r0 # 2. 嵌入源码包 (条款3a)
COPY --from=source-downloader /usr/src/keepalived-2.2.4.tar.gz /usr/src/# 3. 添加法律声明文件 (条款1)
COPY LICENSE /usr/share/legal/GPLv2
COPY NOTICE /usr/share/legal/# 4. 启动时显示免责声明 (条款5)
CMD echo -e "\n\033[1;31mNOTICE: This container contains GPLv2 software. Source code available in /usr/src/\033[0m" && \/usr/sbin/keepalived -n
源码嵌入部分(条款3a)
dockerfile
COPY --from=source-downloader /usr/src/keepalived-2.2.4.tar.gz /usr/src/
对应条款:
“Accompany it with the complete corresponding machine-readable source code”
(必须随分发提供完整机器可读源码)
合规要点:
源码需与二进制版本严格匹配(2.2.4-r0 → 2.2.4.tar.gz)
必须存放在常规路径(如/usr/src)
法律声明文件(条款1)
dockerfile
COPY LICENSE /usr/share/legal/GPLv2
COPY NOTICE /usr/share/legal/
对应条款:
“keep intact all the notices that refer to this License”
(保留所有许可证声明)
合规要点:
LICENSE 必须是未经修改的GPLv2全文
NOTICE 需声明所有GPLv2组件及其修改状态
免责声明输出(条款5)
dockerfile
CMD echo -e “\nNOTICE: This container contains GPLv2 software…”
对应条款:
“If the modified program normally reads commands interactively… print an announcement”
(交互式程序需显示声明)
合规要点:
声明需包含许可证名称(GPLv2)
指明源码位置(/usr/src/)
合规要求
Dockerfile操作 法律要求 风险提示
使用官方软件包 必须与官方源码版本要求的完全一致 版本不匹配导致违约
源码包存放路径 需是标准系统路径 非常规路径可能被视为隐藏源码
声明文件权限设置 必须设为只读 可写权限可能被认定有意篡改
4.4.平台界面声明
以下展示的HTML声明片段主要对应 GPLv2条款1、3(b)、6 的要求示例,具体法律依据和合规要点如下:
开源声明
本镜像包含以下GPLv2许可软件:
- keepalived {{version}} - 下载源码
根据GPLv2要求,您有权获得相应源代码。
对应条款解析
GPLv2 条款3(b) 原文
“Accompany it with a written offer… to give any third party a complete machine-readable copy of the corresponding source code”
声明内容与条款的对应关系
HTML元素 法律要求 条款依据 合规关键点
开源声明
需醒目提示许可证信息 条款1 标题层级需足够显著 keepalived {{version}} 必须注明软件名称和版本号 条款3(b) 版本号需与二进制严格匹配 下载链接 提供机器可读的源码获取方式 条款3(b) 链接需长期有效(≥3年) "有权获得源代码"声明 明确用户权利 条款6 不得弱化用户权利4.5.平台客户告知
以下展示的开源声明内容主要综合了 GPLv2 条款1、条款3(b) 和条款11 的要求,具体对应关系如下:
# 开源软件使用声明
您即将下载的镜像包含以下自由开源软件:
GPLv2 组件
软件名称 | 版本 | 源代码获取方式 |
---|---|---|
keepalived | 2.2.4 | 下载链接 |
## 您的权利与义务
根据GPLv2许可证:
1. 您可以自由使用、修改和分发本镜像
2. 若您将镜像分发给第三方,必须:- 保留所有版权声明- 提供完整的源代码
3. 本平台不提供任何质量担保
[请点击查看完整GPLv2许可证文本](LICENSE_URL)
法律条款直接依据
- 组件列表声明(条款1)
对应原文:
“keep intact all the notices that refer to this License”
(保留所有许可证声明)
实现形式:
明确列出GPLv2组件名称及版本(keepalived 2.2.4)
提供版权声明链接
- 源码获取方式(条款3(b))
对应原文:
“Accompany it with a written offer… to give any third party a complete machine-readable copy”
(提供机器可读的源码获取方式)
实现形式:
可点击的下载链接(含HTTPS协议保障)
版本严格匹配(2.2.4.tar.gz ↔ 2.2.4二进制)
- 权利与义务说明(条款6+11)
对应原文:
条款6:不得添加额外限制(允许自由分发)
条款11:无担保声明(“NO WARRANTY”)
实现形式:
明确用户再分发权利
免责声明(“本平台不提供任何质量担保”)
4.6.平台授权自动终止
当用户违反GPLv2时,其权利将自动终止,但已合法分发的副本不受影响。
以下是针对 GPLv2 条款4(授权自动终止) 的专项合规表格说明,结合磐基PaaS平台,说明:
要素 | 法律要求 |
---|---|
自动终止机制 | 违反GPLv2时授权自动终止(但已合法分发的副本不受影响) |
已分发副本处理 | 终止前已合法获取的副本仍可继续使用 |
恢复机制 | 纠正违规行为后可申请恢复权利 |
通知义务 | 需明确告知用户终止原因及补救措施 |
连带责任隔离 | 平台不因用户违规承担连带责任(需提前声明) |
4.7.版本对应要求
以下为说明镜像版本时,需要明确镜像版本和源码版本的对应关系,已经校验码
镜像版本 | Keepalive源码版本 | 校验码 |
---|---|---|
V1.0.0 | 2.2.4 | Sha256:xxxx |
1.GPLv2 条款3(a) 原文要求
“Accompany it with the complete corresponding machine-readable source code… on a medium customarily used for software interchange”
(必须提供完整且可验证的对应版本源码)
2.表格要素与条款的关联
表格内容 | 法律要求 | 条款依据 | 合规意义 |
---|---|---|---|
镜像版本 | 需与二进制构建结果严格对应 | 条款3(a) | 确保用户获取正确版本 |
Keepalive源码版本 | 必须与二进制文件编译所用源码一致 | 条款1+3(a) | 防止版本混淆引发侵权 |
SHA256检验码 | 保障源码完整性(防篡改) | 条款3(a) | 满足"machine-readable"要求 |
4.8.免责声明强化
在镜像启动日志中输出,以下展示的镜像启动日志声明内容,主要对应 GPLv2 条款5(交互式程序声明要求) 和 条款11(无担保声明),具体法律依据如下:
========================================================================
This product includes software developed under GPLv2:
- keepalived (http://www.keepalived.org)
THERE IS NO WARRANTY FOR THIS SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
========================================================================
一、对应条款原文
-
条款5(声明输出要求)
“If the modified program normally reads commands interactively when run, you must cause it… to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty…”
(若程序以交互方式运行,必须输出包含版权声明和无担保声明的公告) -
条款11(无担保声明)
“BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM…”
(明确要求声明无担保)
二、声明内容的法律要素分解
日志输出内容 | 对应条款 | 法律意义 |
---|---|---|
This product includes… GPLv2 | 条款5 | 声明软件许可证类型(满足"appropriate copyright notice"要求) |
keepalived (http://…) | 条款1 | 保留原始版权信息(需包含原作者/官网链接) |
THERE IS NO WARRANTY… | 条款11 | 必须包含的无担保声明原文或实质等同表述 |
注:appropriate copyright notice
根据条款1中"conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty" (在每个副本上显著且适当地发布适当的版权声明和免责声明)
这里的 “appropriate” 包含三层法律含义:
完整性:必须包含原始版权信息(不得删改)
显著性:声明位置应容易被用户发现
准确性:需明确指向适用的许可证版本
4.9.源码托管目录结构建议
以下为源码托管目录结构说明,包括源码包,核验文件,构建环境信息,平台合规说明
your-paas-source-repo/
├── keepalived/
│ ├── 2.2.4/
│ │ ├── keepalived-2.2.4.tar.gz # 官方源码包
│ │ ├── sha256sum.txt # 校验文件
│ │ └── build-info.yaml # 构建环境信息
│
└── GPLv2-COMPLIANCE.md # 平台合规说明
4.10.平台服务协议关键条款
平台在提供服务时,需要有一定的约束和条款承诺,如下示例:
## 第X条 开源软件特别约定1. 您理解并同意,本平台提供的某些服务可能包含GPLv2等开源软件,您通过本平台使用此类软件时:a) 不得逆向工程、反编译或破解技术措施;b) 如需二次分发,须自行履行GPLv2要求的源代码提供义务;c) 平台已为您准备合规所需的全部源码(见附件《GPLv2组件清单》)。2 . 您承诺不会将本服务用于:a) 核设施、生命维持设备等高风险场景;b) 违反出口管制的国家/地区。
4.11.平台免责声明保险
以下展示的平台管理后台提示内容示例,主要对应 GPLv2 条款6 和 条款11 的法律要求,具体关联如下:
<!-- 平台管理后台展示 -->
<div class="GPLv2-warning"><icon-warning /> 重要提示:本功能基于GPLv2软件实现,您需遵守<br><a @click="showGPLv2Dialog">《GPLv2义务告知书》</a>,平台不承担您违规分发导致的连带责任
</div>
法律条款依据
- 条款6 - 禁止附加限制
“You may not impose any further restrictions on the recipients’ exercise of the rights granted herein.”
(不得对用户行使权利施加额外限制)
前端实现合规性:
使用 <a> 标签链接告知书 → 保障用户知情权(不构成限制)
提示语仅声明义务 → 未禁止用户权利(如未写"禁止商用")
- 条款11 - 免责声明
“NO WARRANTY… the copyright holder/or other party provides the program ‘as is’”
(明确声明不承担连带责任)
平台不承担…连带责任 → 直接引用条款11
4.12.平台交互式合规引导
当客户在平台下载镜像时,需触发许可证要求说明,以下可示例:
// 当客户点击"下载镜像"时触发
function onDownloadClick() {showModal({title: 'GPLv2义务确认',content: '您即将下载的镜像包含GPLv2软件,根据许可证要求:',checklist: ['不得移除版权声明', (条款1)'再分发时必须提供源码',(条款3)'不能用于专利诉讼'(条款7)],confirmText: '我已理解并接受'})
}
4.13.平台地域分发限制
一:条款核心要求
条款原文:
“If the distribution and/or use of the Program is restricted in certain countries… the original copyright holder may add an explicit geographical distribution limitation…”
(若程序在特定国家受专利/出口限制,原始版权方可明确添加地域分发限制)
二:磐基平台合规义务
责任方 | 要求 | 磐基应对措施 |
---|---|---|
原始版权方 | 在官方代码库中明确声明受限国家(如LICENSE.docs) | 定期扫描上游仓库 |
平台方 | 遵守声明,拦截受限国家的访问 | 部署IP地理拦截系统(需用户二次确认实际位置) |
用户 | 不得规避限制(如VPN翻墙下载) | 协议中明确禁止条款,记录异常登录行为 |
4.14.平台开源组件合规指南
# GPLv2软件合规指南# 您的权利(条款0/3)
- 自由使用平台提供的负载均衡服务
- 在本企业内部分发镜像(需保留完整法律文件)
...
## 您的义务(条款1/6)
- 不得移除版权声明
- 不得添加使用限制(如"禁止商业用途")
...
# 您不能做什么?
- 将镜像改名为自有品牌产品出售
- 删除镜像中的`/usr/src`目录后分发
...
## 法律声明
- 专利许可:不适用(条款7)
- 免责声明:[点击查看](https://legal.your-paas.com/GPLv2-waiver) <small>© 2025 某PaaS平台 | 基于GPLv2条款1/3/6/7/11</small>
5.GPLv2对商业用途的立场
5.1.法律依据
GPLv2 条款6:
“You may not impose any further restrictions on the recipients’ exercise of the rights granted herein.”
(不得对用户行使权利施加额外限制,包括商业使用限制)
FSF 官方解释:
“The GPLv2 explicitly permits commercial use, and any attempt to forbid it violates the license.”
(GPLv2明确允许商业用途,禁止此类用途将违反许可证)
5.2.商业用途的场景
场景 | 合规性 | 示例 |
---|---|---|
企业购买服务 | 允许 | 某银行采购某平台PaaS运行支付系统 |
集成到商业产品 | 允许 | 不改变keeaplived源码只是接口调用 |
提供付费技术支持 | 允许 | 对keepalived配置收取服务费 |
云服务商商用部署 | 允许 | AWS使用GPLv2软件提供ELB服务 |
5.3.商业的增值服务流程
专业技术服务,允许收费
商业化方式 | 合规依据 | 示例 |
---|---|---|
销售专业支持服务 | GPLv2不限制对技术支持、维护、培训等附加服务收费。 | - 提供 GPLv2软件(如Keeaplive)的部署、优化、故障排查。- 7×24小时运维保障或SLA服务。- 定制化培训(如Keepalived高可用配置)。 |
提供托管/云服务 | GPLv2允许将软件作为服务运行(如SaaS、PaaS),无需公开平台专有代码(不触发传染性)。 | - 某PaaS集成Keepalive提供高可用服务并收费。 |
5.4.关键合规原则
不隐瞒GPLv2义务:用户必须能获取GPLv2组件的完整源代码(如通过下载链接或随产品提供)。
隔离专有代码:确保收费部分与GPLv2代码无直接衍生关系,避免“传染”开源。
明确服务边界:收费应针对增值服务(如支持、托管),而非GPLv2软件本身。
6.总结:
以下是某平台合规使用GPLv2组件许可证的完整要点总结,涵盖所有GPLv2关键条款:
6.1.直接使用官方二进制
不修改/不分发keepalived代码
保留所有原始版权声明和LICENSE文件
6.2.内部部署不触发GPLv2
仅作为服务组件运行
不向用户提供可下载的镜像或安装包
6.3.合法收费模式
对技术服务收费(部署/运维/监控)
不对软件本身收取授权费
明确区分服务费与软件费
6.4.若需分发需遵守
提供完整对应版本源码(条款3)
保持所有GPLv2声明文件完整(条款1)
不添加额外使用限制(条款6)
启动日志输出GPLv2声明(条款5)
标注"GPLv2-2.0-only"(条款9)
隔离非兼容许可证代码(条款10)
6.5.法律风险防控
用户协议包含免责条款(条款11/12)
建立自动合规扫描(检测LICENSE文件)
保留5年分发记录
6.6.特殊场景处理
地域限制遵守上游声明(条款8)
专利敏感功能提供替代版本(条款7)
修改代码需开放全部衍生作品(条款2)
6.7.用户管理
下载前强制阅读GPLv2要点
二次分发用户需签署合规承诺
提供合规咨询通道
6.8.持续合规
监控上游许可证变更
定期审计镜像仓库
建立违规应急下架机制
6.9.增值服务设计
专业支持服务(收费)
企业级SLA保障(收费)
定制化配置(收费)
必须与软件授权分离计费
7.GPLv2 的链接:
GPLv2 2.0许可证官方链接:https://www.gnu.org/licenses/old-licenses/GPLv2-2.0.html