本文目录导读:

在PHP项目中选择并遵守开源协议,是一个涉及法律、技术和社区规范的综合性问题,以下是对常见开源协议(如MIT、GPL、Apache等)核心条款的逐条解读,以及如何在实际操作中遵守的指南。
通用核心原则(适用于所有开源协议)
-
许可证声明
条款:必须在项目中包含许可证文本。
遵守:在项目根目录放置LICENSE文件,并在所有源码文件头部添加简短声明(如@license MIT)。 -
版权声明保留
条款:不能删除原作者版权信息。
遵守:保留原作者的@author标签、LICENSE文件中的作者名及年份。 -
衍生作品标识
条款:对原有代码的修改需有明显标识。
遵守:在修改过的文件顶部添加Modified by [姓名] on [日期]注释。
常见PHP开源协议逐条解读
MIT 许可证(最宽松)
核心条款:
- 允许任意使用、修改、分发、再许可、销售。
- 唯一限制:必须保留原始版权声明和许可声明。
PHP项目中的遵守示例:
// index.php /** * @license MIT * Copyright (c) 2023 作者姓名 */ echo 'Hello World';
注意事项:若引用了MIT协议的第三方库(如Laravel),需在其根目录保留LICENSE。
GPL v3(强传染性)
核心条款:
- 衍生作品必须使用GPL v3发布。
- 提供完整对应源代码(包括安装脚本)。
- 禁止使用者以任何形式限制用户对软件的修改权。
PHP项目中的遵守场景:
- 若你的PHP项目引用了GPL库(如某些WordPress插件),整个项目必须采用GPL。
- 源代码必须公开(例如GitHub公开仓库)。
- 若提供API服务(SaaS),需向所有用户提供源代码下载。
规避传染性的方法:
通过进程间通信(如Socket/REST API)调用GPL库,而非在代码中直接引用(需咨询律师)。
Apache 2.0(需保留专利声明)
核心条款:
- 保留版权、专利、商标声明。
- 对修改过的文件明确标注。
- 包含
NOTICE文件列出所有衍生作品的来源。
PHP项目中的遵守示例:
// NOTICE.txt
This software includes work from "PHPUnit" (https://phpunit.de/),
licensed under the BSD 3-Clause License.
注意事项:若代码中包含了他人专利算法,需在该文件的头部添加专利声明。
BSD(3-Clause 或 2-Clause)
核心条款:
- 3-Clause:需保留版权及免责声明,且禁止用原作者名义进行推广。
- 2-Clause:与MIT类似,但明确禁止间接明示背书。
遵守方法:
- 在每个PHP文件中保留BSD风格的版权块。
- 在README中声明:“本项目基于BSD 3-Clause许可证发布,包含来自MIT协议的代码”。
LGPL(针对库设计)
核心条款:
- 允许动态链接不传染(但静态链接必须开源)。
- 修改库本身需开源,但使用库的PHP项目可以不公开代码。
PHP项目中的场景:
- 使用
composer require安装LGPL库(如php-webdriver),不需要开源你的PHP项目代码。 - 若直接修改了那个LGPL库的代码并发布,则修改部分必须开源。
专业建议与常见陷阱
-
协议的兼容性矩阵
- GPL + MIT = 可发布为GPL(但需保留MIT声明)。
- Apache + GPLv2 = 不兼容(除非你持有所有权利)。
- PHP项目中所有依赖的协议需逐一核对。
-
“商用”与“开源”的边界
- 使用MIT/BSD/Apache协议的PHP库可以嵌入到商业项目中。
- 使用GPL的PHP库(如某加密包)则必须将整个商业项目开源(除非封闭内网使用)。
-
PHP特有的风险
- Composer自动加载:若依赖中一个GPL库被自动加载,可能引发传染性。
- 代码合并:若从GPL项目中复制了一个函数定义到你的闭源项目中,可能构成侵权。
-
中国法律下的注意事项
- 中文翻译版本(如“GPL 3.0中文版”)不具备法律效力,仅作参考。
- 法院通常以英文原版为准,建议在项目中同时放置中英文对照声明。
-
核心检查清单
- 所有文件头部是否有许可证声明。
vendor/目录下的第三方依赖协议是否被覆盖。- README中是否注明整体协议及外部来源。
- 是否有
NOTICE或COPYRIGHT文件(Apache/BSD项目必要)。
推荐操作流程
-
项目初始化时:
composer create-project laravel/laravel myapp # 同时检查所有依赖协议 composer licenses
-
检查依赖协议的工具:
# 安装 composer require doctrine/lexer # 查看协议 composer licenses
-
生成合规的LICENSE文件:
- 简单选择MIT(推荐PHP新项目使用)。
- 若需法律严谨性,使用Choose a License网站。
-
每年审计一次(推荐)。
使用composer outdated后重新校验所有依赖协议是否变更。
- MIT:最大自由度,适合大多数PHP开源项目。
- GPL:易造成“传染”,仅适合以“高度共享”为目标的项目(如WordPress生态)。
- Apache:需添加专利/商标声明,适合企业级项目。
- BSD/LGPL:介于宽泛与严格之间。
最重要的原则:不要假设“老外查不到我”,在法律层面,开源协议是一种版权合同,如在中国发生纠纷,法院依据《著作权法》进行审理,使用他人代码前,请务必仔细阅读其LICENSE文件,并在自己的项目中严格遵守。
如果有具体协议条款的歧义(例如GPL的“聚合体”定义),建议咨询开源法律领域的专业人士。