很多开发者在集成第三方代码时,心里默认一句话:开源的,拿来用就行。真到了产品上线、公司被尽调、或者收到律师函的时候,才发现自己早把「开源」和「免费随便用」画了等号。这几年我接触的几类咨询里,开源协议踩坑占了不小的比例,而且多数坑本来花十分钟看一眼协议就能避开。
一、MIT、Apache:宽松,但「宽松」有前提
MIT 和 Apache 是开发者最熟悉的两类宽松协议。它们确实允许商业使用、修改、闭源再发布,但义务藏在细节里。
MIT 要求你保留原来的版权声明和许可声明。你把代码抄进产品、把声明删干净,这就违约了。
Apache 比 MIT 多一层:它明确给了专利授权,但要求你如果修改了文件,要在文件里标注改了什么。对闭源商业产品来说,这两条都不难做到,关键是「别手滑删声明」。
二、GPL:传染性才是真正的硬约束
踩坑最多的是 GPL 这一类「左版」协议。它的核心不是「不能商用」,而是「衍生作品也要以同样协议开源」。
常见误判有两种。一种以为「我只调个接口、没改它源码」就没事——但如果你的程序和 GPL 代码是同一个可执行体,动态链接也常被认定构成衍生,闭源产品就得被迫开源。另一种以为「内部系统不发布就不算分发」——在公司内网给员工用的系统,同样可能被认定为分发。
不少创业公司代码库里悄悄混进了 GPL 组件,融资尽调时才被拉出来,结果是要么开源核心代码,要么花代价替换,很被动。
三、AGPL:连「放在服务器上让人用」都算
GPL 还只是「分发才触发」,AGPL 把边界推到了网络。只要你的服务通过网络向用户提供,并且服务里用了 AGPL 的组件,你就有义务把对应部分的源码也公开。
这对做 SaaS、做云服务的团队尤其要命。很多人以为「我又没把软件发给用户,只是部署在服务器」,AGPL 偏偏就是为堵这个口子设计的。在云上部署服务的场景,更要提前看清依赖里有没有 AGPL。
四、几个容易被忽略的点
依赖是会传递的。你引的一个库,它自己又引了 GPL 的库,传染性顺着依赖树往上走。
双许可意味着你可以选,但选了免费那条就要守免费那条的规则。部分协议要求署名、要求保留 NOTICE 文件,漏了就是违约。别忽视出口管制——有些开源项目附带出口管制条款,跨国团队要单独评估。
五、给开发者的实操清单
:把每个第三方组件的协议标清楚,别等尽调时现翻。
:优先 MIT、Apache、BSD,GPL 与 AGPL 能不碰就不碰。
:版权声明和 NOTICE 文件别删,删了就是违约。
:引入新依赖前过一眼协议,成本极低、收益很高。
:上线前让法务或外部律师过一遍,比事后补救便宜得多。
开源协议本质上是许可证,不是免责牌。它把「你能做什么、不能做什么」写得明明白白,尊重它,它就是你快速开发的助力;无视它,它就可能变成产品上线后的一颗雷。把协议看明白,比事后找律师补救省心得多。
—— 刘斯亮律师