易君召
易君召
发布于 2026-07-26 / 2 阅读
0
0

开源代码使用版权注意事项

一、核心基础认知:开源≠无版权、免费≠随便用

  1. 所有开源代码受著作权法保护,作者保留版权;开源只是作者授予有限使用许可,不是放弃版权。

  2. 不存在 “开源就可以闭源售卖、抹去作者信息、二次分发不公开代码”,不同开源协议约束天差地别。

  3. 区分两个概念:

    • 使用权:绝大多数开源协议允许免费商用、修改;

    • 分发义务:一旦对外交付程序(售卖、打包交付客户、公网下载),部分协议强制要求公开修改后的源码。

二、主流开源协议分级与版权约束(最关键)

1. 强传染型(Copyleft,高风险,极易踩坑)

(1)GPLv1/v2/v3(Linux、GCC、FFmpeg)

核心传染规则:

  • 只要程序静态 / 动态链接 GPL 代码,整体软件全部强制采用 GPL 协议开源;

  • 对外分发(售卖、给客户、上传下载)时,必须完整提供全部源代码(自研代码 + 修改的开源代码);

  • 禁止修改、删除原代码版权声明、作者署名;

  • GPLv3 新增:禁止硬件锁死(Tivoization),不能用 GPL 代码做加密不可修改的硬件固件。

    风险场景:商用闭源软件内嵌 FFmpeg、直接链接 GPL 库,未开源全部自研代码,构成侵权。

(2)LGPL(弱 GPL,Qt 默认协议)

  • 动态链接(独立 so/dll):自研代码无需开源,仅需提供 LGPL 库修改源码、标注版权;

  • 静态链接:整个程序触发 GPL 传染,必须完整开源;

  • 分发时必须保留原协议文本、版权信息,说明对库的修改点。

2. 宽松型(Permissive,商用友好,低约束)

MIT、Apache 2.0、BSD(2 条款 / 3 条款),企业商用首选

通用宽松规则:

  1. 允许修改、闭源、商用、售卖、二次分发,无需公开自研代码;

  2. 强制义务仅 3 条

    • 保留原始代码中的版权声明、作者署名

    • 附带原始开源协议文本;

    • 不得用作者商标 / 名称做商业宣传(BSD3/Apache 特有)。

协议细微差异(容易忽略)

  • Apache 2.0:额外包含专利授权,贡献代码者自动授予使用者相关专利许可;同时明确修改文件必须标注修改记录;

  • BSD 3-clause:禁止借用原作者名称做产品背书;BSD 2-clause 无此限制;

  • MIT:最简协议,无专利、无商标约束,仅保留版权声明即可。

3. 特殊限制性协议(慎用,商用限制多)

  1. AGPLv3(网络传染,SaaS 最大坑)

    • GPL 仅分发触发开源,AGPL 只要通过网络对外提供服务(SaaS 网站、接口平台),就必须公开全部源码

    • 哪怕不打包交付客户,只是线上给用户使用,也要开源自研代码;

    • 常见项目:MongoDB 旧版、Nextcloud、很多开源后台管理系统。

  2. 商业友好限制协议:Mozilla MPL2.0

    • 文件级传染:仅修改的 MPL 源码文件需要开源,自研独立文件不受约束;介于宽松协议和 GPL 中间。

三、使用开源代码全场景版权合规要点

场景 1:仅内部使用,不分发、不上线对外服务

  • 内部办公、内网系统、测试项目,不对外交付 / 访问:几乎无强制开源义务;

  • 底线:代码内部留存原始版权注释,不得删除作者信息。

场景 2:商用闭源软件(客户端、桌面程序、嵌入式固件)

  1. 严禁静态链接 GPL 库;LGPL 库尽量动态链接;

  2. 使用 AGPL 项目:如果软件联网对外提供功能,必须整体开源;

  3. MIT/Apache/BSD 库可放心闭源售卖,但程序文档、关于页面、源码头部必须标注开源组件清单、版权、协议文本;

  4. 嵌入式设备(路由器、智能硬件)使用 GPL:客户索要源码时必须提供。

场景 3:SaaS 线上服务(网站、API 平台、云系统)

最大雷区:AGPL

  • 只要引入 AGPL 组件,所有线上服务代码必须开源;

  • GPL 无网络传染,单纯后端链接 GPL 库做 SaaS,无需开源自研代码(仅分发打包才触发);

  • Apache/MIT 无任何线上开源要求。

场景 4:二次分发开源代码(修改后上传 Github、打包给客户)

  1. 强 Copyleft(GPL/AGPL/LGPL 静态链接):完整开源所有关联代码;

  2. 宽松协议:仅需保留原版权,可搭配私有闭源代码;

  3. 所有场景:分发包中必须附带对应协议文件(LICENSE)。

场景 5:修改开源代码后自用 / 分发

  1. 任何协议都禁止删除、涂改原始版权注释、作者名字

  2. Apache 2.0、MPL 要求:修改的文件头部增加修改记录(修改人、时间、改动内容);

  3. GPL/AGPL 修改后的源码必须完整对外提供(分发 / 线上服务场景)。

四、高频侵权红线(绝对不能做)

  1. 抹去版权信息:删除代码头部 @copyright、作者、LICENSE 注释;

  2. 混淆协议传染规则:闭源商用软件静态链接 GPL/AGPL 库;SaaS 使用 AGPL 但不公开源码;

  3. 专利风险(Apache 2.0 反向坑):修改 Apache 项目后,起诉原项目贡献者专利侵权,协议自动终止授权;

  4. 商用宣传冒用作者名义:使用 BSD3/Apache 组件,对外宣称 “原作者认证、联合开发”;

  5. 不提供协议文本:软件安装包、文档中不附带开源组件对应的 LICENSE 文件;

  6. 拆分代码规避传染:通过进程间调用、RPC 拆分程序,试图规避 GPL/AGPL 传染,司法判例中已认定无效。

五、企业落地合规实操规范(可直接执行)

1. 引入前:开源组件准入审查

  1. 建立组件白名单:优先 MIT/Apache 2.0/BSD;限制 GPL/LGPL;禁止商用 SaaS 直接引入 AGPL

  2. 明确区分依赖类型:静态链接 / 动态链接 / 仅 API 调用 / 前端纯静态资源;

  3. 排查组件嵌套依赖:很多 MIT 项目内部依赖 GPL 子库,会间接触发传染。

2. 开发阶段:代码标注规范

  1. 所有引入的开源文件保留原始头部版权注释,禁止清理;

  2. 新建第三方依赖清单(OPEN_SOURCE_LICENSE.md),记录:组件名称、版本、仓库地址、协议类型、修改记录;

  3. Apache 协议修改文件,头部添加修改日志。

3. 发布上线阶段:对外合规披露

  1. 客户端 / 桌面软件:「关于我们」页面展示开源组件清单与完整协议文本;

  2. Web/SaaS 系统:后台、登录页底部增加开源许可说明链接;

  3. 交付客户的安装包、固件:附带 LICENSE 文件夹,存放所有开源协议文件;

  4. 若使用 GPL/LGPL 组件,提前准备好完整源码包,客户索要时 7 日内提供。

4. 风险兜底方案

  1. 高风险组件(GPL、AGPL)采用独立微服务 / 独立进程部署,仅通过 HTTP/RPC 通信,降低传染范围;

  2. 若无法规避 AGPL,两种选择:①整体项目开源;②替换为 MIT/Apache 同类组件;

  3. 定期开源依赖扫描(工具:FOSSA、BlackDuck、license-checker),自动识别协议冲突、隐藏 GPL 依赖。

六、补充特殊版权问题

  1. 开源代码中的第三方素材:代码内附带图片、字体、图标、音视频,这些素材可能有独立版权(CC、付费字体),不能随代码商用;

  2. 商标与版权分离:开源协议只约束著作权,项目名称、Logo、品牌商标仍归原作者,未经许可不能用作自有产品商标;

  3. 衍生作品界定:基于开源代码二次开发、封装、插件、扩展,法律上均属于衍生作品,受原开源协议约束;

  4. 国内法律依据:《著作权法》《计算机软件保护条例》,开源许可属于著作权许可合同,具备法律效力,违规可被起诉要求停止使用、赔偿损失。

七、快速协议选型对照表(商用项目参考)

协议

商用闭源

静态链接约束

SaaS 线上使用

专利授权

推荐场景

MIT

✅允许

无约束

无开源义务

前端、工具类、内部组件

Apache 2.0

✅允许

无约束

无开源义务

✅包含

后端框架、企业中间件

BSD 2/3

✅允许

无约束

无开源义务

底层工具、驱动

LGPL

✅动态链接;❌静态链接触发 GPL

静态链接强制开源

仅分发打包触发开源

动态链接第三方库(Qt)

GPLv3

❌闭源商用(链接即传染)

任何链接整体开源

仅分发打包触发开源

有反 Tivo 条款

纯内部工具,不对外交付

AGPLv3

❌线上 SaaS 必开源

链接整体开源

只要线上服务必须开源

同 GPLv3

纯开源公益项目,禁止商用 SaaS


评论