开源协议解读

最近在研究开源项目,对开源协议有点陌生,所以写一篇文章加深印象。

协议选择指南(从宽松到严格)

复制代码
MIT → Apache 2.0 → BSD → MPL → LGPL → GPL
   最宽松                                    最严格

常用协议对比

协议 商业使用 修改代码 需要开源修改 专利授权 特点
MIT 最简单、最宽松
Apache 2.0 包含专利保护
BSD (3-Clause) 类似 MIT
MPL 2.0 ⚠️ 部分 文件级开源
LGPL v3 ⚠️ 库文件 可闭源链接
GPL v3 病毒式传播

详细说明

MIT License 🟢 最推荐

复制代码
✅ 可以商用
✅ 可以修改
✅ 可以闭源
❌ 无专利保护
❌ 无任何声明责任

一句话: 做什么都可以,只需保留版权声明。

适用场景:

  • 希望代码被广泛使用
  • 不介意别人闭源
  • 想要最简单的协议

Apache License 2.0 🟢 企业友好

复制代码
✅ 可以商用
✅ 可以修改
✅ 可以闭源
✅ 专利授权(重要!)
❌ 需要说明变更

一句话: 类似 MIT,但多了专利保护和变更声明要求。

适用场景:

  • 企业项目
  • 涉及专利风险的技术
  • 需要法律保护的开源项目

BSD License 🟢 简单宽松

复制代码
✅ 可以商用
✅ 可以修改
✅ 可以闭源

一句话: 和 MIT 类似,但表述方式不同。

3-Clause BSD 比 2-Clause 多了: 禁止用作者名义做背书


Mozilla Public License 2.0 🟡 文件级开源

复制代码
✅ 可以商用
✅ 可以修改
⚠️ 修改的文件必须开源
✅ 可以闭源链接
✅ 专利授权

一句话: 修改哪个文件,哪个文件就必须开源,但整体项目可以闭源。

适用场景:

  • 库/框架项目
  • 想让别人贡献但不强制整个项目开源

GNU Lesser GPL v3 🟡 库友好的 GPL

复制代码
✅ 可以商用
✅ 可以修改
⚠️ 修改的库必须开源
✅ 可以闭源链接(动态链接)
✅ 专利授权

一句话: 如果是静态链接,你的代码也要开源;动态链接可以闭源。

适用场景:

  • 开源库
  • 希望保护库本身,但允许商业应用使用

GNU GPL v3 🔴 最严格

复制代码
✅ 可以商用
✅ 可以修改
✅ 修改必须开源
✅ 使用必须开源(病毒式)
❌ 不能闭源链接
✅ 专利授权

一句话: 使用 GPL 代码,你的项目也必须 GPL。

适用场景:

  • 想强制所有衍生项目也开源
  • 自由软件运动
  • 不希望商业公司利用

常见问题

Q: 我应该选哪个协议?

情况 推荐协议
不知道选什么 MIT
企业项目/担心专利 Apache 2.0
开发库,希望别人闭源使用 MIT / Apache 2.0
开发库,希望修改开源但整体闭源 MPL 2.0
坚决反对闭源 GPL v3

Q: 协议可以改吗?

可以! 但有条件:

  • 旧版本代码保持原协议
  • 新版本可以换协议
  • 如果有其他贡献者,需要获得所有贡献者的同意

Q: 什么是"病毒式"?

指 GPL 的特性:如果你使用了 GPL 代码,你的整个项目也必须以 GPL 协议开源。

Q: 闭源项目可以用开源代码吗?

协议 能否闭源使用
MIT / Apache / BSD ✅ 可以
MPL ✅ 可以(只开源修改部分)
LGPL ✅ 可以(动态链接)
GPL ❌ 不可以

GitHub 上如何选择

  1. 创建仓库时,点击 "Choose a license"
  2. GitHub 提供可视化选择器
  3. 或直接在 LICENSE 文件中写入协议全文

快速命令

bash 复制代码
# 创建 MIT License 文件
curl -o LICENSE https://choosealicense.com/licenses/mit/

总结建议

复制代码
90% 的情况选 MIT 或 Apache 2.0

MIT:      我不关心别人怎么用我的代码
Apache:  我想保护自己,也想保护使用者
GPL:      我要捍卫自由软件精神

参考资源

相关推荐
Alex艾力的IT数字空间1 天前
大模型的“Think 模式”(思考模式)关闭的配置方式
人工智能·机器人·web3·github·开源软件·量子计算·开源协议
蒸汽求职13 天前
北美求职身份过渡:Day 1 CPT 的合规红线与安全入职指南
开发语言·人工智能·安全·pdf·github·开源协议
苏渡苇13 天前
Redis 版本演进、新特性与协议那些事儿
数据库·redis·缓存·开源协议·redis版本·redis新特性
拆房老料23 天前
从 Euro-Office 说起:Office 不是编辑器,是一套复杂系统工程
前端·编辑器·开源软件·开源协议
The️1 个月前
STM32F407 + LVGL 图形界面开源开发板
stm32·单片机·嵌入式硬件·开源·硬件工程·开源协议·pcb工艺
虎头金猫1 个月前
自建 GitLab 没公网?用内网穿透技术,远程开发协作超丝滑
运维·服务器·网络·开源·gitlab·开源软件·开源协议
REDcker1 个月前
开源软件开源协议详解与选择指南
开源·开源软件·协议·开源协议·软件
分布式存储与RustFS3 个月前
从MinIO到RustFS:一次关于性能、安全与开源协议的实战迁移
开发语言·安全·rust·开源协议·minio·企业存储·rustfs
灵哎惹,凌沃敏3 个月前
一句话总结IIC协议
arm开发·单片机·开源协议