你有没有在 GitHub 上找过某个开源项目,点进代码仓库却看到一份看不懂的 LICENSE 文件?MIT、GPL、Apache 这些名字像是某种密码,其实它们是开源软件的“使用说明书”。搞不清它们的区别,轻则用错代码惹上麻烦,重则被要求开源整个项目。
MIT 许可证:最宽松的“随便用”
MIT 是目前最受欢迎的开源许可证之一。它的核心就一句话:你可以干任何事,只要保留原始版权说明。无论是个人项目、商业软件,还是闭源产品,都可以放心使用 MIT 授权的代码。
比如你在做个微信小程序,想借用一个 MIT 协议的轮播图组件,直接拿去用就行,只需要在项目里注明“本项目使用了 XXX 的代码,遵循 MIT 许可证”就够了。
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction...
GPL 系列:传染性最强的“开源守护者”
GPL(GNU General Public License)走的是另一个极端。它允许你自由使用、修改代码,但有一个硬性条件:只要你发布了基于 GPL 代码的衍生作品,整个项目也必须以 GPL 开源。
这就像你借了别人一本“开源菜谱”,照着做了道菜端去饭店卖,那这道菜的做法也得公开。Linux 内核就是采用 GPL v2,所以所有基于它的发行版(如 Ubuntu)都必须开放源码。
如果你在开发一款闭源的 App,并且链接了 GPL 协议的库,那就可能被迫公开全部源代码。所以企业用 GPL 代码时格外谨慎。
AGPL:把“传染”扩展到网络服务
普通 GPL 对通过网络提供服务的情况管不到,于是 AGPL(Affero GPL)补上了这个漏洞。哪怕你不分发软件,只是在服务器上跑,用户通过网页或 API 使用,你也得提供源码。
像 MongoDB 和 Redis 的某些版本就用了 AGPL,就是为了防止云厂商白嫖却不回馈社区。
Apache 2.0:带专利保护的商用友好型
Apache 许可证和 MIT 类似宽松,但它多了一层重要保障:明确授予使用者专利权。也就是说,贡献代码的人不能事后用专利来告你侵权。
这对大公司特别重要。比如谷歌的 Android 大量使用 Apache 协议的库,就是为了避免潜在的专利纠纷。另外,Apache 要求你声明对原始代码的修改,比 MIT 更严格一点。
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
BSD 许可证:MIT 的“亲戚”,条款更少
BSD 有多种版本,最常见的是 2-Clause 和 3-Clause。它比 MIT 还简单,几乎不限制使用,唯一的差别是 3-Clause 多了一个“不得用作者名义背书”的条款。
很多底层系统工具,比如 FreeBSD 操作系统,就采用 BSD 许可证,允许厂商拿去改造成自己的产品,连代码都不用公开。
怎么选?看你的使用场景
如果你是开发者想开源自己的项目,MIT 最省心,社区接受度高;想强制回馈,选 GPL;重视专利问题,选 Apache。
如果你是使用者,引入第三方库时一定要查清楚许可证类型。npm 或 Maven 依赖里经常混入不同协议的包,一个不小心就踩坑。现在很多公司都用自动化工具扫描依赖的许可证,提前预警风险。
说到底,开源不是“免费午餐”,许可证就是游戏规则。花十分钟搞清区别,能省下后续一大堆麻烦。