2001 年,时任微软首席执行官的 Ballmer 称 Linux 像恶性肿瘤一样,污染着知识产权,GPL 开源协议则是「病毒」协议 1。此番言论或许可以反映彼时科技圈对开源软件的一些误解。而我们,尽管已经习惯于直接或者间接使用各种开源软件,但如果被问到「开源软件到底是什么」,大多数人只能以试探的口吻回答「是公开了源代码的软件吗?」

开源显然不是「公开源代码」那么简单。开源软件从何而来?如何定义?为何一些用户和公司会选择开源软件?这一切都得从上世纪方兴未艾的计算机产业说起。

角马与企鹅,GNU 工程与自由软件

1953 年,为早期电子计算机 UNIVAC 编写的 A-2 system 正式发布,发行商公开了软件的全部源代码,希望更多的人参与软件的开发,促进软件的完善。A-2 system 因此被认定为历史上第一个自由和开源的软件 2。不过,这件事在当时以及之后的数十年里并没有很大的反响。这是因为在计算机行业发展初期,软件是购买硬件的附赠产品,加之其功能远没有今天这么复杂,商业公司只是依靠硬件赚钱。IBM 等硬件公司已经习惯于将软件和软件源代码一起发布,用户可以随意修改、分享软件。

随着软件成为了一种商品,软件的开发商为了利益考量,不再公开软件的源代码,并且通过技术手段限制用户分享和修改软件。当这种做法成为潮流之后,相关的法律逐渐确立起来,软件成为一种被法律保护的开发商的财产。70 年代之后的许多软件都附有各类专有许可证,往往写明「用户不得分享,修改该软件」。80 年代,从系统级的 Unix,到一个简单的打印机模块都开始限制用户的各种权利,这让 AT&T 等商业公司赚得盆满钵满,同时让不少人怒不可遏。

一方面,不公布源代码意味着无法自行修改软件,软件出了问题用户便无计可施,只能求助于开发商;另一方面,他们认为购买软件后不能自由地使用软件,软件控制用户而不是用户控制软件非常荒唐。1983 年,Richard Stallman 提出 GNU 工程,以角马作为标志,希望在专有软件大行其道的世界中开辟出一片净土。GNU 工程的目标是构建一个完全自由的操作系统,其内核,组件人人都可以修改,不存在任何限制,而为了更好地定义这种软件,Richard Stallman 提出了自由软件(free software)的概念,自由软件保护用户的四种自由3:

  1. 按照意愿以任何目的使用软件的自由;
  2. 学习和修改软件的自由;
  3. 分发拷贝软件的自由;
  4. 分发拷贝修改后软件的自由;

当一个软件的所有代码都保证了这四种自由,该软件才是自由软件,而需要实现第一和第三项自由,软件必须公开其源代码。不久之后,Stallman 建立了自由软件基金会(Free Software Foundation)来推广自由软件运动,此组织草拟了著名的 GPL 许可证,你可以在任何采用 GPL 的软件的说明中看到这个组织的名字。在这之后的 90 年代,自由软件和 GNU 计划迎来了机遇和挑战。

1991 年,Linus Torvalds 发布了其主持开发的 Linux 内核的全部源代码,宣告 Linux 内核采用 GPL 许可证,是任何人可以参与开发和修改的自由软件。此时 GNU 工程希望建立的完全自由的操作系统只差一个内核没有开发完成,Linux 这只小企鹅 4 正好补足了这个缺口。GNU/Linux 5 的组合在之后成为了最受欢迎的服务器系统,得益于谷歌在 08 年发布的安卓,Linux 内核也占领了绝大多数移动端市场。自由软件名声大震。

角马和企鹅的组合实现了 GNU 工程的夙愿,但 90 年代开放源代码的不只有 Linux。操作系统 FreeBSD,如今最受欢迎的网页服务器之一 Apache 等重磅选手纷纷加入自由软件的阵营。网景(Netscape)作为一个商业公司,也宣布旗下的一些产品为自由软件。网景的举动不仅造就了今天的 Mozilla Firefox,也促使自由软件运动的参与者们仔细考量自由软件的商业前途,在此问题上,组织内部的意见并不统一。

大教堂与市集,开源软件的「反叛」

一直以来,人们对自由软件有着很多的误解,其中最重要的就是其英文名「Free Software」有免费和自由两重意义。另外,自由软件对用户权利的激进态度很大程度上限制了软件开发商的各种行为。这些都让期望通过软件赚钱的公司对自由软件敬而远之。一些自由软件运动的参与者寻求着改变。

恰好此时,Linux 的开发者之一 Eric Steven Raymond 刊出了《大教堂和市集》(The Cathedral and the Bazaar)。书中他以开发者的角度讨论了两种软件开发的合作模式:大教堂模式下,开发团队负责开发软件,分发软件时给出软件源代码,他认为这不利于及时反馈问题,改进软件,当时 GNU 工程的很多组件都是这种模式。而 Linux 采用的市集模式,让所有人都能实时看到源代码,有了问题随时处理,则是更好的协作方式。他认为「足够多的眼睛能够发现所有的问题」。这本书实用主义的角度给了一些人以启发,他们希望剔除自由软件概念中激进的政治立场,从实用的角度重新阐述自由软件的理念,让软件拥有更好的商业前景。

网景的开源行为证明了这个思路的可行性,于是开源软件(Open-source software)的概念诞生了。开放源代码促进会(Open Source Initiative)用十条规则 6 界定开源软件。简单地来说,它要求软件公开源代码,可以被自由分发,不得涉嫌歧视,但在一些情况下,也允许开发者对源代码的修改进行一定的限制。一个软件即使公开了源代码,如果禁止任何一个用户修改或分发,那么它就不是开源软件。开源软件的定义修改自 Debian (一个 GNU/Linux 发行版)社区关于自由软件的开发者契约,但和自由软件价值观完全不同,「开源软件」概念不对用户自由表态,其宣传和实践站在了实用主义的立场上。

自由软件概念的提出者 Richard Stallman 认为开源软件是对自由软件运动的「反叛」7。这两类概念对一些事情的态度有明显区别:自由软件运动宣扬用户对软件的控制权,因此提倡采用「copyleft」—— 规定修改自由软件后必须以自由软件的形式发布;倘若在一个平台上可以运行某软件但不能运行这个软件的修改版,那么被称为「Tivoization」。自由软件基金会强烈反对「Tivoization」,认为这种平台让用户修改变得毫无意义,因此更新了许可证抵制这类平台。开源软件则不太在乎上面这两种情况。

然而,由于自由软件对不采用「copyleft」的协议非常包容,自由和开源软件很大程度上指的是同一类软件。这样也就出现了一种中立的说法:自由和开源的软件(Free and open-source software/ FOSS),指既符合自由软件定义,也符合开源软件的定义。

GPL 到 MIT,认识软件许可证

如果想要鉴别一个开源软件,需要问两个问题:如何获取源代码?软件采用了什么许可证8?得益于互联网,现在的软件往往选择在线的代码托管平台存放软件的源代码。不过一个声称自己「开源」的软件,不能仅仅有源代码。

你可以在大多数软件安装文件夹或者源码发布平台上找到一个名叫「License」的授权文件,开发商在此文件写明了用户使用该软件的各种权利和限制,这就是许可证。有时候,在开始安装或者使用软件时也能看到许可证,上面往往写着「如果使用此软件,你必须同意……」。软件许可证是鉴定软件是否是开源软件最重要的方式。

起初,很多开发商在软件开源时都会自己写一份许可证,以保护用户自由使用修改和分发此软件的权利,后来的开发商则趋向于选择前人写好的许可证模板。一些流行的许可证逐渐被自由软件 9 和开源软件组织 10 承认,加之 GitHub 等平台的提倡,带有强「copyleft」的 GPL,规定十分宽松的 MIT,常见于大型软件的 Apache,逐渐成为了目前市场上最受欢迎的几类自由和开源的软件许可证。

这些许可证虽然符合自由与开源的定义,但采用 MIT 和 Apache 这类宽松的许可证意味着他人能够将此软件修改后以专有软件的形式发布,因此会出现两种特殊情况。第一种情况是 GitHub 等代码托管平台上的项目许可证很可能和用户看到的软件许可证不同,VS Code 和安卓就是典型例子。微软的 VS Code 开源项目采用的是 MIT 许可证,而 VS Code 软件本身是微软名下的专有软件。采用 Apache 协议的安卓允许厂商根据不同的硬件定制系统,添加扩展,所以才有如此多的安卓调教风格。还有另一种情况,软件本身是开源的,但呈现的内容或者引入的一些扩展并非开源。例如 Telegram 客户端的确是开源的,但其上游服务却是闭源的,它无法做到真正的开源透明 11。

市面上如果出现了新的许可证,可以向开源组织提交检查申请,如果符合前述的开源定义,就会被认定为开源许可证。

普通用户到科技巨头,开源的支持者

自由软件运动以「用户权利」为口号推广自由软件和开放源代码,而开源软件组织则用「有利于完善软件和教育」等实际功效来鼓励开发者开放源代码。开源软件很大程度上方便了开发者的协作和开发,同样也吸引了小到普通用户,大到科技巨头的各色群体。

普通用户常常以「安全」描述开源软件,但更准确的说法是「隐私安全」。虽然开放源代码的本意是让更多人参与检查代码,发现错误,但这也把软件潜在漏洞暴露给了另外一些人。图谋不轨的黑客总比白客更有动力去寻找漏洞,开源软件的安全性实际上取决于谁先发现并利用或修复漏洞。源代码的开放带来的隐私保护却是实打实的,用户可以看到开发商究竟添加了哪些数据收集服务,如果不想要被追踪,还可以学习着删除这些服务。VSCodium 作为 VS Code 的自由开源版本就是这么出现的。这能够避免开发者在利益或者权力的诱导下做出有害用户的举动。

对于一些大公司而言,采购开源软件通常比专有软件更加便宜,开源社区更有活力,因此他们愿意投资或者将产品开源给社区让这些软件更加完善,借此也能获得一个好的名声和不错的市场占有率。开源许可证并不会影响公司通过项目获得利润:开源或者自由协议并不限制软件的售卖。即使不卖软件本体,开源软件的开发公司也能通过提供技术支持,培训,个性化获得不错的收入,Red Hat ,Nextcloud 等公司在这方面都取得了不错的成绩。

2016 年,曾经指 Linux 和开源为病毒的 Ballmer 对微软拥抱开源的举动表示了支持,认为曾经的言论并不适用于这个时代 12。微软立场的转变并非自由与开源软件发展的终点,自由软件运动仍在继续,而开源软件的参与者们想要让开发者之间的协作更加方便,用户的反馈更加积极,社区氛围更加活跃,也还有很长一段路要走。

主要参考资料:

Wikipedia 以下条目:History of free and open-source software,Free software,Free software movement,Free and open-source software,GNU-Linux,Open-source_software

这个话题从零开始看资料,花了一些时间,文章的结构润色,图片处理也用了不少功夫。不被看到挺可惜的。如有讹误,欢迎指正。