关于 Linux “踢出” Android

| 55 Comments | No TrackBacks

昨天我照例去老袁的 blog 上找乐子,看到他新写了一篇文章《谷歌Android被Linux内核除名》,讲到了 Linux 把 Android 的代码树删除这件事,并借这件事,引申到了自己对 Google 的挞伐之中,并再次吹捧了 Windows。

老袁写的文章,我都是当笑话看的。看了以后就不管了,不过刚才翻 Google Reader 的时候,看到了阮一峰新写了一篇文章《Android,开源还是封闭?》。老袁写的笑话我可以不管,但阮一峰认真的写了这么一篇文章,我倒是对文章中的观点有些不认同。本来想在他的 blog 上留言的,但写着写着就觉得太长了,干脆总结成文章放在这里。

我觉得现在人们谈及 Google 必提“不作恶”,用这个词来规约 Google 的行为。这本身没什么问题,但我觉得这个词现在被过于“滥用”了。有时候众口难调,Google 不能满足所有人的时候,批判者就经常用“不作恶”来评判 Google。不同的人有不同的观点,所以事事都往"作恶"上面靠,让目前的讨论变得很空泛了,当然这只是题外话。

这篇文章里说的意思是,Google 的 Android 使用的是部分 Linux 的代码,按照 GPL 协议,Google 应该把所有的改动同样用 GPL 发布,以贡献开源社区。但事实是,Google 让硬件驱动运行在 userspace,这样这些驱动程序就不是 Android 的一部分,就不需要回馈给社区。Google 给硬件厂商提供了方便,使得他们写的驱动可以不用共享给社区,所以 Android 是个封闭的系统。

我觉得这样就有诡辩的成分在了。首先 Google 的做法是合法的。Android 本身是开源的,所以它没有违反协议。而硬件厂商给 Android 开发的驱动,版权并不属于 Google,因此 Google 自然也没有权利拿它们来回馈社区做好人。如果 Google 这样做了,岂不是和海盗湾的那帮传播盗版的人一样了么。当然,阮一峰是支持海盗湾的,可能他认为 Google 不这样做才是作恶吧。

文章中有一点挺有意思,还有些技术成分。Greg Kroah-Hartman 的文章里说 Android 为手机实现了一个统一的虚拟机,解决了程序的移植问题。阮一峰认为这是 Google 为了不贡献那些驱动而耍的小把戏,他说:"且慢,这真的是理由吗?传统的Linux系统,也并不依赖特定的硬件啊!只要把源代码根据不同的平台,分别编译一下,同一个程序不也照样可以在不同的硬件架构、不同的Linux发行版中使用吗?"

我觉得阮一峰可能对"平台"这一词并没有弄清除,或者是故意曲解了这个词。过去人们所说的 "C 语言具有良好的移植性","换一个平台,在那个平台上编译一次代码就可以了",这里面说的平台,可不是目前人们说的 32 位平台、64 位平台那么简单。平台之间的差异基本上到了 CISC、RISC 的差异那种程度上了,和目前我们想象的地址总线的数量不同了相比,显得更复杂。很多软件,在不同平台上移植,也不只是重新编译那么简单。比如说 Endian 的问题,光是要修改这一部分就要花费很大的功夫去修改。Mac 系统从 Power PC 平台迁移到 Intel 平台上的时候,发布过 Rosetta 程序,就是一个 Intel 平台上运行的 Power PC 虚拟机。很多软件,如 Adobe 的那些程序(印象里是 Photoshop,我们在 Computer Organization 课上讲过,现在记不清了),到最后也不是修改过去的,而是重头写起。像 Adobe 这样的大公司都是如此,手机上的软件开发着常常都是小团队甚至是一个人,要独立完成不同平台的移植工作,显然也是不容易的。哪怕是现在我们从 32 位往 64 位上过渡,经过了这几年都还没有搞完呢,更别提那些架构级别的移植了。

而 Java 通过虚拟机,算是彻底的解决了这个问题。如果像阮一峰想象的那样,重新编译就可以完成移植,那么当年 Java 还搞什么噱头?由于 Android 本身是开源的,而且手机硬件的生产成本又低于计算机,现在也没有统一的标准,所以在将来,我认为必然会出现千奇百怪的硬件。这些肯定不能通过简单的编译就解决问题。阮一峰的意思是为不同的硬件架构都做一个二进制包,这样一个软件,开发者就要为多个平台维护不同的二进制包,阮一峰总不会指望作者发布软件代码让用户自己编译安装吧?而如果 Android 想成为一个像 iPhone 那样的严肃作品的话,必然要有针对普通用户的一键式安装软件的机制。Apple 的 App Store 是一个很成功的先行者,而 Google 目前搞的 Android Market 也是在像这个方向努力着。而按照阮一峰的想法,当一个用户在安装软件的时候,被告知如果是 HTC 生产的硬件,就下载为 HTC 编译的包;如果是摩托罗拉的硬件,就下载为摩托罗拉编译的包。这样的手机,在普通用户眼里,也只能是"小打小闹",根本成不了气候。由于手机产生的平台可能会比计算机更多,那样的话后果说不定更严重。目前 Linux 在桌面领域已经是这个样子了,如果 Google 按照同样的策略去运作 Android,将来在市场上 Android 很可能表现还不如 Linux。面对 iPhone 平台,那样的 Android 只能是沦为几个黑客的玩具而已。

同样说道了市场,我的前提假设是 Google 做 Android 不是玩票,不是搅浑水,而是严肃的想涉足移动计算这一块。那么硬件的支持就是至关紧要的了。阮一峰的文章里也说明了,硬件厂商开放了自己的驱动的后果是什么。让那些硬件厂商把驱动吐出来显然是不可能的,所以迎合硬件厂商的要求也就是必要的了。其实仔细想想,这样的做法也并不算过分。对于用户来说,我们获得的还是一个开放的 Android,只是硬件的驱动是封闭的。开发者照样可以为 Android 平台开发软件。其实就算是桌面 Linux 用户,除了像 RMS 那样固执的人外,有几个会选择开源的显卡驱动呢?

所以,无论是从法理还是从情理上,我都觉得 Google 在这件事上没什么错。合理怀疑也是不错的,但把什么事都说成阴谋论就让人觉得不好了。尽管 Google 有"不作恶"这一说,但如果 Android 真得发展成了桌面领域的 Linux,那么它做不做恶都没有人关心了。

阮一峰在最后说:“Android必须变成一个真正的开源系统。如果像现在这样封闭下去,就会被开源社区抛弃,就一定不会成功,即使有Google的支持。”这口气让我觉得和老袁挺相似了。如果 Android 作为一个系统,这话还有可能说的过去,但作为一个商业产品的一部分,如此断言还是太过武断。

No TrackBacks

TrackBack URL: http://www.cnliufeng.com/cgi-bin/mt/mt-tb.cgi/437

55 Comments

写的好, 很同意~

写得不错,接受你的批评。我可能确实有点感情用事。

主要是因为对Google有太大的期望,所以不能接受它现在的这种做法。

这一次,它也许没有做错,但是代价也是巨大的——它放弃了创造未来的机会。

我坚信,未来主流的手机操作系统一定是开源的,就像我坚信未来Linux一定胜过Windows一样。

现在,既然Google放弃了这个选择,那么只能等待其他人来做出开源的手机系统了。这也意味着,我们还要在黑暗中等待更久。

同意. 阮的这篇文章有些偏激了. PS, 阮最近新买手机, 竟然选择了WM . 很难想象翻译more joel on software 的人做出这样的选择...

硬件驱动是不可能跑在虚拟机层的,虚拟机本来就是为了抽象硬件层而出现,虚拟机不可以脱离硬件驱动而存在。

而硬件驱动,充分依赖硬件供应商、硬件设计者的劳动,也就是所谓的生产资料;在硬件领域,除非那种比较“公版”的设计,相对简单的设备如无线网卡、蓝牙之类的通常都有开源驱动,但是涉及高性能显示、运算等等比较封闭的领域,你开源驱动很可能就意味着泄密的。

软件是可以奉献,硬件是要成本的。

你好,我是从阮一峰的博客链接到这里的。

看了几篇文章以后,我感觉这儿排版有点过于紧凑,白底黑字反差过大,阅读起来比较费眼睛。不知道楼主是否可以略作调整。

也许你觉得google这样做没有什么,那是你没有考虑开源社区的感受。如果有人给你儿子安装一条额外的手臂,他可能变得更强大,但是我想你肯定不会喜欢。zzshbyt罢了,哈哈

我喜欢那些有所坚持而又对自己有所怀疑的人。博主和阮大都是真诚的,说的话都是对事不对人。中文互联网缺少这样的氛围。

阮的文章为啥不从另外的角度看看双刃剑呢? Linux上硬件驱动的不丰富到目前一直都是很大的硬伤,Google能让硬件厂商有兴趣为Android写驱动,对Linux kernel来说不是一件好事吗? 只是现在Android被踢出了Linux kernel,硬件厂商为Linux kernel开发驱动的兴趣又回到了以前。

另外,开源和闭源都是中性词,但是在阮的文章里看着闭源总有一股贬义的味道。当然每个人对这篇文章的理解都是不一样的,也许别人看不出褒贬来。

Google是没有做什么违法的事情,但他们的行为确实对Linux社区是伤害性而非建设性的

阮的帖子太搞笑了,博客也是煞有介事地介绍三星手机……

阮的文章一般都是激情有余,证据不足,特别是主观的判断加的过多。

对阮不了解,但感觉他缺乏类似长尾项目推广的经验,这点在对JAVA和编译这块的内容可以看出来。GOOGLE对内核的抽象是当前大环境下的切实可行之道,也是一种合理的商业模式。这种模式不妨碍真正希望开放底层驱动源码的公司加入进来,也确保了希望保持封闭的公司,毕竟目前封闭是多数,但随着开放原来越多,这种模式最终能促进开放。

Google也不是万能的,不可能所有人都讨好的,google not god。。。

老袁显然没有开发过linux下的驱动,如果Android真的让硬件驱动运行在 userspace,可是众多驱动开发者梦寐以求的事情,不知道要省多少事情。至于userspace的代码中如果没有使用公共域的代码,选择不开源当然没有问题。

老袁的逻辑似乎是开源的最终目的是绑架所有软件开发者的劳动。

从文字表面的逻辑性来看,二位都比较严谨,也都有主观倾向性与感情色彩。正好构成事物的两面,让看的人有更全面的认知。赞一个,再谢一个~

早上刚刚翻译了这篇文章: http://www.thebusinessreview.org/2010/02/05/%E8%AF%91%E8%AF%84android%E5%92%8Clinux%E6%A0%B8%E5%BF%83%E7%A4%BE%E5%8C%BA/

我的理解是这样,Google拿了linux的内核修改成了自己的Android系统。但是Google改变了Linux加载驱动程序的方法。应该是让Linux的驱动可以从userspace上面加载,这样就可以支持厂商私有的驱动(厂商不愿意开源驱动,正式嵌入Linux包括整个Linux社区在推广中的一个阻碍)。

现在移除了Google的代码不代表未来也会移除google代码,只不过内核开发社区的人需要Google的支持而已。

也不排除以后google要为android做一个独立的分支

我觉得,如果这样来看的话,也许这是对linux内核巨大的核心,想象一下,现在的linux内核,最占用空间的就是那些驱动程序。也许是要对linux内核整体设计做一个review的时候了

分析得很好。

Android会不会成为陷入J2ME同样的困境,确实令人担忧。

为了取得更大的利益,封闭系统比开源系统更有优势,拥有更多信息人肯定能取得更大的优势,这也是G。F。W存在的原因。

我想@hedian的意思可能是WM太难用了,作为这样一本好书的译者应该挑个更好的系统……

不过WM确实很难用,慢、用户体验差……我试过一次,没把我折磨死。

我在GR上看到阮的上一篇文章也有和@hedian一样的想法,后来看了他的这篇关于Android的文章,就直接退订了……

阮说的创造未来,可能是技术的未来,hacker们的未来,却忽略了市场这个未来

O(∩_∩)O哈! 感觉你们真像一家子的...

作为一个路人。。我觉得谷歌是一个公司,而非个人,也并不是一个代表“个人独裁意志”的组织。那么即使在其内部也难免会有不同的行事风格、对同一个解决方案产生分歧,甚至是糟糕的处理办法。就像谷歌拼音,虽然是谷歌的,但是我仍然得出结论:它会落后于搜狗,并将继续下去!

所以我们应该理性的对待任何一个公司,包括他们的领导人。比尔盖茨,现在的慈善家,在我的印象中,他变得固执了,甚至比巴菲特;乔布斯,一个生过病的半娱乐掌门人,他绝不是工作在底层的技术人员,虽然是一个不错的产品宣传人;然后再说拉里和谢尔盖,他们是出色的技术员和创始人。

既然谷歌开源社区的人T了,我们马上就认识到事情确实发生了,不论谁过,android今后一定会与开源社区的矛盾将持续下去。如果谷歌(在依赖利益的商业伙伴和主张免费的开源系统之间)把握不当,招人厌恶,问题就不在于它在开源上做得是否得当了,那必将出现一个新的移动开源系统,不叫android的。

嘿嘿~说句题外话,把一篇文章和另一篇提反对意见的文章连着一起读很不错啊~~

linux上最好没有闭源的东西,这是所有人期望的,google使用了linux却搞着闭源,另开一套底层架构的分支,不管什么策略,什么态度,都已经伤害了linux,因此我原本打算支持android的心又一次倾向了微软wm!

从reader里读到阮一峰的blog,顺便点到您这里,很喜欢您写的文字,某些观点不谋而合,击节叫好。冒昧问一下,可否加您为有博链接,我想,您有权利获知此事。

祝好

   kevin  Blog:www.kevindreamfly.com

其实linux也支持闭源的硬件驱动程序阿!并没有规定所有的都一定是开源和自由的。 从android的设计理念上看,与linux的架构还是存在相当的不一致的。google不可能重新设计一个操作系统核心,就只有使用开源的linux了,这应该是历史的问题了。google在linux的内核上变通的实现自己的想法,对于一个商业公司倒是也无可厚非。 不管怎样,google还是相对比wm更加开源一些,有更多支持开源的人支持它,我也勉强算一个吧。但是linux的发展方向不会也不可能按照google的思路走,必将导致二者的分歧越来越大。 目前的问题是google应该怎么办?我想还是看好与linux的合作。google应该有能力做一个linux的下游分支出来。

意识形态的分歧?好像没有吧。关于“硬件无关”的评论,确实是你更正确一些。

至于一个系统中如果存在“闭源”的部分,会不会影响到其他“开源”的部分?我认为肯定会,因为这相当于“开源开发者”在补贴“闭源开发者”,从而鼓励更多的闭源行为。

举例来说,你原打算捐款为山区的孩子建一所小学,但是你后来得知,捐款的20%要用于为领导盖宾馆,你会做何感想?

目前的状态就是这样,由于硬件厂商的驱动不开源,导致开源社区实际上为他们打工。

关于对Google的不满,简单说是这样的:

你完全可以不用Linux Kernel,而自己开发一个Google Kernel,以你的实力,想必也不是难事。要是这样做,任何人都不会有非议。

可是,既然你选择了Linux Kernel,并且大张旗鼓地宣传,那么你奉献出什么呢?难道你的奉献就是给Kernel开一个口子吗?

Google这样做的优势是能最为广泛的集中应用开发者,而不需要他们过多考虑平台转换的问题,应用开发者多数不需要考虑硬件驱动层的问题,Linux平台上的开发者大部分都是java和C类的开发人员,如果自己搞一个Google Kernel,要整合的东西就可能不止是jvm和目前所使用的一些开发语言了,甚至还需要做出自己的G语言,这样是不是加大了平台研发与开发者使用的难度呢,最阻碍Linux的就是日常应用了,大家使用的发行版本都不同,源码需要编译来编译去并不像Kernel那样大家共同维护同样使用,Android这样的做法也许很能帮助Linux占领移动平台市场,至少Android本身是在开源,如果需要硬件厂商开放驱动源码,那么市场的竞争应该类似于Intel与AMD等CPU之间竞争,完全的开放意味着大家都可以取长补短,类似共产主义,所以开源的胜利是必然的,就和共产主义一样,但是不知道是何日.

不过google是合法的, 但是google确实不厚道

Google的做法是一个商业公司的本分,而linux社区也坚持了自己的原则,仅此而已,完全没必要上升到道德的高度来批判这件事情。

感觉Google抢的是把开源和商业用现有的规则整合到一起的洞察力。 不过有谁能去确定一个商业公司下一步会去作出什么样的决定呢。 如果纯粹让商业思路决定未来,我觉得开源就成了辅助。

偶然看到,只是发表自己的有些混乱的看法。

Linux社区现在不爽Android,当年怎么不支持GPLv3涅?要改变局面,最佳办法就是从源头(许可证)上堵住漏洞。

在阮那边评论过了,因为是比较赞同你的,就没必要再围绕评论说什么。

想指出的是,手机并不是PC,手机行业也因此没有形成微软一家独大的情况,但手机业,并不是不可能形成,而是竞争对手们变乖了,知道不能让某个商业公司的操作系统占据过高的统治地位,手机硬件上的差异被拉大,编程方法和应用程序差距拉开,然而这对形成一个移动互联网,是不方便的,应用共享不能总是云计算级别的,它需要真正本地化的存在。个人觉得通过在Linux社区分支下形成一个开源的操作系统是很难做到的,真正广泛的应用,必须有一致的标准,独一一份,无可分割的规范,一个基础的平台,在此之上去做应用,而不同的手机制造商,要么去统一一种标准的硬件结构,要么去统一一种标准的操作系统底层调用方式。android做得还不够好,java很好,但作手机应用,单靠它还不够,但google之前已经有很多可以参考的了,比如firefox,比如app store,甚至twitter,希望google能走得更好,stay not evil,and我们都会坚决地时刻给google挑出毛病来。

我觉得楼主的文章排版挺好的,你认为不好就要让博主调整,我认为好,就不希望他调整,调整了反而觉得不好。凭什么博主要听你的。你在别人博客看别人文章,就要学会尊重别人的喜好,你如果不喜欢可以走,这位朋友,你说是这个道理吗?

这么说未免有点诡辩的意味 给孩子捐款目标是孩子,被领导用了就是没用在目标用户上 那是犯法的 而linux开源,本身就是开给所有用得上的人的,这也是开源本意 google也并未违背gpl协议,只是找个办法绕过,怎么就是错了呢? 现在如你一般说的话,那似乎开源也是有目标用户的咯,就是开源者?这么说未免太狭隘了 想想当年bsd协议的软件被gpl移植了多少?但因为版权问题而不能移植gpl的软件,那不也是一样狭隘么?

说句闲话 正文1.5倍的行距才好 现在这样太紧凑了

我想我大概读懂了两篇文章的逻辑了。 阮一峰的意思不是google的商业模式如何如何,而是google的做法相当于帮助了硬件产商,即开源社区补贴了封闭的社区。无论怎么说,这不算是什么道德谴责。 而其所说的未来,我觉得以他经济学的出身,意思不是指开源一统天下,而是指在开发上的总福利最大化。也就是说,阮一峰是认为这样的做法使得它无法激励更多人去从事开源的活动。这个是从效率上面来讲的。 此博客上面所讲的则是另外一回事。 作者的意思是,第一,阮一峰对技术的了解不足够,即其对技术和相关法理的评论存在知识上的不足;第二,阮一峰对google的评论说的不是市场上的事情,缺乏足够的商业分析。 所以本文所说的东西其实和阮一峰说的是两回事。 也所以,在一方面,这篇文章说阮一峰的评论不懂得市场,但阮一峰说的市场不是产品盈利与否或者方案可行与否,而是能否激励更多人参加开源活动;而另一方面,由于本文作者在学识背景上和阮一峰不同,导致了理解上的曲解。 我觉得这里隐藏的前提太多了,两个人都必须说清楚才能使讨论比较清晰。 另外,这是我个人有点偏激的看法,我觉得阮一峰在经济学上的修养导致了他有一个自我默认的信仰(其实我也有),那就是不知不觉会考虑到整个市场的效率(即总福利最大化)。 希望我的理解没有错误。

因为Android没有完全自由,就去投靠WM?是不是说,国民党抗战不够努力,那就可以去当汉奸了?

P.S. 我不用Android,也对微软只有一般般的恶感。只是觉得逻辑有点荒谬,左右摇摆得也太快了。

确实是意识形态的分歧。

你举的例子就不太恰当。“捐款的20%要用于为领导盖宾馆”,可是钱用掉20%就只剩了80%,而软件并不会因使用而减少——没有人损失。

在某种意义上,仍然会有损失。前提是你认为自由软件的理想就是GPL。我知道很多人是这样想的。但仍然有很多人不是。仍然有大量的软件使用了BSD、Apache、zlib之类的许可,并代表了不同的自由软件的理念……

依我的理解,Linus本人是不会对Google这样的做法有意见的。而Alan Cox估计就会意见很大。这次这位Greg Kroah-Hartman,我开始以为更接近Alan的人物,但仔细看下来,似乎作出这个决定只是基于技术原因而已。

看新闻,好像Linus很喜欢Google的Nexus One手机。

你对我的评论似乎有点意识形态之争了,经济总福利最大化就是共产?那竞争市场的模型不就是最好的共产主义。显然你曲解了,若你要了解什么是经济总福利最大化,请找本经济学的书看看。另外,从这点也可以看出,问题的确是出现在你们两个的知识层面上。这大概类似于一个学过大学物理的人对电压的理解和一个仅仅学过高中物理的人对电压的理解那样,知识层面有差异,说起来双方都很难理解,他不了解你说的技术,你也不了解他说的经济。最大的意见分歧在于,阮一峰认为这样会减少对开源社区的激励,而你谈的却不是这个问题,而是认为这是一个很好的商业策略。However,这种态度评价本来就基于不同方面,所以也不能就这样说谁好谁差。

阮一峰最后的那句话,我觉得要是脱离了具体语境来讲,的确就是他字面的意思。但是你若读了他说创造一个新的未来的那句话,你应该就会了解到他说的失败是什么,抛弃是什么。失败在创造一个新的未来(however,阮一峰说的东西其实和你说的东西真的不同。),抛弃是指不再有很多开源的人为它写软件。至于现实是否如此,还得验证。但就劣币驱逐良币的原来来讲,其正确性还是挺高的,因为既然硬件产商可以获取利润了,那开源社区就相当于为他们免费打工,时间一长,就没有人这么做的了,因为除了无利可图,在道德层面上也很难做下去。另外,法理不是经济道理,法理正确了也不代表以后的发展很好。

Leave a comment

About this Entry

This page contains a single entry by Feng Liu published on February 4, 2010 5:04 PM.

越来越喜欢 Java 了 was the previous entry in this blog.

分居 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.