软件许可证是指软件出版商与用户之间签订的、旨在指导和规范软件如何使用的合同。在购买软件时,购买者仅仅获得了使用这个软件的许可——而软件出版商则保留享有此软件的全部权利,以及独家发行和复制生产的权利。更进一步说,软件出版商不仅把许可作为使用其软件的限制,而且将其作为销售工具。能够怎样使用软件已成为软件价格构成的一部分。根据软件的最终使用方式,通过许可获得的附加好处使得一种应用软件比另外一种不考虑价格的方式更加吸引人。
根据软件被许可对象和使用范围的不同,软件许可证有以下几种类型:
单人许可是指软件许可给特定的人使用。软件被许可给某一个特定的个人,表示这份软件只能由这个特定的人使用,这种许可方式最适合由一人使用、而其他时间则闲置不用的软件。例如,某单位的会计可能是唯一需要使用税务处理软件的人。在单人许可这种方式下,谁使用这种软件是明确的,还有其他要点也应考虑,比如:被许可人能否在工作时和在家里都能使用这个软件;当人员更换时应怎么办;这些软件应当以个人名义登记还是以部门名义登记。通常情况下,在单人许可证中,软件是许可给一个使用者在一个工作站上使用。再者,经过许可证条款的允许,这种使用者被允许为其在家以及/或者工作台上的计算机安装一份软件。这种想法源于用户不可能在同一时间停留在多个地方,因此,软件只可以在某个时间于某一地点使用。那些希望在多台机器上运转软件的使用者应当仔细阅读许可证,如果有任何问题,应与其软件出版商联络。
单人许可是指软件许可给特定的人使用,而不管使用该机器的人是谁。给单个机器的软件许可要求客户为每台使用此软件的PC机购买一份许可。例如,如果某公司拥有95台PC机的环境,那么公司需要购买95份软件许可。这里典型的例子就是操作系统软件。它们是许可给单机的最常见的程序,也是目前最常见的软件许可方式。
网络许可是指软件的使用范围被限制于一个局域网(LAN)或者一个文件服务器,网络上的每位成员一般均允许使用这个程序。这种情况下软件只安装在网络的一个服务器上,而使用者的人数则限于连接网络操作系统、允许访问文件服务器的接口数。文件服务器的许可方式由于不需要精确的用户数或者PC机数因而是系统软件程序的最佳选择。既然只有一份,那么软件就更易于安装、管理与升级,以此种方式出售的软件允许厂商向拥有大型网络的单位提供一套节约成本的方案。
场地许可(Site Lecenses)是指软件被许可在指定的场地使用。它更多的是强调软件的使用范围。通常在场地许可中有地理范围上的限制如:单独的地理区域(例如,位于50街区的XYZ公司的纽约办公室);一幢建筑物的某个楼层的一个部门(例如,XYZ公司的财务部);公司的办公室和所有雇员的家用PC机;学校的实验室或学校的建筑物。当单位购买很多软件许可时,厂家有时提供一种数量折扣或一种场地许可,折扣可以适用于软件许可的任何形式。拥有100台文件服务器的单位可能通过文件服务器得到许可的软件的折扣;而拥有100台PC机的单位则可能通过机器许可得到对软件的优惠。一项场地许可可能包括多份软件的优惠价格或者允许对一个磁盘进行无数次复制。厂家可能根据网络的结点数或文件服务器的数量对价格进行调整。获得场地许可常常比为每个用户购买单个软件要经济得多。如果想要得到场地许可单位必须直接与软件出版商联系。
企业许可,往往被称为“金色磁盘”,是指软件被许可在该企业的任何部门使用,而不论具体的使用人是多少,只要一次总付一定的费用即可。企业许可一般被认为是一种无限制的使用许可,但是其使用条件一般都要每年续签。这种许可方式通常更适于拥有数量众多的计算机和多个办公场地的大型单位(例如,宝洁公司的世界各地的办公室、华为公司中国大陆的各办公室)。
软件许可证的发展是随着软件产业发展而发展的,而软件产业的发展又是随着计算机技术的进化的。在20世纪80年代以前,由于计算机都是大型化的,所以软件业的市场范围比较狭小,大部分软件都是为专门的计算机定制的,对当时软件业最形象的描述就是量体裁衣般的“裁缝式”。 1980年以后,随着计算机制造技术的改进,个人电脑的普及,才使得软件市场得以发展,使得软件成为产品,软件程序能够得以批量生产和销售。但是软件同普通商品有一个明显的不同,那就是程序作为软件产品的核心,是复杂脑力劳动的结果,是具有知识产权特性的。所以软件产品在商业化运作中,一个典型的特点就是软件是许可而不是简单的商品买卖,更不意味着权利的卖绝。因此软件许可协议,也就是软件许可证,在软件产业中的地位非常重要。
开源软件的特点就是要保证使用人在获得源代码之后,将源代码和基于此源代码的修改要再发布出来。为了保证任何人能够得到源程序或者在需要的时候能够得到源程序,保证任何人能够修改开源软件或将开源软件的一部分用于新的开源软件以及保证任何人知道他们能够做这些事情,所以需要开源软件许可证。因为开源软件许可证作出如下规定:禁止任何人不承认这些权利,或者要求其他人放弃这些权利。如果修改了开源软件或者发布了软件的副本,这些规定就转化为确定的责任,这就是开源软件许可证最典型的作用,也就是为什么开源软件许可证必不可少的原因。传统的源代码传播途径是以纸介质或磁盘为媒体的,传播速度和范围都十分有限,不能及时反馈和公开程序高手们修改与补充的代码,讨论的范围就更狭窄了。互联网的出现充分缩短了交流的时间和空间,不论在哪里,也仅是一“屏”之隔,一“点”之差,Linux就是借助于互联网发展壮大的,可以说没有互联网就没有Linux。互联网的发展壮大了开源软件事业,同时也给开源软件的最初原则带来挑战,开源软件许可证正是在这样的条件下诞生的,开源软件许可证伴随源代码在网络上传播,为开放源代码运动保驾护航。
从许可证的性质和适用范围来讲,开源软件许可证和传统的软件许可证没有任何不同,只是在软件许可的授权范围上略有不同。可以毫不夸张地说,开源软件许可证和传统的软件许可证一样,是维持和规范其软件产品最重要、最得力的工具。
来自于不同国家和地区的开源许可证有许多共同的特点,但也有一些细微的不同。其中最有影响力的是开放源代码首创行动(Open Source Initiative,OSI)的开源软件许可证认证制度,并且将开源软件许可证的认证同是否是开源软件联系起来,实现GNU、Apache等开源软件或自由软件社区的交流与良性互动。以下将重点介绍OSI的开源软件许可证及其认证。
纵观GPL、LGPL、MPL、BSD等等许可证,为了达到向社会贡献源代码,能让源代码在一个合适的环境里交流和再发布的目的,这些开源软件许可证有许多的共同点,主要体现在以下几方面:
(1)开源软件许可证都会规定在被许可人接受本许可证获得源代码之后,有将源代码再发布的义务,以促进开放源代码运动。
(2)开源软件许可证都有一个“不担保”(No Warranty)条款。由于源代码程序准予免费使用,在一般情况下,对程序没有担保。除非另有书面说明,版权所有者或其他提供程序的人们“一样”不提供任何类型的担保,不论是明确的,还是隐含的。包括但不限于隐含的适销和适合特定用途的保证。全部的风险,如程序的质量和性能问题都由被许可人来承担,如果程序出现缺陷,被许可人承担所有必要的服务、修复和改正的费用。
(3)开源软件许可证都会规定一些关于修改、复制和再发布的条款,目的也是在保证初始人权利的前提下,尽最大可能向社会贡献源代码。只是各许可证对授予被许可人的各项具体的权利略有一些差异,这可能与“开放源代码首创行动组织”OSIA对开源软件许可证的认定只有原则性的规定有关。
至于不同点,只在于向被许可人授予的权利方面有比较细微的差异,下表列出几种开源软件许可证之间的异同:
①这一栏的“√”是指没有明确可以将对源代码的修改一定要公开,其中一般有以下几种方式供选择其一即可:(1)将对源代码的修改以源代码的形式公开;(2)只要公布最先获得的源代码即可,而将修改过的源代码以目标码的方式使用;(3)仅在一定范围对源代码的修改以源代码的形式公开或仅公开部分。
②#指对于原始获得的源代码及修改过的源代码,必须按本许可证及本许可证的后续版本发布,但是可以将源代码及修改过的源代码与其他类型的不受本许可证约束的代码结合,以新产品的形式发布,只要其中由本许可证获得的源代码及修改过的源代码能按本许可证的要求发布就行。以下同。
开放源码软件给予企业用户的自由程度与软件提供者发行该软件的目标相关。那些希望软件被广泛发布的提供者会放宽许可证限制,允许用户复制、修改,甚至可以在很小限制的情况下发布修改版本。以前开发人员必须考虑的只是软件的依赖性和不兼容性,现在他们还得考虑开源软件项目之间许可证的冲突。事实上,在开源项目间互借代码就会进入法律上的迷宫,因为各个开源软件许可证之间毕竟还有一些差别。比如Mozilla许可证包含四个不同版本的许可证,参与该项目的开发需要注意许可证间的冲突。Galeon是一个基于Mozilla的浏览器,利用GPL下发布的GTK+图形工具包开发。对其的分发将在分别受MPL和GPL保护的模块间产生冲突。同样,Transarc(IBM子公司)以IBM许可开发了一个Linux分布式网络文件系统的变体,而IBM许可证与GPL许可证不兼容,因而禁止其在Linux内核上运行。国外已经有学者建议OSIA应该关注一下许可证间的冲突问题,而不是简单的认证过程。当开发者获得源代码并且去自由地修改它时,理论上的修改次数与开发者人数是一致的。因此,对源代码的每个错误修正和改动,都具有“分叉”出一个新版本的潜在可能。开源项目要求编程人员自愿结合,假如某一项目没有按编程人员的预期发展,这些编程人员可以撤出,去开发他们自己的项目。在任何市场中“分叉”未必是一件坏事,它增加了选项,促进了个性选择。然而在某种意义上,选择的增多,稀释了市场以及为突变版本提供支持的资源。
由于开源软件许可证差异的存在,就存在选择适用的问题。从开源软件开发的角度来看,如果想对开源程序包做的只是利用其作为工具来生产与其分离的作品,那么绝大多数开源许可证都是可以的;如果想将软件用于商业性发行且不愿意发行自己所修改的源码,那么可以选择BSD许可证,它能使修改保持专有;如果希望源码总是自由的,GPL许可证及LGPL许可证是最佳选择;如果想在与其他人共享代码时提供相应的保护,可以选择MPL许可证,该许可通过将软件(和任何对它的改进)分为受保护的(“封闭的”)部分和贡献(“开放的”)部分,在完全开放的GPL许可证和封闭的BSD许可证之间架起一座巧妙的桥梁。为此,对比研究分析一个个开源软件许可证就显得尤为重要,以下在开源软件许可证共性的基础上,对比分析一下各许可证之间的差别之处。