# 开源软件之道
介绍了开源软件的定义、优点、风险以及许可证的简介和兼容性，强调了开源软件在信息和知识共享中的重要性，同时提醒了选择合适许可证的重要性。.

2020年7月02日7分钟阅读

- Blog/开源
- Personal/Blog

源代码开放的软件并不一定是开源软件，开源软件有着严格统一的的定义，封闭软件（Closed Software）、自由软件（Free software）和开源软件（Open source software）有着显著地区别。

## 开源软件的定义

开源软件促进协会 OSI 对开源软件有明确的定义，OSI 对开源软件的定义一共有十个条款：

    1. 自由再发布（Free Redistribution）
    2. 源代码（Source Code）
    3. 派生作品（Derived Works）
    4. 作者源代码的完整性（Integrity of The Author's Source Code）
    5. 不能歧视任何个人和团体（No Discrimination Against Persons or Groups）
    6. 不能歧视任何领域（No Discrimination Against Fields of Endeavor）
    7. 许可证的发布（Distribution of License）
    8. 许可证不能针对某个产品（License Must Not Be Specific to a Product）
    9. 许可证不能约束其他软件（License Must Not Restrict Other Software）
    10. 许可证必须技术中立（License Must Be Technology-Neutral）

通过开源软件定义的十个条款，可以清楚的看到 OSI 所坚持的原则：

- 坚持开放，鼓励最大化地参与和协作
- 尊重作者权利，同时保证程序的完整性
- 尊重独立和中立，避免任何可能影响这种独立性的事物

有了这样一个清晰而又完整的定义，在法律层面保证了开源软件的开放性，独立性和继承性。

## 开源软件的优点

- 高质量
- 零许可证费用
- 开放和自由
- 灵活可定制
- 公开透明
- 良好的学习平台

## 开源软件的风险

开源软件主要风险在于 `管理维护` 和 `技术支持` 以及 `许可证法律纠纷`，由于开源软件采用的协作方式，你可能无法追究某一处代码的作者（部分协议要求作者著名）。以及如果出现问题，你可能无法寻找官方的技术支持，更多的支持可能来自于社区，可这种支持不是每次都有好人跳出来帮忙。还有如果你不了解许可证可能会带来的法律风险（部分国家法律不同，如果源代码无许可证，默认著作权属于作者）。

## 开源许可证简介

开源许可证并不只是保护作者的权利，更多是赋予用户各项权利，许可证规定了使用主体，方式，用途。明确说明了用户可以是个人或者公司等，怎么修改和运行以及是否可以用来进行其他合法用途。

在使用开源软件要做的第一步就是找出开源软件中所涉及的所有许可证。每个开源软件的不同版本可能会使用不同的许可证，同时还有注意许可证的版本，以及有些开源软件会采用双重或多重许可（dual-license）的模式。

在 OSI 的网站上列出的 流行并广泛使用且拥有广泛社区的许可证
，分别是：

- [Apache 许可证 2.0][https://opensource.org/licenses/Apache-2.0
  ]
- [BSD 许可证 3-Clause][https://opensource.org/licenses/BSD-3-Clause
  ]
- [BSD 许可证 2-Clause][https://opensource.org/licenses/BSD-2-Clause
  ]
- [GUN 通用公共许可证（简称 GPL）][https://opensource.org/licenses/gpl-license
  ]
- [GUN 宽通用公共许可证（简称 LGPL）][https://opensource.org/licenses/lgpl-license
  ]
- [MIT 许可证][https://opensource.org/licenses/MIT
  ]
- [Mozilla 公共许可证 2.0（简称 MPL）][https://opensource.org/licenses/MPL-2.0
  ]
- [通用开发和发布许可证 1.0（简称 CDDL）][https://opensource.org/licenses/CDDL-1.0
  ]
- [Eclipse 公共许可证 2.0（简称 EPL）][https://opensource.org/licenses/EPL-2.0
  ]

## 许可证的兼容性

目前经过 ISO 认证的许可证多达 70 多种，被自由软件基金会认可的自由软件许可证也有数十种，而它们的条款又各不相同，有些甚至互相矛盾。这种兼容性问题被称为 `许可证增值问题（License proliferation）`。

怎么样才算兼容呢？如果使用许可证 A 的代码和使用许可证 B 的代码能在一个广域作品中结合在一起，那么 A 和 B 就是兼容的，否则就是不兼容的。更近一步，如果结合后的广义作品可以用许可证 A 发布，那么许可证 B 就是许可证 A 兼容的（A-compatible）。反之亦然，但需要注意的是兼容性并不可逆。

### 如何选择许可证

开源许可证选择工具

如今开源软件早已经成为了软件领域不可或缺的重要组成部分，要以辨证的观点看待开源软件。它自由，平等，协作的精神实践了信息和知识共享的理念，并且实现了知识产权保护和分享之间的微妙平衡。同时开源带来的自由，免费有可能也是最贵的。

参考：

《开源软件之道》

开源社——开源许可证选择器

Open Source Initiative

阮一峰《如何选择开源许可证》