本文来源(视频文稿)

有源代码就是开源吗?很多人可能不知道开源在业界是有严格定义的。这个定义由 OSI 提供。OSI 全称为开放源代码促进会,成立于 1998 年,是一个旨在推动开源软件发展的非营利组织。OSI 在官网给出的对于开源的定义有下面十条:

  1. 分发自由。不应限制任何人将该软件作为某软件发行版的一部分售出或免费送出,不应该对这种销售收取版税或其他费用。简单说就是不能要钱。虽然要求是这样,但是现实中基于开源的商业项目赚钱的方法也很多。代码虽然不要钱,但是服务支持仍然是可以收费的,例如红帽的RHEL就是卖服务支持。再比如,安卓的代码免费用,但是如果想打上安卓 logo 还是要找谷歌交钱的。

  2. 源代码。软件必须附有源代码,并且必须以源码或目标码形式发布。如果分发时没有源码,则必须要有一种广为人知的方式,能够以不超过合理的复制费用获得源代码,最好是通过互联网免费下载。所提供的源代码必须是最有利于程序员修改使用的那种形式。故意混淆源代码是不允许的,预处理过的、翻译过的等中间形式代码也是不允许的。说了这么多总结一下,就是为了方便大家修改代码必须提供最原始的代码。定义这么长也是为了严谨基本没有什么空子可以钻了。

  3. 必须允许别人修改和衍生该作品,并且必须允许他们以相同的许可证分发。这条也很好理解,简单说就是让人改代码还得让人把改好的代码拿去做分发不让改就失去开源的意义了。

  4. 原作者可以要求源码不可改动以保证代码完整性,只能在许可证允许基础代码加补丁分发,这种场景下,许可证必须明确允许分发修改后的源码。构建的软件许可证可以要求衍生作品带有区别于与原作者的软件名称或版本号。这条是对上一条的补充有些作者可能比较在意自己源码的完整性 OSI 允许开源协议里加上这种要求。

  5. 不歧视个人和团体。不得歧视任何个人或团体。这个很好理解,不能说我这个软件只给哪些人用哪些人不能用,歧视行为是不被允许的。当然现实中法律会提出更严格的要求,例如美国的软件出口限制,这种限制并不来自许可证本身不是开源的讨论范畴。

  6. 不歧视任何领域。不得限制任何人在任何领域使用该程序,例如不能限制将其用于商业用途、基因研究等。和上条的精神一脉相承,不能说我这个软件只让这些行业用不让另一些行业用。从这两条大家也看出来了非歧视条款是开源软件的核心价值之一

  7. 软件重新分发时,所有接收者都获得许可证所描述的关于该软件的全部权利,而不必执行额外的协议以获取这些权利。简单说就是在开源软件的分发过程中,不能有中间商赚差价,原作者提供的权利不能被分发人篡改和加码。这条是为了让开源软件能够自由传播,不能说传着传着就变成闭源的了。当然,现实中 MIT 和 Apache 这种比较宽松的协议是允许闭源和更换许可的,可能算是对商业的一种妥协吧。

  8. 许可证不能针对特定产品。许可证赋予接收者的权利不应该和特定软件发行版绑定。如果一个程序是从某个发行版中提取出来,并且在许可证允许的范围内使用和分发,那么该程序的所有用户都拥有和原始软件发行版一样的权利。这个翻译起来还真挺绕的,说到底就是软件的开源是软件本身的特性,并不随着发行方式改变,例如不管一个开源软件在哪个 Linux 发行版中附带,还是你就从网站上下载源码编译不影响它本身的开源权利。

  9. 许可证不得限制其他软件的许可证。不得对一起分发的其他软件加以限制,例如许可证不能要求在同一媒介上发布的所有其他软件都必须是开源软件,这条说到底也是一种非歧视精神,是对闭源软件的非歧视。你不能说自己开源了就要求别人也都是开源的,这个是不合理的。

  10. 许可证必须是技术中立的,许可证的提供不能基于任何专门的技术或界面风格。这条我的理解是不能给开源许可证添加额外的门槛,不能说你要求我到某个网站上点击一个“我同意”然后才能下载源代码,这就太麻烦了。这条要求是为了让开源软件对用户友好。

OSI 给出的这十条开源定义只是一个基础,现实世界中符合这些要求的开源协议可以向 OSI 提出申请,获得 OSI 的认证之后会被加入 OSI 的官网成为 OSI 认证的开源协议之一。

好了今天视频到这就结束了,希望能让大家对开源有更多的了解吧。