
Open source 从字面上理解仿佛是 “开放源代码”,但是实际上“开源”其实远远超出了对于源代码本身是否可访问与否的定义,它包括授权机制(许可证),治理机制,以及一些社区运营甚至开源商业模式相关的内容。如果仅仅讨论源代码可访问的话,我们一般称其为 “Source Available”。
要理解这个问题,我们要回顾一下开源的历史。“Open Source” 的出现需要先提到 “Free Software”。在软件发展历史的早期,绝大多数的商业软件是只售卖二进制的可执行程序的,并不会让源代码对用户可见。源代码当时是被当成软件的核心价值跟秘密的。某种程度上来说,对于当时的软件开发者来说,这是一种对软件知识产权的保护。也正是由于知识产权对软件的保护,带来了早期软件行业几十年爆发式的发展,并且也出现了微软、Oracle等等一系列成功的商业软件公司。
但是源代码的封闭,也带了一些明显的问题。比如存在大量潜在的安全隐患,以及软件的漏洞只能等待软件公司来发现和修复,通常这会花去很长的时间。最重要的是,软件的开发主体是一个崇尚创新的群体:程序开发者,这群人对当时源代码的垄断非常不满。正是这个原因 Richard Matthew Stallman (简称 RMS)发起了 GNU 项目,并且发起了 “Free Software Movement”(自由软件运动),提出软件的研发应该是自由传播和共享的,软件的源代码应该向所有人公开,应该允许所有人自由地对软件进行修改和传播。为了保障这一点,更是衍生出了著名的 GPL 许可协议(GNU General Public License)。
Free 这个词在英文中有免费的意思,所以避免歧义,当时的自由软件运动中的一些领袖更建议使用 “Open Source” 这个词。Bruce Perens 和 Eric Raymond 在 1998 年成立的开源促进会(Open Source Initiative,简称为 OSI)对 “Open Source” 的定义给出了一个规范,虽然这个定义并不是强制性的,但是我们提到开源(Open Source)的时候,OSI的定义是一个业界主流的共识。它对开源的定义(https://opensource.org/osd.html)有 10 个条件:
所以可以看到开源对于商业其实是比较兼容和接受的,开源软件更不等同于“免费”。并且开源定义鼓励开放跟协作,尊重作者的权利的同时也鼓励修改自由和衍生的自由。
至于为什么要开源,我认为这个是现有基础软件,或者通用平台型软件的唯一选择。现在软件的复杂度已经远远超过一个商业实体所能够覆盖的程度了,只有通过开源协作的方式,让足够多的用户和开发者发现缺陷并且快速修复,才能保持软件足够的先进性跟竞争力。在最近的二三十年,软件行业的大部分创新基本都集中在了开源软件领域,Linux,Android,Apache,MySQL,PostgreSQL,Kubernetes,Hadoop等等自由软件或者开源软件的成功,足以证明开源模式的强大。
另外开源经济学也早已证明,“搭便车”行为相比较于积极参与开源贡献,并非是最优选择。由于开发者群体对于创新和创造的热爱,以及对于参与开源贡献本身带来的自我满足,加上最终获得的声誉以及开源产品带来的实际价值的激励,让“越早越多的参与开源贡献”成为了最优选择。也正是开源软件的这个属性,让开源软件协作的方式,最终超越了闭源软件所带来的效益,获得了更高的生产效率。
