<span class="Apple-style-span" style="font-family: " stheiti="" light';="">作者: 顾宏军 出处:软件世界

在过去这几年里,软件产品数量急剧增长。现今设备不仅包含越来越多的软件,而且越来越多的功能通过软件实现了。这种爆炸式的增长也抬高了软件开发的成本。外包(部分)软件开发只提供了一种不完全的解决方案,而对适当的部件进行开源可以有效地节约开发成本,缩短产品开发周期,因此,某些软件开发上就采取部分组件开源,部分组件闭源的战略,从而形成了独特的混源架构。

抛开开源和闭源各自的立场不谈,混源实际是一种实用主义,即一切从效用出发。所以,企业需要了解开源风险、并有效控制开源风险,充分发挥开源和闭源的长处。

要采用混源架构,需要实施分两步走的战略。首先,将软件或系统的功能、组件区分为独有功能、基本功能和可有可无功能,并且对每个功能组件进行判别,其使用开源架构或者闭源软件是否是最佳选择;其次,软件架构设计应该和法律条款同步设计。这需要软件架构师、工程师与知识产权和法律专家进行通力合作。

了解开源风险

开源所指的是软件开发模式,是程序的源代码在某种授权下公开,以提供用户修改和从新发布该程序的权利,并期望(不是必须的)用户所作出修改和改进也可纳入官方版本。

开源软件的授权适用条款可能比较奇特。例如,有授权要求如果你的软件要包含开源软件,那么你开发的新软件也需要进行开源。如果采用使用这种授权的开源软件,那么整个软件栈的所有软件产品,可能都必须以开源方式进行发布。(这些条款只在把这些软件出售或转让给第三方时适用)。对专利持有人额外风险可能是在发布第三方开源软件时需要提供一个免费的专利授权,而这有可能侵犯了别人的专利。这一专利许可问题可只限于在开源组件中,但是在某些情况下甚至会影响整个软件栈。

公司可能因这些风险对开源的诱惑敬而远之,这并不是一种从商业角度做出的理性决定。在商业环境中使用开源软件正越来越流行,甚至在商业产品中。忽略了这些,公司将与所有可能的高质量软件无缘,并且无法享受开源带来的削减开支和时间的好处。有时一个商业产品简直没法保持和开源软件一样丰富的功能。因此,唯一可行的是要了解风险,并懂得如何管理它们。

开源许可证

现在有40多种不同的开源许可证,每种都有其约束条件和影响力。他们大致可分为3类:

1.Free-for-all 许可证:这类许可只需要将荣誉归功原作者即可。衍生作品,可以保持专有。有时这类许可被称为学术许可典型的就是所谓BSDMIT许可,以及用于Apache服务器的Apache许可证。

2.Keep-open 许可证: 根据采用这类许可的软件进行的修改,必须也采用这类许可进行开源化。大的包含该软件的新软件,则可以使新软件保持专有。LGPLLinux系统库采用)授权和Mozilla Public License授权(Firefox浏览器采用)就是Keep-open授权。

3.Share-alike 许可证: 当软件采用这种许可时,无论软件被修改或是被扩展,所有的成果都必须进行开源化。有时用术语“Copyleft”来描述这种授权。最有名的例子是GPL授权,它被Linux操作系统采用。另外一个例子是 Open Software License (OSL)

公司为了避免出现必须开放其专有软件的问题,可能会禁止使用 Share-alike甚至Keep-open许可的开源软件,但这会严重限制使用开源的效用。因为约65%的开源软件使用GNU ,有另外20%的采用LGPL协议。因此,开源策略应该是在哪里应用以及如何应用,而不是如何将不同种类的开源软件应用在一个产品中。

选择合适的混源策略

采用开源策略的公司常常做出非黑即白的选择:一个产品要么开源,要么闭源。其实可以用一种更微妙的方法—“混源可获得更大的好处。 如果能对如上所述的授权进行有效的管理,公司可以对某些部件使用开源软件,而对其它部件进行封闭开发或者商业授权,最终目标应该是最能保证产品的价值。专有的组件或者方案应该被可供选择的开源产品替代,以体现出更大的价值,而不是保持该组件私有或闭源。除了可以使用已有的开源实现,公司也可以以开源方式公开它自己的实现。

产品按功能进行分类,有三类功能:

1.特有的功能: 这类功能给产品带来附加值。它们使产品可和竞争对手区分开来,并且给出了客户乐意购买它们的理由。

2.基本功能: 这类功能是客户需要和期望的功能。它们提供价值,但没有给产品增加附加值。举例来说,今天没有人买便携式的音乐播放器,是因为它支持MP3格式。 另一方面看就是,如果不支持MP3格式,就没有人买这样的播放器。

3.可有可无功能:这类是隐藏的、不感兴趣的功能。产品需要它们才能工作,但客户并不关心它们。

对每个分类,最基本的问题自己开发还是购买?变成了自己开发、购买还是采用开源?要回答这个问题,第一步就是要区别它是哪一类功能部件,特有的,基本的还是可有可无的?第二步,判别每种选择对各个功能部件产生的影响。图1显示了每种选择的影响。


1:选择开发/购买/开源

一般而言,特有功能应内部开发,以确保最大的市场优势。外包()这类功能组件,是一种选择,但是这意味着公司产品最关键部分依靠第三方。如果第三方出现问题,将造成重大的风险。当然,对这类功能进行开源也不是个好的决定,开源会使该功能部件成为基本功能。

对于可有可无功能,公司不应该花时间和精力在内部开发或维护这类功能。 这部分使用开源节约时间、精力和金钱,而且这通常是正确的选择。一个例子就是使用Linux作为一个嵌入式操作系统。

居于中间的是基本功能。这类功能需要逐个的作出决定,是开发、购买还是使用开源合适。 公司可能采用一个策略,例如如果该功能不向其它人收费,我们采用开源。技术考虑可能阻碍某个基本功能采用开源。举例来说,如果对基本功能进行开源,就也需要对特有功能进行开源,显然,基本功能应该依然闭源。

在某些情况下采用开源可能不合适。一个经常听到的问题是,开源许可的条款对一个特定的产品过于繁琐。这里可能也有技术原因使得公司需要进行闭源。例如,在一个小型嵌入式装置里,Linux未必就是最佳选择,因为它的系统需求较大。另外一个原因是,有些客户要求不用使用开源。

软件的合法问题

软件的合法问题理论上讲很简单,实际却有些复杂。源代码可以被复制和拷贝,库可以被链接,或被远程进程调用。用面向对象语言像JavaWeb Services可能的事件变得更多。这会造成软件组件间复杂的相互依赖关系。对这样一个复杂的软件栈进行开源组件法律影响评估,有相当大的困难。

为确保实现被妥善管理,知识产权专家应当在产品设计的早期介入,在项目开始时就顾及,并贯穿软件设计和实施的整个过程。

总之,对开源的态度,不应是明令禁止,而应该是作为战略的一部分,采用实用主义的混源策略,对开源进行有效充分的利用。

<span class="Apple-style-span" style="font-family: " stheiti="" light';="" font-size:="" 13px;"="">