移动互联网抄袭能走多远 投资人恨铁不成钢

“面对抄袭‘指责’,小型创业公司很‘委屈’:在中国移动互联网市场,抄袭可能会死,但不抄袭一定死。”

美食推荐类应用“食神摇摇”上周因涉嫌抄袭大众点评网被苹果应用商店下架。两商家关于内容“抄袭”争论,再次将中国移动互联网抄袭弊病呈之于众。

业内专家坦言,由于中国的互联网从创始之初就是模仿美国等国际网站,因此业界一直有“模仿”的传统。资料显示,网易、酷狗、盛大、UC、腾讯等 均先后卷入抄袭“口水战”。面对抄袭“指责”,小型创业公司很“委屈”:在中国移动互联网市场,抄袭可能会死,但不抄袭一定死。

投资人对于这样的说辞,虽强调,“创业者应该树立一个观念,抄袭并不能使你成功。”但当今互联网的发展已经进入“运营模式创新”阶段,一个主 意、点子,一个能够吸引网民参与的平台就能够决定整个公司的成败。前有大公司对平台和终端的双控制,后有消费者“薄情寡义”式的浮躁体验,小公司创新之路 并不宽。

苹果将食神摇摇下架

日前,大众点评对外发布声明称,一款名为“食神摇摇”的美食类APP大量抄袭大众点评网站上的商户信息、图片以及用户点评,“食神摇摇”与大众点评内容相似性达到80%以上,为此大众点评向苹果公司提交了相关证据。

5月23日,据多位网友反映,美食推荐类手机应用程序食神摇摇被苹果应用商店下架。记者核实后发现,从itunes页面中进入苹果应用商店显示“您要的产品目前在中国商店不提供”,且在应用商店中搜索不到食神摇摇的产品。食神摇摇至今未对此事做出任何回应。

“食神摇摇”被苹果下架的消息经微博传播,在用户中引起热议,一些用户纷纷留言说,“还好是免费应用,如果是付费应用,那产品下架了,我们的用 户权益该怎么办?”“难怪觉得这么像大众点评。”“一点都不好用!完全是在骗人,摇来摇去只有那几家,摇一摇明显是个噱头,好不好用,还要看线下的资料是 否靠谱。”

“移动互联网,产品为王,只有创新独特、尊重用户、关注用户需求的产品才是我们关注的对象。”一位投资者在与《国际金融报》记者聊天时坦言, “目前国内环境比较浮躁,再加上资本的逐利性,有些团队不惜通过抄袭、炒作以及触犯用户隐私等诸多手段,迅速在App Store等获得较高排名,但这些是昙花一现,很可能随时被淘汰出局。”

互联网成创新“阿斗”

正如该投资者所言,类似“食神摇摇”的抄袭现象在中国互联网业界,并非个案。清科投资总经理叶斌表示,在Instagram大火特火之后,就在国内看到了类Instagram的应用多达十几款,用户规模和产品体验都相差无几,严重的复制抄袭已降低了其被收购的价值。

数据显示,中国移动互联网2011年的投资热度依旧,已跃升为互联网行业中仅次于电子商务的第二大“吸金”领域。

根据China Venture的投融资数据,在披露的中国互联网经济投融资中,移动互联网领域占总笔数的17%,仅次于电子商务的36.8%。其中,披露的天使投资笔数 超过5笔,移动互联网迎来创业热潮。移动互联网领域众多新的概念提出,智能终端、移动网络等基础设施的改善为它们的发展提供了更好的土壤。

“目前发生在移动互联网的复制和抄袭行为,对于处在二线地位的公司来说,无论是获取资本青睐还是高成本的移动互联网人才,都面临着严峻的挑 战。”易观国际分析师齐剑哲分析指出,如果新的资本引不进来,而又无人收购,很大一部分移动互联网公司将会活在“剃刀边缘”——面临被清理出局的危险。

投资人恨铁不成钢

抄袭行为横行已经让投资者望而却步。“抄袭,尤其是抄袭核心模式、核心内容、信息的创业公司是根基不稳的创业公司,一旦投资企业的产品因为抄袭 事件被应用商店下架,这很可能最终演化为一桩失败的投资案例。”前述投资者告诉记者,目前,企业的维权意识越来越高,例如苹果应用商店等第三方软件平台鉴 于用户需求和自身平台的吸引力,在整顿“抄袭”之风上不遗余力。

拉卡拉董事长孙陶然在“首届中国天使投资人大会”时阐述了自己眼中的天使投资“铁律”和创业“军规”。孙陶然认为,中国产品所谓的“山寨”问题一直被外界诟病,主要原因是因为创业者比较急功近利,“许多人都没有觉得模仿和抄袭是可耻的,许多山寨产品竟然会登堂入室。”

孙陶然认为,创业者应该树立一个观念,抄袭并不能使你成功。在孙陶然看来,创业者最需“走正道、坚持创新、放下身段”。他认为,“走正道”是做人之道,也是企业之道;而创业者一定要通过创新来创业,“不要总想着复制和模仿,找市场空档。”

英特尔投资中国区投资总监吴蓉晖也表示,不能急于先做市场用户。而是把技术和产品踏踏实实做好,然后再去推广,比较好地平衡技术和用户、收入的 发展。一些公司急于发展收入,却没有做出收入模式,这样不能长期健康发展。他们希望投高技术、高质量、长期健康发展的公司,而不是为了几年就冲上市,那样 势必会后劲不足。

微软将进行开源的 10 大证据

【编者按:本文作者Richard Turner是曾经在微软工作了十年,罗列了十大证据证明微软已经在往开源的方向前进,究竟已经走了多远,又是否会对Windows 8等移动平台及整个移动开发环境造成多大的影响呢?】

1.鼓励开源的生态系统Windows和.NET开发者社区里面充满了开源的项目和提议,由 Ninject,AutoFac, Castle Windsor 和 StructureMap 等IoC/DI 框架,到nUnit等测试工具,由RavenDB等NOSQL文档数据库,到Orchard和Umbracon那种强大的文件管理系统,这些例子也只 是.NET/Windows 平台里众多开源项目的冰山一角而已。

2.减少无谓的反复“创新”

微软一直坚持自己开发完成别人在开源世界已经存在的技术的微软版本,这点一直让众多开发者不爽。所以当ASP.NET MVC3.0发布的时候还是让开发者们很惊喜的,因为这个微软第一次发布一个包括开源代码的主要项目,而 ASP.NET 4.0也增加了 jQuery Mobile & JSON.NET等更多的开源功能。

3. 和NuGet数据包管理器合作

数据包管理器对于开源生态系统来说非常重要,有了它开发者们才能轻松共享自己的代码, 而在2010年十月发布的NuGet能很好的弥补Windows/.NET 平台开源生态系统在这方面的不足,现在已经容纳了包括 jQuery, Modernizr, JSON.NET, ELMAH, log4net, Ninject等6000多个各大.NET开发者们需要数据包资料,虽然6000这个数字对比其他开源平台来说有点少,但是数据包的数量还在稳定增长中, 现在有的包也都非常有用,相信以后一定会变得更好的。

4. 把Windows系统优化成一个适合开源程序的平台

现在很多热门开源项目都是通过基于Linux的平台进行开发的,Windows想要运行这些项目就需要通过Windows的虚拟机才可以,失分不方 便,而微软已经在这方面做出了努力,2011年11月,微软就宣布通过新版的LibUV可以在Windows系统上稳定的运行node,同时,微软发布 了 IISNode ,让开发者可以在 IIS构建node。而在 LibUV 广受欢迎之后,其他开源项目现在都在都在做Windows系统的本地化。

5. 让接口多元化、规范化

这也是微软的开源社区已经走向成熟的标志,以去年十一月Antirez宣布微软提供了Windows可以本地运行Redis的端口这事为 例,Antirez并没有接受在Redis的核心代码中加入微软补丁的做法,而鼓励微软创建自己的Redis分支接口。而通过开源社区的努力,也成为了今 年开源社区第一个正式完成发布的项目。

6. Windows支持 Apache, PHP 和 Ruby 

从2008年开始,微软已经开始了这方面的努力,而现在不但在Windows 系统上可以构建Apache网络服务器,而且IIS也已经可以搭载Wordpress, Drupal, Joomla等给予PHP技术的网页和服务。

7.Azure支持众多开源平台 

在 Mix09上,微软已经正式宣布Windows Azure会支持 PHP, Java 和 Ruby 这些开源平台 。除了声明本身包含的内容,微软也在努力地提供各大开发环境的API,以求更多的开发者使用Azure服务。而在2011年11月微软宣布Windows 支持Node之后,微软也接着宣布了WindowsAzure与平台也完全支持Node。也预示着Azure会不断地向开源的方向前进。

8.支持 Hadoop

 去年,微软联合HortonWork宣布他们在努力地让Hadoop接入Windows,这是一个很重要的消息,因为这代表这微软宁愿放弃本身有的大数据管理项目而接受Hadoop,也代表着微软接受别人的产品的能力的提高,对所有人来说都是一个很好的消息。

9. 微软成为了Linux kernel 排名前20的资助者

十年河东十年河西,十年前微软的CEO鲍尔默还把Linux称为毒瘤,去年微软就成为了Linux最大的20个资助方之一。微软的资助主要围绕着让微软的的操作系统虚拟技术 Hyper-V能够搭建Linux系统这一个目标。

10. ASP.NET MVC4.0, WebAPI 和Razor引擎的开源化

如果说到微软和开源有关最重要的新闻,以下的声明一定不能不提:

  • ASP.NET MVC4.0, WebAPI 和Razor引擎会开源开发
  • ASP.NET 开发小组会考虑开发者社区提交的修改建议
  • ASP.NET 开发小组会公开地进行开发,将所有未来的更新代码更新到一个对外的服务器上。

小编语:

相信这些证据都足够证明微软正在朝着开源的道路上前进,这样的路线是能否能给Windows Phone带来足够的进步呢,有人说,Windows Phone的销量上不去是因为陷入了一个死循环,应用不多->销量上不去->没有足够用户->吸引不了开发者->应用不多。开源 化能否吸引足够多的开发者,成为打破这个死循环的关键点,大家拭目以待吧

文/雷锋网

Google 图片搜索的原理

针对这个问题,请教了算法组的同事,他分享了基本的思路:

对于这种图像搜索的算法,一般是三个步骤:

1. 将目标图片进行特征提取,描述图像的算法很多,用的比较多的是:SIFT描述子,指纹算法函数,bundling features算法,hash function(散列函数)等。也可以根据不同的图像,设计不同的算法,比如图像局部N阶矩的方法提取图像特征。

2. 将图像特征信息进行编码,并将海量图像编码做查找表。对于目标图像,可以对分辨率较大的图像进行降采样,减少运算量后在进行图像特征提取和编码处理。

3. 相似度匹配运算:利用目标图像的编码值,在图像搜索引擎中的图像数据库进行全局或是局部的相似度计算;根据所需要的鲁棒性,设定阈值,然后将相似度高的图片预保留下来;最后应该还有一步筛选最佳匹配图片,这个应该还是用到特征检测算法。

其中每个步骤都有很多算法研究,围绕数学,统计学,图像编码,信号处理等理论进行研究。

下面是阮一峰的一个最简单的实现:

你输入Google图片的网址,或者直接上传图片,Google就会找出与其相似的图片。下面这张图片是美国女演员Alyson Hannigan。

卢松松:Google图片搜索的原理

上传后,Google返回如下结果:

卢松松:Google图片搜索的原理

这种技术的原理是什么?计算机怎么知道两张图片相似呢?

根据Neal Krawetz博士的解释,原理非常简单易懂。我们可以用一个快速算法,就达到基本的效果。

这里的关键技术叫做”感知哈希算法”(Perceptual hash algorithm),它的作用是对每张图片生成一个”指纹”(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似。

下面是一个最简单的实现:

第一步,缩小尺寸。

将图片缩小到8×8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。

第二步,简化色彩。

将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。

第三步,计算平均值。

计算所有64个像素的灰度平均值。

第四步,比较像素的灰度。

将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。

第五步,计算哈希值。

将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。

卢松松:Google图片搜索的原理

得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。在理论上,这等同于计算”汉明距离”(Hamming distance)。如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。

具体的代码实现,可以参见Wote用python语言写的imgHash.py。代码很短,只有53行。使用的时候,第一个参数是基准图片,第二个参数是用来比较的其他图片所在的目录,返回结果是两张图片之间不相同的数据位数量(汉明距离)。

这种算法的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。如果在图片上加几个文字,它就认不出来了。所以,它的最佳用途是根据缩略图,找出原图。

实际应用中,往往采用更强大的pHash算法和SIFT算法,它们能够识别图片的变形。只要变形程度不超过25%,它们就能匹配原图。这些算法虽然更复杂,但是原理与上面的简便算法是一样的,就是先将图片转化成Hash字符串,然后再进行比较。

文章来源:卢松松博客

Linux Mint 13 ‘MAYA’值得注意的5件事情

最近备受瞩目的Canonical公司最近发布的Ubuntu Linux12.04“Precise Pangolin”现在有新伙伴了,那就是Linux Mint 13 代号’MAYA’。

就在几个星期前,我们看到了Fedora 17 beta版的发布,最终版将会在半月来临。现在Linux Mint发布了自己的Linux Mint13,或者叫”MAYA”.

1.两个版本

 Mint有全新的Cinnamon桌面,Maya会提供一个基于此桌面的OS。因此用户可以选择成熟和稳定的MATE 1.2或者全新的,令人期待的Cinnamon 1.4。

2.长期支持

Ubuntu Linux 12.04是一个长期支持(LTS)版本,Linux Mint 13也是基于此的,因此也是长期支持的。所有的软件将支持到2017年4月,这对企业用户来说是很有优势的。

3.新的显示管理器(Display Manager)

MDM,一个新的显示管理器,基于GNOME 显示管理器2.20。图形化配置工具,远程,自动,定时登录,事件脚本,语言选择,它比现有的任何显示管理器都要强大。

4.yahoo

对于在美国,加拿大,英国,爱尔兰,德国,法国,意大利和西班牙的用户,雅虎现在是默认的搜索引擎。当然,任何人要使用不同的搜索引擎,可以很容易的自己选择设置。

5.更漂亮的界面

有最新的Mint—X和Mint-Z主题的支持,Linux Mint 13有了一个爱尔兰艺术家优美照片的背景集合。

现在还不确定最终版将会何时发布,届时,它将可以从网站上直接下载。

Android,在争议中逃离 Linux 内核的 GPL 约束

为这个题材起名,我思考了许久,GPL 是著名的开放源代码许可协议,Linux 内核开源项目正是在 GPL 的庇佑之下,十多年来在服务器、PC 端以及各种嵌入式设备上成绩斐然,是当之无愧的当代计算机软件的基石,说 GPL 代表着 Linux 的开源精神,毫不为过。然而,现实世界中,GPL 开源乌托邦和商业社会的丛林法则之间存在剧烈的冲突,其中犬牙交错,艰难成长,从中引发的思考,与大家共享。

Linux 内核的 GPL 约束

总所周知,Linux 内核以 GNU 通用公共许可证第二版(GPL V2)的授权使用协议下发行。GNU 通用公共许可证是一种 “Copyleft” 形式的“版权”,保障任何人都能够对 Linux 内核以及其衍生产品的使用、修改和重新发布的权力,前题是不能修改发布条款。什么意思呢,任何 Linux 内核的衍生产品(Derived Work)必须遵循 GPL 协议进行发布。然而问题的核心在于什么是 Linux 内核的衍生产品,其中有几个致命问题,业界争论了十年有多。

1、使用 Linux 内核的头文件定义,进行系统调用的程序是否会被定性为衍生产品?

2、链接使用了其他 GPL 的类库的程序是否会被定性为衍生产品?

3、Linux 内核动态载入的模块 LKM(Loadable Kernel Modules)是否会被定性为衍生产品,以 LKM 形式开发的 Linux 驱动程序是不是衍生产品?

如果上述问题答案均为“是”,GPL 将为 Linux 打造一个的“封闭” 的开源世界,什么意思呢?一个 Linux GPL的操作系统核心运行在 “ 内核空间 ” ,上层的类库、框架、服务、应用运行在 “ 用户空间 ” 。用户空间上的任何服务不可避免的需要Linux 内核的头文件,进行系统调用,因此,中间层服务必须遵循 GPL 进行开放源代码。调用中间服务层的框架或者其他服务使用了 GPL 的类库,因此,也必须是 GPL 的。同理,上层应用也被 “ 传染 ” ,必须是 GPL 的。于是,从内核到驱动到中间服务到上层应用,形成了一个 GPL 一体化软件授权的软件发布整体。可以认为,这个整体上任何开发成果都是 GPL 的,除非极少数的例外程序能够证明自身独立于系统的GPL环境。这样的一个“软件闭包”排斥的商业化的软件模块以及“想要钱”普通开发者,将整个软件世界 划分为“ GPL 与 GPL 兼容的”的和非 GPL 的,每个开发从业者面临着选择,要么 Linux+GPL ,要么 Linux 与你无关。

重新回到这三个问题,第一个问题,曾经被 Linux 内核的作者 Linus Torvalds 以及内核开发人员多次澄清普通系统调用为非 GPL 的作用范围,甚至固化在 Linux 内核的源码 COPYING 文档中,为 Linux 用户空间的程序采用非 GPL 的授权许可证打下了基础。

第 二个问题,具有明确的答案,是。这也是为何 GPL 被抨击为具有“病毒感染”的特性,一旦程序使用了 GPL 的模块,本身即被传染,程序必须成为 GPL。如果主程序与 GPL 类库是静态链接(Static Link)的关系,业界一般认为主程序必须限定为 GPL。而对主程序动态链接(Dynamic Link)GPL类库主程序一般认为也必须是GPL的,若要打赢官司,必须证明主程序与GPL模块之间具有“独立性和可区分性”(Separate and Independent),才能逃离 GPL 的约束。GPL 官方网站上的有这样的 FAQ:

If a library is released under the GPL (not the LGPL), does that mean that any software which uses it has to be under the GPL or a GPL-compatible license? (#IfLibraryIsGPL)

Yes, because the software as it is actually run includes the library.

 如果一个类库以 GPL 的许可证授权进行发布(不是 LGPL),是否意味着任何使用该类库的软件必须以 GPL 或者 GPL 兼容的许可证下进行发布?

是,因为软件包含了该类库才能运作。

第 三个问题,是硬件厂商和 Linux 内核开发社区之间一场旷日持久的争论的中心。最著名的,莫过与图形显示设备厂商 AMD/ATI、NVidia 出自硬件规格保密以及知识产权的考虑,长期以二进制软件包的方式独立发布图形驱动,涉嫌违反了Linux内核开放源代码的软件授权协议 GPL,至今仍是 Unity 与 Gnome 3 等依赖于硬件图形加速的新型桌面技术发展上的一大阴影。主要的 Linux 内核维护者 Greg Kroah-Hartman 曾经严厉的批判过,内核中的二进制软件包发布的模块是非法的不道德的

说 到此处,可以看到 GPL 下的 Linux,存在着开源精神和商业机密以及知识产权保护相关的商业精神存在尖锐对立,对硬件厂商以及其他商业软件开发者来说,既不能忽视Linux广阔的 商业市场,也不能放弃产品规格以及知识产权保护,两者都会伤害其立命之本。在早年的一份嵌入式操作系统选型的研究报告指出,Linux 相对于其他的 BSD 的 Unix Like 操作系统,由于 GPL 的约束限制,不具有商业优势。(参见引用3)。一言以蔽之,业界有 GPL 的恐惧症。

然 而,在移动互联网蓬勃发展的今天,一个 Linux 的发布版本,Android 在各种智能嵌入式设备上面大放异彩。据说,Android 之父 Andy Rubin 极度厌恶 GPL(James Bottomley,Linux SCSI 子系统的维护者说其人“Working from an extreme dislike of the GPL”),然而 Android 向世人展示了采用 GPL 授权代码的手机也能获得巨大的市场成功。

Android:把 GPL 局限在内核空间

下图是 Openfoundry 绘 制的 Android 的授权许可证结构,可以看到在 Android 多层软件栈中,仅仅最核心的 Linux 内核使用了 GNU 通用公共许可证,在这个层次上,Google 对 Linux 内核的所有修改必须反馈回 Linux 主版本树(Android 的内核将在 Linux 3.3 版本进行回归,两个版本的 Linux 内核进行融合)。

其上层的类库以及应用框架以及所谓用户空间部分,大部分使用 了“ 温和 ”的 Apache-2.0 软件许可授权,允许 Android 上的开发商基于 Android 的源代码进行开发而不向社区反馈。基于上文讨论 GPL 的第一个问题,用户空间的类库以及程序使用 Linux 内核的系统调用不被视为是Linux内核的衍生产品,因而得以自由采用 Apache-2.0 的软件授权进行发布。GPL 世界和非GPL世界的分界线在于一个叫做 Bionic Libc 的类库。Bionic Libc 的关键之处在于如果 Bionic Libc 受到内核 GPL 的“感染”,将会波及非 GPL 的用户空间的各个模块。

Android 的 Bionic Libc 的类库,采用 BSD 的许可证授权。在 2008 年 Google IO大会上,一份著名的 PPT:“ Android Anatomy And Physiology ”讲到 Android 使用 Bionic Libc 类库替换Linux常用的 Gnu glibc ,其中一个主要原因是 “ We want to keep GPL out of user-space ”。 (这其实有点难理解,毕竟 Gnu glibc 采用的是 LGPL 而非 GPL,并基于上文 GPL 第一点的讨论,使用系统调用的程序不再被视为 Linux 内核的衍生产品,并不需要遵循 GPL,有兴趣者请看下文用户空间驱动部分的分析) 。Bionic Libc 充满着非议,Bionic Libc 拷贝内核头文件的行为,并在源码中声明的版权信息均遭到了 “ 侵犯 Linux 内核 GPL 约束 ” 的质疑。这是 Bionic 头文件的版权信息,许多人认为是非法的:

“This header was automatically generated from a Linux kernel header of the same name, to make information necessary for userspace to call into the kernel available to libc. It contains only constants, structures, and macros generated from the original header, and thus, contains no copyrightable information.”

头文件由Linux内核的同名头文件自动生成,用来获取完成用户空间系统调用的必要的信息。它只包含原头文件中的常数、结构和宏定义,因此,不包含版权信息。

不管如何,从目前的情况看,让 GPL 止步于内核空间的做法是成功的,并已经得到很大一部分内核开发者的认同。James Bottomley,Linux SCSI 子系统的维护者在 2011年 LinuxCon 大会日本站上谈到  Android 的商业成功与 GPL 恐惧的时候说:

We should also design more “bright line” systems which make the question of GPL compliance clear. The kernel’s user-space ABI is one such system; developers know that user-space code is not considered to be derived from the kernel. Making the boundary easy to understand helps to make the GPL less scary.

在遵守 GPL 的问题上,我们必须澄清一些界线。内核的用户空间 ABI(应用二进制接口)就是一种 GPL 的作用边界,能让开发者意识到用户空间的代码,不被定性为内核的衍生产品,如果 GPL 的界线清晰而易懂,可以帮助大家消除对 GPL 的恐惧。

缓解 Linux 驱动的 GPL 困境

Android 的发展离不开硬件设备厂商的支持,硬件设备厂商最关注的是 Linux 驱动的 GPL 约束问题,公开驱动程序源代码将会泄漏设备的硬件规格和泄漏核心知识产权,这是硬件厂商 GPL 恐惧的缘由。Google 不遗余力的为硬件设备厂家排忧艰难,保驾护航。上文提到的 “ Android Anatomy And Physiology  ”,文中清晰的讲到 Android 在用户空间与内核空间之间存在着硬件抽象层  HAL(Hardware Abstraction Layer),HAL 类库本质上一种用户空间的驱动,其中的主要用途之一:规避 GPL

用户空间的驱动

Linux 是单内核操作系统(Macrokernel),这种操作系统的一大特点是驱动存活在内核,优点是驱动与系统内核共生在相同的地址空间,运作的效率比较高, 缺点是当驱动有问题的时候,容易危及内核的工作安全。用户区间驱动的思路是将驱动的主要业务逻辑剥离出来放到用户空间的主驱动模块中,内核中的驱动是个 “影子”驱动,只有透传控制命令和数据的功能。

Android 的 HAL 相当于上图中的主驱动,其在内核中的驱动相当于上图中的影子驱动。规避 GPL 的硬件厂家把需要保护的商业机密以及知识产权相关的逻辑放在 HAL 层,以二进制包的方式发布,不需要公开源代码。

这种机制看上去很美,然而,同样面临着巨大的争议。HAL 类库与内核驱动之间通过普通的系统调用能够完成么?如果不是普通的系统调用,用户空间的驱动就违反了上文中的第一条,用户空间的驱动不能获得 GPL 例外的豁免。Edward J. Naughton 2011 年 3 月撰文认为,普通的系统调用应 被理解为 gnu glibc 向外暴露的系统调用接口,而 Android 通过 Bionic libc 类库暴露了更多的接口,包括原来在内核空间才能使用的接口,其目的是为了让用户空间的驱动能够充分的利用内核和硬件资源。如果情况果真如此,Bionic libc类库是 Google 的后门,这也可能 Android 抛弃使用 gnu glibc 重写 Bionic libc 的其中一个主要原因。Edward J. Naughton 说:

Some of the calls exposed by Bionic are ordinarily not available to userspace because they’re excluded by the use of the #ifdef __KERNEL__ … #endif guards. If Google can define any call to the kernel from userspace as a “normal system call” (even those system calls ostensibly guarded by kernel matainers) simply by including it in its new C library, then a “normal system call” becomes whatever Google (or Oracle or Microsoft) wants it to be.

Bionic 暴露了原来在用户空间不能使用的函数调用,这些调用原本在代码中被 __KERNEL__ 的宏定义保护其运行在内核状态。如果Google 只要将在 Bionic 添加暴露的接口就可以自由的暴露 Linux 系统调用(这些系统调用明显应该由 Linux 内核社区维护),那么难免被其他人效仿。

总结

总 得说来,Android 为 GPL 下的 Linux 如何与商业社会并存与共赢提供了一个成功的范本,尝试为 Linux 生态系统上的各种角色划清彼此的作用范围,梳理了各方在版权上的权利和义务,目前看来获得了惊人的商业成功。然而,这种工作模式也面临着巨大的版权争议, 理论上存在一种可能,一旦版权模式被否决,将面临被全盘否定的灾难。

题图来自 bzatreeza