GPL使软件开发者获得了极大的自由,可以免费阅读、使用全世界最优秀的程序代码。但它的强传染性也削弱了它的商业前景。一些手机制造商如果针对自己的硬件开发一份Linux驱动,它必然要调用一些Linux基本函数、类库,该驱动因此会被GPL传染,要公开所有源代码。但这可能暴露厂商的硬件细节,造成泄密。同样,一些商业公司也会认为,将自己的独有技术拿出来支持Linux,会因为GPL的免费开源特性,造成创新成果流失(微软的鲍尔默就曾经说GPL让Linux染上了癌症)。
为了规避这一问题,谷歌除了在操作系统核心使用了Linux代码之外,在其他专门为安卓开发的相当一部分代码中,使用了传染性不那么强的开源协议:基于Apache的ASL或者基于BSD的BSD协议。这两种协议的共同点在于对商业应用十分友好,遵循这两种协议的开源代码,商业公司可以拿过去用,而开发出的产品不一定需要也开源,可以视情况打包为闭源商业软件。在安卓系统中,大部分硬件驱动程序,以及谷歌专门为移动设备开发的基本函数库Bionic,都慷慨地采用了BSD或ASL开源协议,其中包括Dalvik虚拟机等安卓运行库(runtime)。(整个安卓操作系统各部分所遵循的版权协议见图)
安卓操作系统各部分所遵循的版权协议
对比代码是解答“是否抄袭”的核心
这里要多说两句,谷歌为什么要允许别人闭源使用自己的开源代码呢,它有啥好处?必须要说明,开源协议的选择体现了软件的价值观,也体现了开发者的商业考量。如果谷歌让整个安卓系统采用GPL协议,看上去所有开发者的进一步开发都会被开源出来,系统创新的速度可能更快;但这样有个更大的副作用,就是很多商业公司就不愿意介入安卓开发了——一介入就被“传染”了要开放自己的源代码了。
为了团结其他商业公司,让更多的手机厂商原意采用安卓、更多的软件厂商原意为安卓开发丰富多彩的应用APP,谷歌选择了在Linux核心之外,另行独立开发出安卓的运行环境与函数库,并将这部分以更为自由的BSD和ASL协议发布。这样,开发者基于安卓开发的应用,愿意贡献给社区,就开源;希望保守自己的商业秘密,就闭源。这个策略目前来看相当成功,安卓手机、应用APP这一硬一软两个方面,在这几年突飞猛进地发展,选择了合适的开源协议功不可没(关于谷歌选择开源协议的分析,阮一峰翻译了一篇文章,可以用来作为背景学习)。
通过安卓的体系设计,我们大概对几种不同的开源协议有了初步认识。现在就来分析阿里云OS。阿里云OS的体系结构如图所示。可以看到,阿里云OS同样基于Linux核心。这就涉及第一个版权问题:这部分代码按照GPL规定已经被“传染”,必须开源。目前为止,在公开报道中,我们还没有找到阿里云OS“部分开源”的消息。
阿里云OS的体系结构
在这部分代码开源之后,业内人就可以对阿里云和安卓做一个更透彻的比较,看看到底是前者直接使用了后者的代码,还是真的如阿里自己所说,是独立在Linux基础上开发出来的新操作系统。因为谷歌安卓中的Linux核心,与一般的Linux核心还有不同。为了适应移动设备内存小、CPU频率低、对耗电量高度敏感的特点,谷歌将这部分Linux核心做了修改,并依据GPL将修改开源。从这篇文章可以看到,谷歌对Linux核心做了至少两处重大改动:进程间通讯(IPC)模块Binder,和至关重要的电量管理模块。阿里云OS既然也是移动操作系统,必然需要对本来为桌面系统开发的Linux做出相似的处理。这个处理方式,是沿用了谷歌的方式,还是真正的自主开发呢?代码公布后,自然见分晓。
双方争议的另一个核心,是阿里云OS如何实现了对安卓应用的兼容。安卓系统的开发语言是java,为了精简java程序使之适用于移动设备,谷歌使用了Dalvik虚拟机。注意Dalvik不是java虚拟机,它是将java程序重新打包为一种更为精简的形式运行。阿里云在第二份声明中说自己用了“不同于Dalvik的java虚拟机”,那不但二者的代码不同,连工作原理也会有不同了。
包括Dalvik在内的安卓运行库,采用的是ASL和BSD协议,也就意味着阿里云就算直接用了这部分代码,也可以选择不公开源代码。但这不等于用了白用:ASL和BSD都规定,使用了遵循该协议的开源代码,必须以显要方式标明原开发者的版权归属;这种标明方式,通常形式有源代码中保留原作者的权利声明和其他原作者规定的说明。阿里云既然已经披露了自己使用安卓代码的情况,这部分代码中是否保留了谷歌的版权声明,只需要查看相应程序的说明文件即可。
总算把开源协议这部分介绍得差不多了。花费这么多笔墨的目的在于说明,这次谷歌与阿里云之争,不应该像以前业界的一些争论演变为口水战,而应该像另外一些争论一样,可以让更多人了解操作系统、开源协议等相关知识,消除许多误区(这两类争论我就不具体点名举例了),避免被人当技术小白糊弄。要达到这个目的很简单,阿里云OS公开指定部分的源代码,供业内行家与谷歌代码进行比对即可。这不是强人所难,因为既然依照GPL、ASL、BSD等规范享用了一大批免费开源源代码,那也应该遵循人家规定的义务。
当然,在中国这个用盗版软件都异常有理的国家,各类开源协议都是防君子不防小人的,程序源代码都是纯文本文件,你不遵循协议,它也不会闹脾气不运行,或者在屏幕上打出一行字来骂你。但无论是阿里,还是另外号称要做自主操作系统的华为、百度、联想,都是国际级大公司,应该不会耍这种初级流氓。
安卓用户与开发者成为赢家
也有一些有技术背景的朋友可能会奇怪,谷歌的安卓系统已经提供了相当宽松的条件,核心全部开源消除了安全隐患,庞大的社区和资金支持保证了系统快速进化,在这种情况下,为什么这些公司还要一股劲地开发自己的操作系统呢?把精力用在做好跟公司业务有关的平台、APP上不是更好吗。这个问题很难回答,我也没有确定的答案。有些微博网友说是因为如果打出自主操作系统的牌子,阿里云OS就可以获得国家“核高基”( 核心电子器件、高端通用芯片及基础软件产品)资金资助。我查了一下,阿里云在某些展会上的确出现在核高基成果展区,也有微博上的实名用户说,阿里云获得了863计划的8000万元资金,他当时是评委。但这些资金项目与阿里云舍弃安卓走自主之路之间还暂时找不到官方表述和公开表达,所以建议网友们在找到新的证据之前,不要过于肯定地认定这一点。