常见开源协议横向对比
1 简介
软件开发协议经常看到的内容,但是很多人不知道协议的具体内容,甚至连最基本的概念也没有。因此,本文对协议的概念、常见协议进行介绍,并横向对比。以便大家更好地理解这些协议。
2 常用协议简介
软件的协议相当于软件发布方提出的使用要求。这些要求是具有法律效应。如果不遵守,轻则受到警告,重则受到经济制裁或受到经济损失。所以,任何软件开发者都应该注意软件的常用协议。
BSD
商业软件可以使用,也可以修改使用BSD协议的代码。
需要遵守以下规则:
- 如果分发的软件包含源代码,则必须在源代码中保留原始的BSD许可证声明。
- 如果分发的软件仅包含⼆进制程序,则必须在⽂档或版权说明中保留原始的BSD许可证声明。
- 未经许可,不得使⽤原始作者或机构的名字为软件做市场推⼴。
Apache License 2.0
Apache Licence是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。Apache Licence是著名的非盈利开源组织Apache采用的协议,需要遵守以下规则:
- 必须在源代码中保留原始的Apache许可证声明。
- 如果⽤户修改了源代码,需要在被修改的⽂件中说明。
- 在衍⽣产品中,必须保留原来代码中的版权、专利、商标及作者规定的其他需要包含的说明等信息。
- 如果在分发的软件中包含Notice⽂件,则需要在Notice⽂件中包含Apache许可证声明。
MIT
商业软件可以使用,也可以修改MIT协议的代码,甚至可以出售MIT协议的代码。需要遵守以下规则:
- 如果分发的软件包含源代码,则必须在源代码中保留原始的MIT许可证声明。
- 如果分发的软件仅包含⼆进制程序,则必须在⽂档或版权说明中保留原始的MIT许可证声明。
MPL
商业软件可以使用,也可以修改MPL协议的代码,但修改后的代码版权归软件的发起者。
EPL
商业软件可以使用,也可以修改EPL协议的代码,但要承担代码产生的侵权责任。
LGPL
产品对外分发或销售时静态链接的相关代码要开源,因此商用时需要动态链接使用。商业软件可以使用,但不能修改LGPL协议的代码。需要遵守以下规则:
- 如果软件通过动态链接的⽅式使⽤LGPL类库,则该软件不需要开源。
- 如果软件通过静态链接的⽅式使⽤LGPL类库,则软件作者必须提供程序的⼆进制⽬标⽂件(不需要提供源代码),以便⽤户有机会更新LGPL类库并重新链接到该程序。
- 如果修改了LGPL的源码或者衍⽣了新的代码,则所有修改后及衍⽣的代码也必须遵循LGPL许可证
GPL2.0
产品对外分发或销售时链接的相关代码要开源,因此商用时要进程隔离。商业软件不能使用GPL协议的代码。
GPL3.0
GPLv3包含了明确的专利许可以及添加了对数字版权管理和加密签名的限制,不仅要求⽤户公开源码,还要求公布相关硬件及必要的安装信息。
AGPL
产品即使不对外分发或销售,链接的相关代码也要开源,因此商用时要进程隔离。
MPL
MPL License由Mozilla基⾦会开发并维护,介于BSD(衍⽣代码可以闭源)和GPL(衍⽣代码必须以GPL⽅式开源)之间,最新发布的2.0版以更简洁和更好的兼容其他协议为⽬标,⿎励企业和开源社区为开发核⼼软件做更多贡献。
使用MPL源码需要遵守以下规则:
- 如果修改了MPL的源码或者衍⽣了新的代码,并且以源代码⽅式发布的⽂件,则所有修改后及衍⽣的代码也必须遵循MPL许可证。
- 如果⽤户⾃有的源码通过专⽤接⼝访问MPL的源码及类库,则包含专⽤接⼝的代码必须遵循MPL许可证,⽤户⾃有源码不必遵循MPL许
可证。 - ⽤户获得MPL代码中的专利许可,但是不能使⽤其原始商标。
EPL
EPL License由Eclipse基⾦会开发并维护,在CPL基础上删除了专利相关诉讼的限制条款。EPL⽐GPL许可证更为宽松,并且与GPL并不兼容。使⽤EPL源码需要遵守以下规则:
- 如果修改了EPL的源码或者衍⽣了新的代码,并且以源代码⽅式分发,则所有修改后及衍⽣的代码也必须遵循EPL许可证。
- 如果软件以⼆进制⽬标⽂件的形式分发,则需要声明可以根据请求向其他⽤户提供源代码。
- ⽤户获得EPL代码中的专利许可。
No License
随便用 随意改
3 横向对比
| Item/Protocal | BSD | Apache License 2.0 | MIT | MPL | EPL | LGPL | GPL2.0 | GPL3.0 | AGPL | MPL | EPL | No License |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 商业软件 | 免费 | 免费 | 免费 | 免费 | 免费 | 免费 | 收费 | 收费 | 收费 | 免费 | 免费 | 免费 |
| 个人软件 | 免费 | 免费 | 免费 | 免费 | 免费 | 免费 | 收费 | 收费 | 免费 | 免费 | 免费 | 免费 |
| 散布 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
| 修改 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
| 授权转售 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
| 无担保责任 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
4 总结
本文对常见的协议进行了简介和横向对比,希望对软件开发者有所帮助。