关于企业使用开源软件
作者:董颖 (通用电气(中国)医疗集团知识产权律师)       本站发布时间:2006-11-19 16:03:48

开源软件的发展无疑是信息技术领域一个引人注目的事件 。在我国,关于开源软件的研究、应用在第三方组织 的推动下也正蓬勃进行。而企业用户是否开始和如何使用开源软件,无论对于开源软件、还是对于企业来讲具有更加重要的意义 。本文就企业使用开源软件的现状、特点、发展趋势进行分析,并针对其中存在的问题试图提出解决方案。

一、 现状分析
以下我们就企业使用开源软件的相关问题及现状予以简介和分析,包括政策面分析、优缺点分析、典型知识产权问题、企业使用状况、具体软件使用状况等。

1. 政策面分析
联合国建议发展中国家应当考虑更多地应用开源软件 。根据相关调查,由于成本较低、更易于获得,使得开源软件吸引了更多用户,开源软件在欧洲和全球发展中国家的范围正在增长 。近年来,欧洲各国的各级政府都发表了声明支持Linux;亚洲各国政府(包括日本、韩国)已宣布计划旨在鼓励本国公司采用Linux; 中国也显示出积极支持和推广Linux等开源软件,把Linux作为继续主导市场的Windows操作系统之外的另一种选择。

2. 优缺点分析
从企业用户角度,使用开源软件的优点主要在于:低成本和二次开发的自由度。企业向开源代码软件的过渡最初由Linux开始,然后是Web服务器、数据库、应用服务器软件,现已波及到了客户关系管理(CRM)、企业资源规划(ERP)等关键企业应用领域——原因很简单,企业认为传统商业软件(专有软件)的价格太昂贵 。企业通过使用开源软件获得的低成本优势将可能扩展到其IT架构的其它方面,传统商业软件厂商将有可能被迫降低其产品和服务的价格。另一方面,如果企业使用Windows或其它非开源软件,则难以自由改动这些软件系统进行二次开发,并意味有可能受到专有软件厂商的制约和控制 。此外,就开放性、安全性、纠错和未来发展而言,开源软件亦有特点并存在吸引力 。
从企业用户角度,使用开源软件的缺点或担忧主要在于:服务支持、保证以及知识产权问题。首要的问题是支持和服务:当企业从Oracle、SAP等专有软件厂商那里购买软件时,它们知道就该软件今后应当向谁寻求帮助;而一旦采用开源软件,它们往往不知道自己该向谁求助 。开源软件的支持和维护往往依赖于其背后大规模的开源代码社区 ,缺乏正式的服务支持和保证是可以理解的担忧 。开源软件的“低成本”优势因而受到了质疑:某些低廉的前期费用往往可能导致较高的后期维护等费用 ;整体IT架构向开源软件移植的成本也不容忽视 。其次,开源软件可能涉及复杂的知识产权问题,从而使企业面临不确定的商业风险。开源软件提倡由分散在世界各地的开发人员自由“组合”在一起开发软件,这使得开源软件的著作权归属十分复杂和混乱。这种知识产权归属和复杂状况,导致包括Linux在内的不少开源软件时时处于被控侵权的风险之下 。另外,开源软件的许可证或许可协议(具体见以下第3部分) 、开源软件对软件专利的处理态度 等,这些知识产权问题中存在的不确定性和风险也是企业可能担忧的。

3. 典型知识产权问题
开源软件与传统商业软件的根本区别在于两者许可证(许可协议)内容或许可方式的不同 。在传统商业软件的许可证中,一般明确许可方的版权归属及权利义务;作为被许可方支付软件使用许可费的对价,许可方一般提供瑕疵担保、违约责任,并涵盖支持、维护等技术服务内容(及其费用)。而在开源软件许可证中,主要规定的是被许可方能否发布该软件源代码、关于演绎作品、对源代码进行修改应满足的要求等(而一般不涉及软件许可费、维护支持的内容)。不同类型的开源软件,其许可证中就被许可方采用或基于开源代码进行二次开发所授予许可和规定不同。例如,两类典型许可证(GPL和BSD)在此问题上有根本的不同。
GPL许可证是开源软件领域中最负盛名的一种许可证,同时它也是这一领域对被许可方限制最严的许可证 。GPL许可证最重要的特点在于它要求,根据GPL软件或源代码经修改、翻译的演绎作品(derivative work,又称衍生作品),甚至只要其任何一部分代码源于GPL源代码,那么该演绎作品的全部程序也必须受GPL许可证约束,即继续遵守GPL许可证的规定。有些人将其称为GPL的“病毒效应”(virus effect)——即,如原软件是GPL开源软件,则该软件经过修改、衍生或二次开发后而得到的软件也必须是GPL开源软件。GPL许可证不允许软件一部分源代码是开源的,而另一部分源代码是闭源(不公开源代码)的,即不允许出现混合源码的现象。如果有人对GPL开源软件进行修改、衍生、二次开发时使之闭源,从而改变了开源软件的性质和形态,则违反了GPL许可证(许可协议)。这不但属于具有负面影响的行业道德问题,还可能因侵犯知识产权或违反许可协议而将面临遭受法律追诉的风险。
与GPL许可证不同,BSD许可证对被许可方更为宽容。BSD许可证给予被许可方充分使用(包含商业使用)其软件源代码的权利,只要标明了源代码的出处,被许可方可以将其用在自己的软件中,按照自己的要求(包括按照商业软件的方式)进行再发布或再许可等。BSD许可证允许被许可方就BSD开源软件的源代码进行修改、衍生或二次开发,这些演绎作品可以开源、也可以闭源,唯一的条件是——在进行修改或衍生时,对其中的BSD源代码应标明出处。基于BSD开源软件二次开发而得到的软件并不要求继续使用BSD许可证,因此BSD许可证不会产生像GPL许可证那样的“病毒效应”,在其基础上开发商业化软件几乎没有障碍。
除GPL和BSD两类许可证外,还存在LGPL、MPL等其它类型的开源软件许可证,其中GPL、LGPL、MPL、BSD是应用最为普遍的四类开源软件许可证 。这些开源软件许可证授予被许可方发布、使用源代码、进行二次开发、以及将演绎作品商业化的自由程度是不同的。

4. 企业使用状况
企业对开源软件的使用分为两个层次:第一层次是企业本身作为开源软件的最终用户;第二层次是企业采用或基于开源代码开发其专有软件,然后将其软件产品或服务提供、销售给最终用户。
在第一层次上,大量企业已开始使用Linux、Web服务器、数据库等较为成熟的开源软件。Linux已成为与Windows、UNIX三足鼎立的另一主流操作系统和开发平台,大量高科技厂商、许多知名的互联网企业和网站,无论是Dell、HP、IBM、Google、Yahoo、Amazon,都已采用Linux操作系统或开源网络服务器软件 。
在第二层次上,国际领先的IT厂商早已开始基于开源代码开发软件产品,并已开始向客户提供基于开源软件所开发的软件产品和服务。例如:Hitachi正在开发新的基于Linux平台的家庭网络系统等应用系统 ;HP则报告说,由于与移植相关的支持费用,开源软件的利润率有时会高于基于Microsoft的解决方案 。但是,企业开发、销售、提供基于开源代码的软件产品和服务时也产生了相应的问题。例如:Sony-BMG唱片公司在其CD唱片上使用了XCP防拷贝软件,该英国软件厂商First4Internet开发的软件被怀疑使用了LGPL许可证开源软件的代码,由此可能为Sony-BMG招致知识产权问题 。

5. 具体软件使用状况
一直以来,大量用户在试图使用开源软件来取代Microsoft的软件。最初,吸引它们的是由Windows、Solaris移植到Linux所带来的成本节约;而后便出现了大名鼎鼎的Apache Web服务器、MySQL数据库软件 。由Linux、Apache、MySQL、Perl或PHP组成的所谓LAMP组合已形成了成熟的开源软件开发平台,它的竞争对手包括Microsoft公司的.Net和Sun的Java/J2EE。系统管理和高级使用者常用其它开源软件还包括 :电子邮件服务器软件(Epop, Qmail, sendmail),新闻群组服务器软件(Leafnode, MetaNews),文件传输软件(BeroFTPD, wuftpd, proftpd),数据库(PostgreSQL, DBMaker),网站服务器软件(Apache, khttpd);程序开发人员常用的开源软件还包括:开发工具(GNUPro Toolkit, GCC, Code Crusader),除错器(Ddd, gdb, kgdb),桌面作业环境(GNOME, GNUstep, KDE),编译程序(Java, Perl, Python, CINT)等。目前,开源软件在企业的应用正向着CRM、ERP、BI 、中间件等关键企业应用领域渗透 。
以开源软件数据库MySQL为例,它正在进入由Oracle、IBM、Microsoft等公司垄断的大型数据库市场。据报道和统计 ,目前有44%的开源代码数据库开发人员正在使用MySQL,MySQL已被全球约5000家公司所采用,其客户包括Google、Yahoo。

二、 发展趋势及问题
话说天下大势,分久必合,合久必分。可以预见的是,开源软件的商业化趋势和商业软件的开放趋势在未来将导致两者在软件市场上并存,并且出现某种融合之势 。据市场调查研究公司Gartner称,在今后的几年里,许多企业用户将选择混合搭配使用商业软件和开源软件 。
鉴于上述现状和发展趋势,企业对开源软件的使用将越来越广泛。在第一层次的使用上,企业本身作为最终用户使用开源软件出现问题的几率并不高,因为开源软件许可证对最终用户的要求和限制很少。使用开源软件的问题主要集中在第二层次的使用上,即在开发软件时是否可采用或基于开源代码来开发商业软件,如何享有开源软件益处的同时回避风险?
最典型的问题是,如果某公司不了解开源软件许可证的要求,使用了(部分)(GPL)开源软件的代码,则可能导致这家公司要么迫将其整个软件产品的私有源代码都公之于众,要么必须回头修改其软件产品的源代码,删除其中的开源代码。而这样的问题的出现几率是很高的——全球各地的软件开发部门在面临产品成本、开发时间紧迫、复杂功能需求的情况下,程序员很有可能从各种第三方资源或者互联网上找来小部分、片断甚至大量的源代码,目的就是为了通过重用这些代码,从而尽快地完成手头的软件开发及代码编写工作。
这种外借代码也许在当时对于完成软件开发来说是一种捷径,但却有可能在今后造成不良后果:前述索尼-BMG唱片公司面临的知识产权纠纷就是一例;目前,已至少有100家公司被迫从自己的产品中删除或放弃多段GPL代码,或面临涉诉风险(包括Siemens等公司),这就是由于它们当时未能恰当地遵守开源软件许可证的要求而借用了开源代码 ;另外,在很多涉及软件企业的并购案中,不洁代码(Dirty Code)已经导致了并购交易的拖延,导致企业付出了更大的代价 。

三、 解决方案讨论
对于软件开发企业来讲,如因采用开源代码进行开发,而导致公司的私有代码被迫公之于众,该问题的后果无疑是严重的。而在目前的软件开发环境下,这样的问题出现几率却很高。 如何解决该问题,如何使软件开发企业在享有开源软件益处的同时回避风险,我们在此试图讨论可能的解决方案。
首先,软件开发人员应当理解开源软件许可证,了解开源软件就使用者发布、使用该软件、就演绎作品商业化、源代码公开所授予的许可和相应的要求。如上所述,GPL和BSD许可证在此方面的要求和严格程度是完全不同的:如欲采用的是BSD代码,那么对软件开发企业来讲几乎是安全的;如果是GPL代码,则可能存在较高的风险。
其次,企业采用或基于开源代码开发自己的软件,应建立相应的管理制度、制订内部规则。根据国外软件开发公司的有益经验(best-practice) ,我们总结了以下方面值得借鉴:
(1) 为开发人员设立开源代码使用规则:应让软件开发人员了解何时、采用何方式方可将某类外部代码整合进公司的软件开发项目。如果开发人员没有获得指示,并且缺乏某类执行机制的制约与引导,那么他们就可能在互联网上抓来任何能够抓下的东西。在涉及开源软件问题时,应事先了解开源软件许可证及其授权是否是可接受的,并编写一份详细的开发流程。
(2) 有效的开源代码问题解答机制:为了防止开发人员在未得到指导的情况下在别处抓取代码,应建立机制保证开发人员就开源代码能否采用的问题能够快速得到回答和解决。
(3) 可在公司内部由技术人员和法律人员组成内部小组专门从事开源代码项目评估:这个小组负责确认并批准使用某开源代码,并且可考虑发布一份可接受的开源软件列表,使开放人员在下载代码之前就知道这些代码是否可以使用。
(4) 设置流程审查软件产品代码的出处:在开发过程中,应记录开源代码的来源、出处,将其显著标识并负载相关著作权声明信息,并同私有代码加以区分。就代码出处问题,应在软件开发的整个周期内实施审查和监控,并在软件开发的一些关键里程碑时予以再次审查和确认。
(5) 标识对开源代码的修改:在开发过程中,应标识并记录对开源代码的修改(包括如何修改、在哪里修改、修改了哪些部分等),以便符合某些开源软件许可证对于修改、衍生代码的(发布)要求。
(6) 利用开源代码探测工具:目前已经出现了“Black Duck” 等用于探测深埋于商用软件之中的开源代码的工具。它们能扫描数百万行的代码,并且把这些代码与其后台数据库中的开源代码样本进行对比,其数据库往往包括了数百种开源代码的样本,从而能够从被对比的代码中找出那些被怀疑含有开源代码的片段。另外,在一些软件企业并购案中使用该探测工具探测不洁代码也往往是非常有效的。
(7) 销售软件时将开源代码部分单独列明或单独提供:除非是LGPL或BSD许可证,其他类型许可证的开源代码不应加以修改,并应独立使用,也不应与私有代码(以目标代码或库文件形式)进行链接。请注意一定要将开源代码和私有代码区分开。例如,可将涉及的开源代码(原始代码)、相关的开源软件许可证、知识产权声明与保证等(在一个目录中)单独列出,某些情况下还应就开源代码所作修改(修改代码)在一个附件中予以说明。就这部分说明,一种情况是将其打进提供给最终用户的软件包(package)中,在用户编译和执行软件时该package进行解包以便用户阅读;另一种情况是先不提供给最终用户,但是为应对日后源代码被要求向用户公开的压力,应将这部分说明单独保存在某介质上,一旦未来私有代码被要求向用户公开,则仅需提供该介质即可。
(8) 销售软件时保存完整的客户名单:就软件销售应建立完整的原始客户名单,一旦无法避免公布私有代码,这使得公司有可能就错误进行挽回。特别是考虑到开源软件许可证的许可条件可能发生变化时,这点是很重要的。
(9) 《软件销售协议》中事先设置相关条款:在与用户之间签订的《软件销售协议》中,应就可能发生侵犯第三方知识产权行为避免给用户造成损失事先加以约定。

以上我们就企业使用开源软件的现状、特点、发展趋势进行了分析,并针对其中存在的问题提出了相应的解决方案。开源软件已然成为主流,如何负责任地使用开源代码——这就是本文想与大家所探讨的。

【原文注释略】

( 说明:文中的观点或信息与本网站主办单位无关)