1 开源是大势所趋
随着计算机技术的发展,尤其是互联网技术和相关企业的兴起,开源软件在操作系统、编译工具链、数据库、WEB服务器、移动操作系统等各个方面已经成为主流。而且许多企业利用开源软件形成了独特的商业模式。比如谷歌的 Android 操作系统,从 2007 年开源发布第一个版本起,到今天已经发展到 4.1 版本,占据了智能手机操作系统一半以上的市场份额,谷歌也通过 Android 操作系统在移动互联网这一新兴行业中占据了领先和主导地位。再比如在服务器端广泛使用的关系型数据库 MySQL,在以开源软件和商业许可并行的模式下,得到了快速发展,并在 2008 年作价 10 亿美金由 Sun 收购(后者又在 2009 年被 Oracle 公司以 74 亿美金的高价收购)。相反,以前一直和开源软件做斗争的微软公司,却因为无法快速推出适应市场的 Windows Phone 操作系统,在移动互联网竞争中处于下风。为顺应潮流,微软也开始拥抱开源,比如向Samba项目贡献代码,放弃自己研发多年的大数据项目而选择Hadoop为其大数据的核心等。
显然,纵观 IT 行业这二十多年的发展,开源软件从黑客的理想之国,已经形成了一股推进计算机及相关行业不停进步的巨大力量。很多人可能尚未意识到,我们使用的电脑中运行有开源软件,手机中运行有开源软件,家里的电视也运行有开源软件,甚至小小的数码产品(如电子相框)中也运行有开源软件,尤其是互联网服务器端软件,几乎全部是开源软件。毫不夸张地说,开源软件已经渗透到了我们日常生活的方方面面。那么,开源软件到底什么,开源软件尤其是国内的开源软件及社区的现状如何,发展面临哪些困难和问题?
2 开源软件的基本概念
在讲述国内开源软件的发展情况之前,我们先就开源软件的一些基本概念做一些普及。
2.1 为什么会有开源软件?
广义上讲,开源软件指所有公开源代码的软件,包括某些商业软件也可能是开源的。但我们通常所说的开源软件,是狭义上的,指任何人可以通过极低的成本(如仅仅访问互联网而无需其他额外费用)获得该软件源代码的软件,也就是其源代码向公众开放。和狭义上的开源软件相对应的,就是那些不向公众公开源代码的软件,通常就是商业软件。
实质上,在计算机出现的最初年代,几乎所有的软件都是开源的。那时的计算机企业,主要是以销售硬件产品为主,软件几乎都是附送的,加上那时的软件规模都不大,以源代码形式提供给用户还可以缓解一定的技术支持压力——有问题由用户自己修改解决。所以,最初的软件几乎都是以开源的方式提供的。因此,对着迷于计算机编程的工程师来讲,获得软件的源代码几乎是天经地义的事情。这样,当以微软为代表的企业开始实践纯软件产品的商业模式(核心思想是提供二进制可执行程序的使用许可,而不提供源代码),就引起了许多计算机编程爱好者的不满:给我一堆二进制程序,我如何才能按我自己的想法改进程序?在这种背景下,真正意义上的开源软件就自然而然地产生了。
2.2 开源软件的发展历程
开源软件的发展,和互联网的发展密不可分。真正有规模的开源软件,应该是从上个世纪 90 年代开始进入公众视线,也就是互联网开始兴起的年代。我们大致可以将开源软件的发展分为如下三个阶段:
1. 萌芽阶段(上世纪九十年代之前)。这个阶段主要以个人和大学为主,因为发布条件受限,大多数开源软件无法得到有效传播,而仅仅流传于互相熟悉的程序员和老师、学生之间。这个阶段的典型开源软件为 BSD 操作系统。
2. 以非盈利组织为主的阶段。这个阶段应从上个世纪九十年代算起,说起这个阶段,我们不得不提到 Richard Stallman 发起的自由软件基金会,还有 Apache 基金会等。前者发起的 GNU 项目(1983 年发起,九十年代后随 Linux普及),成就了 Linux 操作系统;后者维护的 Apache WEB服务器,在互联网上几乎占据了统治地位。
3. 以大型IT企业为主的阶段。这个阶段出现于 2005 年之后,以谷歌为代表的大型互联网企业,开始以各种方式发布开源软件,最为著名的是 Chrome 浏览器以及 Android 操作系统;当然还有 Intel、Nokia 等企业主导的 Moblin、MeeGo 等基于 Linux 的智能手机操作系统。
2.3 开源软件许可证
笔者看来,软件作者选择向公众开放源代码,其理由无外乎如下三种:
第一,那些认为所有软件都应该以源代码方式发布的。如 Richard Stallman,他认为所有的软件都应该是开放源代码的,甚至为了建造一个理想中的全开源软件世界,创立了自由软件基金会,发明了 GPL 许可证,发起了 GNU 项目。
第二,通过开源软件展示自己的软件设计、算法和编码水平,并期望获得他人认可的。大部分小型软件或者程序的作者,或者由大学主持和维护的开源软件,出于这种目的向公众开放源代码。
第三,通过开源软件谋求获得广泛推广,并通过提供增值的产品或者服务来获得商业收益的。这通常是商业企业选择开源软件的原因。如 FireFox、MySQL、Android、WebKit 等属于这种情形。
为了达到上述三种不同的目的,人们在现有软件著作权的法律框架内,发明了多种用于开源软件的许可证。这些许可证从法律上帮助对开源软件有不同诉求的软件作者,获得自己想要的结果。要想具体了解这些许可证的实质内容,我们首先需要更加深入地了解软件著作权。
许多开发者对软件著作权只有一个初步的、模糊的认知。我们经常会在各种软件的启动画面或者关于对话框中刚看到类似“版权所有 (C) 2012 某公司;保留所有权利”的用语。这说明,软件著作权包含了很多权利,所以才有“保留所有权利”这样的说法。具体而言,软件著作权大致包括如下几个权利:
· 署名权。就是署上自己大名的权利,向人们说明这是我的作品。这里的“我”,可能是个人,也可能是法人单位。
· 修改权。就是是否可以修改软件,比如翻译软件界面中的文字。对非开源软件,就是是否允许你反编译软件并修改的权利。对开源软件来讲,就是修改其中可能存在的缺陷,或对一些代码进行优化、重构等等。
· 复制权。就是将软件进行复制的权利。和图书类比,就是你能不能抄写和/或复印图书。
· 发布权。就是将软件副本交给他人的权利,不管是收费的还是不收费的。
对商业软件而言,这些权利都被保留,意思是什么呢?就是说,你不能修改,也不能复制,还不能随便发布给别人。那用户能做什么,唯一的就是安装和使用这个软件了。当然,大部分商业软件都附带有一个《最终用户许可协议》,其中告诉了你能做什么,不能做什么。比如,你可以因为备份的原因复制这个软件。另外,还定义了很多免责条款,比如,如果 90 天内软件的存储介质损坏,可以免费替换;如果因为使用本软件导致数据丢失或损坏,概不负责之类的。
对开源软件而言,因为任何人可以几乎无成本获得软件的源代码或者最终程序,用户使用这个软件要是有了问题,都去询问作者,那作者就吃不消了。所以,开源软件也通常使用某个特定的许可证来约定作者以及使用者所承担的权利和义务。
自由软件基金会制定的 GPL 许可证,应该是开源软件使用的各种许可证中最为严格的。为了区别于其他开源软件,Richard Stallman 将使用 GPL 许可证的开源软件称为自由软件。GPL 许可证的核心内容是:
· 你可以随意复制和发布软件。如果以二进制方式发布软件,则必须能够让获得二进制版本的人,以不付出额外成本的方式获得其源代码。
· 你可以随意修改源代码。一旦要发布修改后的软件,必须同时发布修改后的源代码。也就是说,修改版本也必须以 GPL 许可证发布。这就是 GPL 许可证被称为病毒许可证的一个最重要原因。
· 如果 GPL 软件作为其他软件的一部分使用(后者称为 GPL 软件的衍生作品),不论是静态链接还是动态链接,衍生作品也要遵循 GPL 许可证。这是 GPL 许可证被称为病毒许可证的另外一个重要原因。
· 无任何担保。就是说,使用 GPL 软件,出了问题不要找原作者,你需要自己负责。
Richard Stallman 希望通过这样严格的 GPL 许可证,来建立一个所有软件均遵循 GPL 的理想软件世界。除了 Richard Stallman 所倡导的理想王国之外,还有许多个人和组织,以不同于自由软件的方式来发展开源软件。这些开源软件所使用的许可证相比 GPL 要宽松一些,或者很宽松。这些开源软件作者,通常属于本节前面所讲的第二、第三种人,所以他们使用的许可证有如下共同点:
· 免担保,责任由使用者自负。
· 随便复制和发布。
· 不限制商用。
这些许可证的不同点在于:
· Apache 许可证:如有修改,必须保留已有的版权声明,且必须包含新的版权声明。通俗理解,就是要保留原作者信息,也就是署名权。
· BSD 许可证:不允许在衍生软件作品中提原作者的名字,其理由是,因为你的修改可能污染原有代码,破坏原作品的品质。
· MIT 许可证:在衍生软件作品中,必须提原作者的名字;其理由是,原有代码作者应得到充分尊重。
· Mozilla 许可证(MPL):就原有软件所做修改,必须可以以各种可能的方式发布其源代码(包括使用 GPL 许可证),且应该有修改说明。
除了上述许可证之外,还有一个广泛使用的 LGPL 许可证。该许可证最初是针对函数库专门制定的。为了避免类似 C 基础库这样的软件因为采用 GPL 许可证而让使用它的软件(衍生作品)成为 GPL 软件,从而定义了 LGPL 许可证。试想,如果 C 基础库也采用 GPL 许可证,那就失去了它本身存在的实际价值,因为其他任何非 GPL 软件都不能使用采用 GPL 的 C 基础库。所以,LGPL 定义,当 C 基础库这样的软件以动态链接的形式由其他软件使用时,这些软件就可以不遵守 GPL 许可证,甚至可以是商业软件。另外,本某种角度看,LGPL 和 MPL 本质上是一样的。
当然,除了上面的各种许可证,还有的开源软件作者根本不关心保留什么权利,或者对其作品做什么样的约束,相反,这些作者开源其软件,就是为了“有用”,任何人拿这种软件做什么,对原作者来讲,都是无所谓的。这种软件亦称为“礼物软件”,相当于作者放弃了有关软件著作权的所有权利,也就是所谓置于“公共领域(public domain)”当中——随你怎么用。
2.4 为什么开源软件会得到快速发展并广泛应用?
很多人不理解,既然作者这么大方地将源代码都公开了,只是为了“有用”,且不提供任何“担保”,看起来原作者是无法直接获利的,那为什么没有直接的利益驱动,开源软件却能够得到这么快速的发展和广泛应用呢?
》》》开源软件如何盈利?
笔者初探其原因,大致有四:
1. 开源软件虽说不提供任何担保,但既然原作者愿意公开源代码,说明作者对代码的质量还是非常有信心的。实际上,开源软件的作者通常都是编码高手(俗称“黑客”),其质量甚至超过某些商业软件。
2. 开源软件因为其免费特征,能够得到大量用户的使用和验证,通过形成和用户(往往也是编码高手)之间的互动和交流,能够以最快的速度修复可能的缺陷,改善软件设计。Linux 内核的发展就形成了一个以全世界内核高手为主的松散社区,通过快速迭代开发,加上其免费特征,迅速占据了原先由商业 UNIX 系统控制的服务器操作系统领域。
3. 因为任何人都可以得到其源代码,所以很多用户就可以自行修改其源代码,以满足自己的一些特别需求。
4. 因为开源软件的涉及面非常广,利用已有的各种成熟开源软件,任何具有一定实力的组织,均可在较短时间内形成一个基本成熟的软件平台,进而可和已有的商业软件平台进行竞争。谷歌的 Android 系统属于此种情况的典型。
所以,尽管开源软件的发展历程并不是一帆风顺的,但基于以上原因,开源软件显现出了其强大的生命力。各种基于开源软件的成功商业模式,也为开源软件的发展注入了加速剂。有关围绕开源软件的成功商业模式,可见本文第 4 章。