在谷歌封杀宏碁推出“阿里云”手机之后,双方各就此发表了两轮声明。这些声明也使得事件爆发之初的一些判断和表态看上去十分可笑,诸如“谷歌封杀是给阿里云加冕”、“阿里云因为采用与谷歌相似的web app战略规划所以被后者忌惮”等等,有些已经在双方的声明中被直接否定,也有些能明显看出来作者不了解移动操作系统的体系架构以及GPL、ASL等开源协议的规定,所以对一些明显的问题视而不见。
从安卓之父安迪•鲁宾的两次声明中,我们可以看到,谷歌封杀阿里云,其实出于两大目的:防止安卓阵营的硬件基石开放手机联盟(OHA)分裂;谴责阿里云对安卓应用APP的盗版。而阿里云如果要回应这些指责,光发声明是不够的,还需要遵循开源协议,公开云OS部分代码。
阿里云市场的确存在盗版问题
盗版问题比较简单,我们可以先把这个问题说清楚。安迪•鲁宾的第二份声明中说,“你们(阿里云)的应用商店中还包括了安卓的应用,包括盗版的。”认真的老外很快找到了证据:科技博客Androidpolice发表了一篇调查文章《确认阿里云应用市场发布盗版安卓应用,很多来自别的盗版站点》。他们发现在阿里云的应用市场中,有神庙逃亡(Temple Run)等热门游戏的盗版拷贝下载,其署名提供方并非游戏自己的开发商,而是中国国内某个安卓应用市场,而后者提供了大量其他盗版APP下载;有一些原本是收费的游戏也在阿里云的市场中提供免费下载;最有趣的是,一款针对安卓ROM的工具软件ROM ToolBox Pro也出现在阿里云市场中——阿里巴巴方面一直坚称阿里云OS并未基于安卓,那在自己的市场中放一款针对安卓ROM的工具有什么意义呢?
AndroidPolice采访了一些应用开发者,他们明确表示自己并未将应用APP上传到阿里云市场。一款收费游戏(在阿里云市场中被标为免费)的开发者表示,“这是我们第一次听说阿里云。我们不知道我们的应用被上传到了那儿”。ROM ToolBox Pro的开发者语气则比较激烈:“像阿里云这样的软件破解网站只会伤害消费者和开发者”。
在盗版习惯仍然深入人心的中国,免费、开放的安卓平台以及其上的免费应用给很多人一个错觉,既然免费,就可以随便用,所以发布一些免费应用APP有什么不对呢?但这的确是不对的,免费不等于作者放弃了所有权益,他们只是放弃了按份出售应用的做法,但署名权和其他权益比如市场推广、运营等权益仍然属于作者本人,上传到哪个市场、适用于哪些手机的决定权同样在原作者(这也有保证应用正常运行的考虑)。像上述阿里云市场中更改应用作者署名、使用非授权版本等行为,已经侵犯了软件作者的权益。至于把收费软件改成免费应用放在市场里的行为,就更不用多说了。
也有些人说谷歌为什么不去抓中国数量众多的盗版market,非要跟阿里云过不去?这里面有个精力问题,也有个商业策略问题。盗版永无止息,但一旦有商业公司来运作,其破坏力就大得多(因为很容易变现出利益),反过来说侵权主体也好认定。所以反盗版历来是重拳打击商业、政府机构的盗版行为,对个人消费者和一些小组织则基本无视。
协议规定安卓和阿里云都应开源
好。本来挺简单的盗版认定问题也说了这么一堆。下面进入稍微复杂一些问题讨论,即阿里云OS是否分裂了安卓阵营。
这个说法成立的前提是,阿里云OS要是安卓的一分子,这样才谈得上内部分裂。这也是目前为止阿里反对最激烈的一点。无论是阿里云CEO王坚,还是官方声明,阿里都否定了“阿里云OS属于安卓阵营”的说法。其中王坚说,阿里云OS是“独立的操作系统”;阿里巴巴副总裁约翰•斯佩里奇说“阿里云OS并不是安卓生态系统的一部分”;阿里第二份官方声明中也说,“阿里云OS使用了自行研发的虚拟机,这与安卓的Dalvik虚拟机不同。阿里云OS的运行环境,也就是OS的核心部分,即有不同于Dalvik的阿里云自己的JAVA虚拟机,也有阿里云自行研发的云应用引擎(cloud app engine),用于支持html5 web应用。阿里云OS用了一些(开源的)安卓应用的框架和工具仅仅是作为补丁,让使用云应用的用户可以在我们的生态系统中使用其他第三方应用。”
现在双方都表明立场了,谷歌说阿里云基于安卓的代码,阿里说我们的核心是自己开发的(但操作系统的核心是“运行环境”这个奇怪的说法是头一次听说),只用了安卓一些应用框架和工具做补丁,然后还要特意强调,这些部分是开源的。双方各执一词,按业内的做法,那就对比两边的源代码好了。安卓的大部分源代码是公开的,阿里云OS的代码没有看到公开,似乎他们也没说要公开——但是且慢,按照开源协议,阿里云OS必须公开一部分代码。
从这场争论开始到现在,舆论被有意无意地引导到阿里云的远景规划与谷歌冲突、必须要有自主操作系统以免受制于人这些奇怪的宏大叙事角度去,却没看到有基于开源协议来分析阿里云义务的声音。
众所周知,安卓是一个开源、开放的操作系统,但这二者并不能等同。同时,开源也并不意味着,任何人或者公司都可以拿着公开源代码回去自己编译出一个应用来,然后打上自主产权的标签就可以去报奖立项了。开源代码有着严格的流转规范体系,使用开源代码必须基于这些规范,来保护开发者的版权。我们以安卓系统为例,来分析一下这些不同的开源标准,以及阿里云应该遵守哪些标准公开代码。
安卓系统基于Linux操作系统发展而来(阿里云也自称基于Linux而非安卓系统)。Linux是一个开源系统,它采用了GPL开源协议,这是我们这里提到的第一种开源协议。GPL协议规定,遵循该协议的代码都是开源、免费的;一旦软件作品中使用了遵循GPL协议的开源代码,该软件也必须开源、免费。业内通常管这种特性传递叫“传染性”,只要使用了一行GPL开源代码,整个软件都被“传染”为遵循GPL协议。注意,真正的GPL协议要比这里的描述复杂、严谨不少,为了行文简洁,本文仅仅选取了与这一问题相关的部分内容进行表述。
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“部分开源”的消息。
在这部分代码开源之后,业内人就可以对阿里云和安卓做一个更透彻的比较,看看到底是前者直接使用了后者的代码,还是真的如阿里自己所说,是独立在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万元资金,他当时是评委。但这些资金项目与阿里云舍弃安卓走自主之路之间还暂时找不到官方表述和公开表达,所以建议网友们在找到新的证据之前,不要过于肯定地认定这一点。
最后,来说一下这次争议对用户的影响。可以肯定,这对安卓开发者和用户来说,是个大利好消息,因为谷歌表现出了解决安卓分裂现状的行动与关注度,而分裂问题一直是安卓系统最大的忧患。资深移动互联网专家郝培强(@tinyfool)两年前就在新京报上发表过文章,安卓系统的标准化程度与iOS存在巨大差距,厂商各自推出的不同分辨率、不同操作方式的手机让开发者和用户都深受其苦,各类安卓版本之间的兼容、继承也问题多多。谷歌应对这一问题的方式是组建开放手机联盟,并在安卓4.0后逐步在系统层面进行统一、限制明显的分裂行为。
宏碁是开放手机联盟成员,有权优先获得最新的安卓系统代码和接口服务,如果它再去支持一款从底层到应用都与安卓兼容的阿里云OS,从谷歌的角度来看,担忧泄密、分裂也的确有其道理。
在市场层面上,阿里云不到五百万台的出货量远远说不上威胁谷歌,更不至于像王坚说的那样“让谷歌害怕”。但安卓之父两天内两次发表声明来回应这一问题,至少让开发者、厂商和用户看到了谷歌对于防止分裂、反对盗版的重视程度。从这个角度说,这次获利最大的,将是广大安卓用户、开发者和正统OS厂商。