笔者看来,软件作者选择向公众开放源代码,其理由无外乎如下三种:
第一,那些认为所有软件都应该以源代码方式发布的。如 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 要宽松一些,或者很宽松。这些开源软件作者,通常属于本节前面所讲的第二、第三种人,所以他们使用的许可证有如下共同点:
- 免担保,责任由使用者自负。
- 随便复制和发布。
- 不限制商用。