Android,开源还是封闭?

作者: 阮一峰

日期: 2010年2月 4日

满大街都在谈论Android。

它是当红炸子鸡。许多人觉得,iPhone将受到它的强力挑战。

bg2010020401.png

我也曾经对它充满了期待,但是后来的事态发展,令我改变了看法。前几天,我就在网志上写了自己的担忧

"首先,Android应用程序只能用java语言开发,莫非所有的应用程序都运行在一个巨大的虚拟机上?(【更正】网友留言指出,2009年6月Android发布NDK工具包,支持C/C++语言编程,不过性能不如SKD工具包中的Java语言。 )

其次,Google对Android采用了一种全面霸权式的管理,完全不是其他开源软件的开发方式,一切都由Google说了算,很多地方是黑箱,外界不得而知。"

没有想到,仅仅过了两天,担忧就变成了现实。Linux Kernel的维护者Greg Kroah-Hartman宣布,将Android 代码从 Linux kernel 代码库中删除。这意味着,Linux Kernel的开发小组不认可Android的贡献,两者产生了冲突。

消息公布以后,外界普遍觉得惊讶和可惜。好不容易,才有了一个这么受欢迎的开源手机系统,应该齐心协力、共同开发才对,为什么要"窝里斗"呢?到底是什么矛盾,使得Linux Kernel小组剔除Android代码呢?

Greg Kroah-Hartman写了一篇详细的文章,解释这个决定。下面就来看看,他是怎么说的,以及Android到底是一个什么样的系统。

在这之前,你最好知道Greg Kroah-Hartman是谁。他是目前Linux Kernel的核心开发人员,负责stable软件包的发布。就是说,每一个新版本的Linux Kernel,都是经过他的手流出来的。此外,他还负责硬件驱动的部署。而他的手机就是HTC G1,每天都在使用。所以,他是绝对有资格谈论这个问题的,他的看法代表了Linux社区对Android的看法。

首先,他指出Android和其他的Linux发行版不一样:

"Google has taken the Linux kernel, and nothing else from a "traditional" Linux system.

Google只用了kernel,别的东西都没用。"

这就是说,与Ubuntu、Debian、Redhat这样的传统Linux发行版相比,只有系统的底层结构是一样的,其他东西在Android里都不一样,尤其是程序员的编程接口是完全不同的。因此,Android应用程序都必须重新写过,现存的Linux程序无法移植上去。所以,从严格意义上说,Android是一种全新的系统,它与Linux的距离,比Mac OS与Linux的距离还要远。

bg2010020402.jpg

然后,Greg Kroah-Hartman肯定了Android这样做的积极意义:

"Android also solves the problem that the phone manufacturers had been having for many years: a free version of Java and a unified application layer that programmers can write to that will work on all phone platforms that integrate it.

它解决了长期令手机制造商头痛不已的问题:业界缺乏一个开源的Java虚拟机,以及统一的应用程序接口。现在,程序员只要写一次程序,就能在各种手机硬件平台之上使用。"

这段话解释了,为什么Android的应用程序,都必须用Java语言开发。因为不这样做的话,没法让程序做到硬件无关。

且慢,这真的是理由吗?传统的Linux系统,也并不依赖特定的硬件啊!只要把源代码根据不同的平台,分别编译一下,同一个程序不也照样可以在不同的硬件架构、不同的Linux发行版中使用吗?

那么,Android只采用kernel、只允许用java编程的真正原因,到底是什么?

台湾的科技网志MMDays一语道破真相:

"Linux kernel 的版权是 GPL。

这下问题来了:如果你是硬件厂商,希望你的硬件能在 Linux kernel 下运作,那么就必须要有驱动程序。如果驱动程序的程序代码公开,等于硬件规格也公开的差不多了。许多厂商不愿意这么做,所以就提供编好的驱动程序,但不提供原始码。

Android 的重点就是商业应用,Google采用了一些手法来绕过这问题。他们把驱动程序移到 "userspace",也就是说,把驱动程序变成在 Linux kernel 上头跑,而不是一起跑的东西,这样就可以避过GPL。然后,在 kernel 这边开个小门,让本来不能直接控制到硬件的 "userspace" 程序也可以碰得到,这样只要把"开个小门"的程序代码公布就行啦。"

看明白了吗?

这段话的意思是说,Google玩了一个花招,在kernel和应用程序之间,自己做了一个中间层,这样就既不违反GPL许可,又能不让外界看到厂商的硬件驱动和应用程序的源码。

里面的关键在于,Kernel和Android的许可证不一样,前者是GPL许可证,后者是Apache Software License(简称ASL)许可证。GPL许可证规定,对源码的任何修改都必须开源,所以Android开源了,因为它修改了Kernel。而ASL许可证规定,可以随意使用源码,不必开源,所以建筑在Android之上的硬件驱动和应用程序,都可以保持封闭。为了得到更多厂商的支持,Google有意选择了这样做,并且特意修改Kernel,使得原本应该包括在kernel中的某些功能,都被转移到了userspace之中,因此得以避开开源。

这样做或许有利于推广Android,吸引厂商和软件开发商的加入,但是Google也放弃了构建一个真正开源的手机系统的机会,从而也就不能获得由全世界程序员提供智慧、分享代码、推动创新的好处。关于许可证问题的深入讨论,请阅读Ryan Paul的文章《Why Google chose the Apache Software License over GPLv2 for Android》

Google的这种做法,直接后果就是给Linux Kernel带来了麻烦。Greg Kroah-Hartman清楚地说出了自己的不满。

"...any drivers written for Android hardware platforms, can not get merged into the main kernel tree because they have dependencies on code that only lives in Google's kernel tree, causing it to fail to build in the kernel.org tree.

所有为Android写的硬件驱动,都不能合并入kernel。因为它们只在Google的代码里有效,在kernel里根本没法用。

Because of this, Google has now prevented a large chunk of hardware drivers and platform code from ever getting merged into the main kernel tree. Effectively creating a kernel branch that a number of different vendors are now relying on.

由于这个原因,Google也从不把大量的硬件驱动程序和平台源码向kernel提交。实际上,它创造出了一个kernel的分支,大量的开发者都依赖那个分支。"

这就是Android干的事情:它修改了Kernel,但是又不提供修改的细节,自己搞了一个封闭的系统。说得难听一点,它利用了开源社区,要求开源社区为它做贡献,却又不愿提供回报。

所以,Linux Kernel就把Android踢出去了,真是再正常不过了。

人们有权利质疑,Android这样的哲学是否正确?是否符合Google"不作恶"的口号?如果Android继续这样封闭下去,那么开源社区为什么要为它免费制作软件呢?因为我又不是在为开源社区服务,而是在为Google服务。既然这样的话,那还不如去支持iPhone呢,至少能在软件商店里多卖一点钱,而且乔布斯看上去也更酷一点。

bg2010020403.jpg

slashdot上有很多关于此事的讨论。有人指出:

"Google自己的网站,与微软的网站一样封闭。它开源出来的东西,都是根据GPL许可证不得不开源的。"

好吧,姑且不谈Google本身,因为它至少不要求外界提供支持。但是Android不一样,你不能假装成开源系统,骗取社区的支持,然后又干着封闭系统的勾当。以你的实力,不用Linux Kernel,自己开发一个Google Kernel,想必也不是难事。要是这样做,任何人都不会有非议。可是,既然你选择了Linux Kernel,并且大张旗鼓地宣传,那么你奉献出什么呢?难道你的奉献就是给Kernel开一个口子吗?

Google必须做出改变。正如Greg Kroah-Hartman最后的呼吁:

"I really don't know. Google shows no sign of working to get their code upstream anymore.

我真的不知道未来。Google看上去没有任何改变代码的迹象。

I do hold out hope that Google does come around and works to fix their codebase to get it merged upstream to stop the huge blockage that they have now caused in a large number of embedded Linux hardware companies.

我确实希望Google做出改变,把它的代码合并进我们的代码,弥补已经出现的代码分裂。

I've privately offered in the past to help this work get done, and am doing again here publicly. But I need the help of the Google developers to make it happen, without them, nothing can change.

我私底下已经说过,我愿意帮助完成这项工作,在这里我再次公开这样说。但是如果没有Google程序员的加入,什么也不会发生。"

Android必须变成一个真正的开源系统。如果像现在这样封闭下去,就会被开源社区抛弃,就一定不会成功,即使有Google的支持。

UPDATE ONE

liufeng针对此文,写了一篇很好的评论,推荐阅读。

我接受他的批评,我确实有点感情用事。主要是因为对Google有太大的期望,所以不能接受它现在的这种做法。

这一次,也许不能说Google做错了什么,毕竟都符合GPL许可证的要求。但是代价也是巨大的----它放弃了创造未来的机会。我坚信,未来主流的手机操作系统一定是开源的,就像我坚信未来Linux一定胜过Windows一样。现在,既然Google放弃了这个选择,那么只能等待其他人来做出开源的手机系统了。这也意味着,我们还要在黑暗中等待更久。

UPDATE TWO

Greg Kroah-Hartman原文中有一些关于技术的部分,由于我不太懂,就没翻译出来。网友黑日白月做了意译和点评。

简单的来讲,Android 的硬件驱动依赖在 Google 代码树里的东西,于是尽管大多数厂商都将它们的驱动反馈给社区了,但是对 Google 代码树的依赖导致它们无法并入主线(merge into mainline)。而 Google 代码树一直没并入主线是由于 Android 平台安全架构模型需要额外的钩子以及完全不同的帧缓存驱动。

这次在 2.6.33 主线中把 Android 部分清理掉是由于厂商贡献的这部分代码在离开 Google 的代码树之后对其他嵌入式 Linux 没有用处,干脆从主线中除掉好了......

这跟前段时间 Linus 指责 Red Hat 把 Nouveau 并入主线的积极性不高一样,最后 Red Hat 也是把 Nouveau 并入 2.6.33 的主线了么......

没有并入主线对于社区和厂商都不利,社区得不到驱动程序的扩展,厂商也得不到内核新特性的改善。但是并不是所有模块在一开始的时候都是并入主线的,总是要发展到某个相对成熟的阶段或者解决了潜在的授权问题后才并入的。总之并入主线对双方都有利,这个问题反应这次 Google 的并入主线积极性不高(不代表不开源),社区打它屁屁了......

(完)

珠峰培训

stuQ

留言(107条)

Google这次有点不厚道了

板凳,看下面的网友评论。

阮老师的口吻开始向郎咸平靠拢了。。。:)

如果像现在这样封闭下去,就会被开源社区抛弃,就一定不会成功,即使有Google的支持——纵观现在电脑和手机上占有率最大的那几个系统,又有多少个是开源的呢?!

现在人们谈及 Google 必提“不作恶”,我倒是觉得这个词被过于“滥用”了。本来的评论太长了,我修改后放到 blog 上。

其实你上次的blog贴出来后,我就想过来留言说,“开放并没有道德上的制高点,更加远远没有商业或者品质上的制高点。开放或者封闭或者半封闭,利弊更取决于具体行业。在便携消费类设备上,iPhone已经是一个强有力的证据来说明这个行业上的特异之处。”

当时没有过来留言的原因是,要说清这个话题需要太多的篇幅。而不说清的话,会让人误解我的看法。其实,虽然我认为iPhone是非常成功的模式,但我也并不反对Android的开源模式,我只是认为Google所选择的开源,无论是Android还是Chrome,都不是为了开源的开发,而是出于别的目的,例如分发。总之,那更多的是商业上的考虑。

而你今天的这篇blog,读完以后的感想是,这并没有证明google做错了什么,恰恰相反,他说明的是开源社区在某些领域的商业模式上是如何的举步维艰。

商业之上,开源不一定就成功,不开源也不一定不成功。

商业成功要看市场接受程度。 客户在慢慢改变,商业模式可能随时在改变。

Google是发布一个'真正开源的'但是没有任何厂商支持的Android好,还是开发一个'不那么开源的'但是所有人都能在其基础上制作手机的Android好?

Android本身可以开源部分没有不开源的(AFAIS).是保护厂商的驱动,还是强迫所有厂商按照GPL发布驱动?

btw: 支持 若昔难得 的观点. 开源和商务上的成功没有关系,SUN是最近一个例子.

一个非常简单的问题:Google应该首先为用户服务还是为“开源社区”服务?

iPhone其实更加封闭,sdk上的封闭性自然不用多说,appstore上的程序apple也可以随时要求下架或者屏蔽其中某些功能。(最近的几个例子是google voice和看书软件stanza)

iPhone OS的底层应该也是某种Unix的变体(如同mac os),但从上面这个角度而看,其实比起android更加得不堪。

赞同Open Source的理想,未必见得就赞同GPL。你同样可以选择支持apache的协议或者其他。正如博文所说,在面对硬件厂商的时候,很多时候的确有些无奈。

我觉得注目的焦点应该在被kernel踢出来之后的影响以及android将来的发布的开源协议,而非对其的道德审判。

引用XY的发言:

如果像现在这样封闭下去,就会被开源社区抛弃,就一定不会成功,即使有Google的支持——纵观现在电脑和手机上占有率最大的那几个系统,又有多少个是开源的呢?!

个人感觉,这两个问题不能混为一谈。为Android写程序的大多应该都是开源社区的开发者,而那些人最避讳的就是这种不开放,即使Google做的并不过分。

GPL和linux也都不是什么好鸟啊。

GPL对商业应用不大友好吧,所以android改用了apache license.

一个严重的错误:
Android在去年6月就推出了NDK(Native Development Kit),可以直接用C/C++来写高效应用程序。

至于系统,我倒不觉得封闭系统有什么不好。
iPhone系统是所有手机中系统最封闭的。一个OS、一种屏幕大小、一套API,结果是极大程度降低了开发者工作障碍,带来高质量应用的繁荣。

当然或许热爱开源社区的人希望得到一个完全开源——甚至连硬件也开源的系统,但不幸地推动整个商业运转的是普通用户,不是Geeker.

阮老师的文章总是这么深入浅出,一语惊醒梦中人啊,我之前是盲目看好 Android,经最近几篇文章点拨,终于看清形势

引用若昔难得的发言:

而你今天的这篇blog,读完以后的感想是,这并没有证明google做错了什么,恰恰相反,他说明的是开源社区在某些领域的商业模式上是如何的举步维艰。

这个要 re

个人认为还是liufeng这篇http://www.cnliufeng.com/blog/2010/02/linux-and-android.html更靠谱一些

http://linuxhaters.blogspot.com/2010/02/they-took-our-codes.html

Google 的做法并没有错

Linux 社区的人,除了 Linus 本人,其余的都有点 RMS 化了。

这说得什么玩意儿阿
另开个branch就不叫开源了?就作恶了?

关键是Android享用了别人的劳动成果,却借着灰色地带自己发财,却一直不对社区回馈。赢得了掌声,却不愿养育自己的“父母”了。很难评论google的对错,但是Linux社区在这件事情上做得没错(清理门户)。

@anonymous
你开branch没错,但是现在情形等于说徒弟把师傅的武功都学了,然后自立门户,而且,跟师傅对着干。

不同意, 硬件驱动本来就不是 Google 的, Google 没权利将不属於系统本身的东西也开源 (即使部分驱动是 Google 自己写的).

而承诺开源的部分确实做到开源了, Google 的做法是完全符合开源要求的.

我觉得google这种方式没什么,如果应用程序都开源了,那不是都免费了,毕竟有人想在这方面赚钱,如果你喜欢开源就自己公开好了,google这种方式给每个人选择的权利了,没什么不好。

说得好没道理啊
Nokia maemo倒是几乎是开源社区出品了,可是自己做的程序仍然也是不开源。开不开源和加中间层完全没关系
另外,android上只有极个别google自己的服务没开源,其它的部分开源很彻底了。

片面之詞,你以為你誰啊
你搞IT技術才幾年啊,吹的這么牛逼
垃圾,惡心

这事谈不上作恶,绕过GPL让厂商不用开放驱动代码,做法上的确也跟开源协议的要求不冲突,只是精神不够而已.不过作为一个商业公司这没什么错.但它依然用"开放"来标榜自己自然会令开源社区的人不满.

阮一峰,你不要不懂就在那边乱说,ok?

不敢苟同博主的观点,google既然是手机系统,就必须考虑到手机开发人员的需求,java正是可以满足大多数手机java开发人员的,毕竟手机不是桌面型的系统

google恶心的地方就在于:
标榜“开源”,却实质上助长了“闭源”
换句话来说,就是“开源”没有错,“闭源”也没有错,但是你挂羊头卖狗肉,就错了
其实像google map,google doc,google gmail这些东西,都是闭源的
话说google这些东西要卖钱而闭源这些没有错,
偏偏满世界标榜自己的贡献就错得离谱了
所以赞成linux驱逐android!!!

引用zgb的发言:

@anonymous
你开branch没错,但是现在情形等于说徒弟把师傅的武功都学了,然后自立门户,而且,跟师傅对着干。

有跟师傅对着干的意思么?难道徒弟就不能自己找到更好的出路了?非要一辈子跟着师傅屁股下面混??? google的现在的所作所为,要等几年以后,才可以看得到结果的 毕竟google目前为止做所作的事情,都是有自己的见解的,他这么做,估计也衡量过商业上的需求——难道google就不想让Android更好的发展么?

引用若昔难得的发言:
而你今天的这篇blog,读完以后的感想是,这并没有证明google做错了什么,恰恰相反,他说明的是开源社区在某些领域的商业模式上是如何的举步维艰。
确实,这句话说的对,google也想让Android可以获得更好、更快的发展,而且google做事向来也都是很有远见的,他今天这么做,必定是经过考虑的。

引用samrayone的发言:

阮老师的文章总是这么深入浅出,一语惊醒梦中人啊,我之前是盲目看好 Android,经最近几篇文章点拨,终于看清形势

。。。要有自己的见解。。。多搜索一下相关的内容,你就不会那么快就认同别人的观点了

引用zgb的发言:

关键是Android享用了别人的劳动成果,却借着灰色地带自己发财,却一直不对社区回馈。赢得了掌声,却不愿养育自己的“父母”了。很难评论google的对错,但是Linux社区在这件事情上做得没错(清理门户)。

android的code和linux系统本身的模式是不同的,文章上也都说的很清楚了,市场决定一切,硬件商的条件如果得不到满足,那这个系统就算再好,现在也不会看到有这么多硬件商加入

"这就是Android干的事情:它修改了Kernel,但是又不提供修改的细节,自己搞了一个封闭的系统。说得难听一点,它利用了开源社区,要求开源社区为它做贡献,却又不愿提供回报。"
阮先生,您貌似并不熟悉Android对kernel做了什么,而且遗憾的是也没有读懂Greg K.H.那篇blog。。。问题不是android不提供修改细节,相反,android提供了所有细节(源码)。不过“a number of kernel developers reviewed the code and pointed out places that needed to be cleaned up, and changed, in order for it to be accepted”,但google并没有修改之意。
google不修改的结果就是大量为android平台而写的驱动因为与android代码绑定而无法进入主线。这是Greg干掉android代码(注意,是代码)的根本原因。

相信进行过kernel开发的工程师都是很容易明白这些的。希望阮先生提高技术水平和英语水平。希望各位观众在接受信息时都保持带着怀疑的态度,不偏听。

这种模式非常好,

这就是我说的凭什么一些没什么本事的人可以占有大量社会资源?而有技术的人却要为那些没本事的人服务拿取微薄的薪水和干完就被踢走,而自己干出来的东西却持续不断的为那些没有本事的人创造大量财富?


其实我一直在想一个问题

很多人没有什么专业知识,做的也不是技术活,学历很高,但是都是学镀金学历或者和创造个人成就不相关的学历,

但是他却可以混的很好,甚至能量很大

比如仰融,任正非之类,马花腾之流,CCP之流

任正非一个退伍军人,能有什么本事?在他公司任何专业领域他可能都是菜鸟,不比一个外行强,最多他熟悉这个领域某些规范和需求

我不相信一个领导就靠组织关系就能扭转乾坤,既能自己混的很好,也能把那些有能力的人管起来,好象没有人管有能力的人都必须天生是奴才

人的价值难道必须以奴才和剥削的形成才能在那些什么都不会的人管理下发挥,其中大部分利润被别人剥削去?

为什么那些被剥削的跳楼的人付出的那么多,却混的很惨

他们公司还有很多人

还有什么郭台鸣之类,他做的事就很有技术含量?我不相信这些人的成功是因为某种天才


我相信有某种不平等和维护这种不平等的制度在发挥作用

我很认可开源

凭什么大公司可以花一点钱把别人开发出的产品不断卖高价,而开发的人只能拿微薄的工资,产品开发出来有时可以卖很多年,而且大公司越强他越有能力垄断,加上知识产权,专利,资金,个人根本没能力抵抗,1个人你只能开发很小的代码,你精力不够,但是大公司可以随便雇佣1群人开发一堆代码,这种不平等继续使后来的人只能参与大公司,这样不平等越来越强

而开源就不一样

存在一个公共的知识和产权体系,产品是免费的,大公司价格太高,往往有一个免费的产品出来,能基本上完成大公司产品的基本功能,虽然不好,但是大公司就失去了最主要的收入来源,长期竞争下去,大公司必然无法持续下去

这样的社会使机会更多给那些真正有能力,创造财富的人,而不是一些没什么本事,从政,限制这限制那,限制你获取消息,限制你竞争,限制你公平,限制你有选择,限制你知情权的人

划定各种人为门槛,诸如注册资本金,从业年限,工作年限,实际年龄,学历(学历本身机会也不平等,在很多地方专科甚至比北京本科都难考,各种各样的镀金证书,海外留学不是人人都有机会)

这样机会不是被少数人持续垄断

而有技术的人完全可以在公共知识产权上开发自己的产品,等于无数的人你也可以雇佣了,大公司的不平等无法自我加强和不断持续

我就是不服气一些人什么都不会却管理着一群人和资源,
凭什么别人要被这些什么都不会的人管理着?

因为他们人脉多,资源多?

别说你什么视野高,点子好,善于管理

我相信如果是真正的知识,肯定可以开一门这样的课,让别的人也学会这些技术

说明这些不能公开学的东西其实就是潜规则,少数人钻了空子,却没有受到惩罚


既然这样,为什么没有一门人脉课鼓励拉帮结派?我相信就是普通群众组织起来一样很厉害

凭什么这些人可以拉帮结派?这就是社会上很多没本事但是却活的很滋润的原因

他就是凭借这些资源和人力继续加强他的垄断

使其他人永远没机会

很多人人脉多,所以机会多

这些人都有原罪

他们起来了就制定规则,不允许别人也按照他们发家的来
严重支持开源

不支持开源的就踢出去


引用nobody的发言:
您貌似并不熟悉Android对kernel做了什么,而且遗憾的是也没有读懂Greg K.H.那篇blog。。。问题不是android不提供修改细节,相反,android提供了所有细节(源码)。信息时都保持带着怀疑的态度,不偏听。
至少我没看到他的所有源码,诸如他的专有虚拟机 我只看到他的2进制版本和打包后的clsss

楼主又在乱喷了

symbian塞班也宣布开源了 不知道楼主怎么看?

对楼主这个人我不认识,更从未听说。但是看了你文章,感觉你完全犯了“盲从症”。你以为只要是技术大牛的话,就要绝对跟从、服从、随从,而不是用自己的大脑冷静的分析这个复杂的世界和这件事情。从这个事件、你的文章和观点,都只是再次印证了这样一个事实:技术人员都是技术上的大牛,同时又是市场上的幼儿园小朋友,你们根本不懂市场、经济、竞争,但是喜欢对那些生活在市场上的公司胡说八道。如果从开源中赚取利益、金钱,是很多公司都在研究的问题,开源是一个金矿就应该让人赚钱。Google公司的作法,或者说是商业模式,找到了一条从开源金矿中赚钱的好方法,即没有违背GPL,又让很多需要利益、利润的公司从中受益,巧妙的把开源与商业市场联系、结合在一起,实为神来之笔。至于Linux Kernel的维护者Greg Kroah-Hartman宣布,将Android 代码从 Linux kernel 代码库中删除,我认为这是他犯的严重的低级错误,这是一个弱智行为,他说的原因仔细分析并不成立,是胡言乱语,既然是为Android写的代码为什么一定要加入linux中去,他完全没有理解google这种分层折中的中庸智慧。android遵守的只是“GPL协议”,而不是“GPL+100%符合linux要求”的协议,要求为Android写的代码必须同时被linux所使用是完全没有理由的。但是android本身确实是“GPS+100%linux要求”的产物,这种分层的隔离、嫁接实在是巧妙,为开源向商业应用打开了一条道路,可惜的是弱智的Greg Kroah-Hartman只会编写代码,没有看到这是多么美好的道路。楼主也同样。

@11111343
如果你指的是dalvik的话,源码在这里:
http://android.git.kernel.org/?p=platform/dalvik.git;a=summary

实际上android的开源部分是相当完整的,你完全可以编译出自己的可用系统出来。所缺少的部分是Google相关应用(闭源)和设备驱动。

诚然,少了Google相关应用后,Android系统的吸引力确实要下降很多,但毕竟仍然是一个可用的系统。

当时着实闹腾了一阵的cyanogen mod终止信事件也是争对那些闭源部分(而非一些人传扬的google违反自己的开源协议)。后来cyanogen采取了一种绕行的办法:
自己的rom完全采用改进后的开源版本制作(由此可见开源版本确实是完整的)。驱动和闭源程序,通过安装HTC提供的官方rom得到。cyanogen rom中提供了备份恢复代码,在安装时将这些闭源部分备份下来(这是合法的动作),安装完成后恢复。

说实话,就楼主这水平还是不要乱喷的好。
水平差也就罢了,这种人云亦云的作风是最可怕的,发文前好歹先找android代码看一下也好,还userspace driver呢。

文章内容完全是错的 作者确实是个外行啊

开源的精神就一定符合商业利益吗?符合商业化运作的需求吗?我看未必。Linux的开源精神令人感慨,可是为什么linux商业化进程如此失败呢?这根本不是时间上的问题,linux也发展了这么多年了,在占有率上面根本没什么突破性的进展。这只能说明linux的这个开源模式——是不符合商业化运作的需要的。

所以说Android之所以这样,肯定是权衡了多方面的利弊的。看看iPhone,人家照样不开源,东西一样卖得很好。

对程序一窃不通,但看到引起这么大的争论,绝对是一篇好文。从字面感觉,还是开源的好,人多力量大嘛。但如果利用别人做好的东西去赚自己的钱,有点不齿。

支持RMS,反对楼主

阮先生,你看看你的不严谨和想当然误导了多少围观群众啊!替你感到惭愧!虽然这是你的个人blog,但是既然是技术评论的文章,至少是应该有一个科学的态度的。希望阮先生早日醒悟。

如果您太了解这个题目的话
=============
关于android,可参看:www.android.com(看platform部分,请点击partners)
Greg K.H.的blog,阮先生给的连接中有其连接,也直接放到这里便于各位参考:http://www.kroah.com/log/linux/android-kernel-problems.html

幸亏你还贴了一个相反的观点,不然真的容易迷惑了。对一个技术不精通的人来说。

实然和应然间的距离,真的不是那么容易把握啊~

阮同学说的可能对,可能错,大家都可以拿出自己的论点论据来分析,宽容点吧,打倒别人才能展现唯一的真理?答案是否定的

引用nobody的发言:
问题不是android不提供修改细节,相反,android提供了所有细节(源码)。不过“a number of kernel developers reviewed the code and pointed out places that needed to be cleaned up, and changed, in order for it to be accepted”,但google并没有修改之意。google不修改的结果就是大量为android平台而写的驱动因为与android代码绑定而无法进入主线。这是Greg干掉android代码(注意,是代码)的根本原因。

终于看到一个懂的评论了,博主整片文章的立足点就是这样不存在的吧,还洋洋洒洒这么一篇文章,不知误导了多少人?
android对kernel的修改的细节是全部提供的(开源)。

开放就一定好,封闭就一定不好吗?我看苹果的封闭 iPhone (开放 App 平台)就挺好。参看我的博客:

封闭系统称王?未来是苹果的天下吗?
http://blog.sina.com.cn/s/blog_5af583c20100gpzt.html

作为一名程序员,我认为Google这做法,无可口非..如果盲目开源,只会灭杀了Android...如果Android用GLP的话,那基于他的程序或软件,都要开源...这是不可能的! 就好比用java(假设是GLP) 写的系统或软件都要开源一样,是不能..如果真用GLP,SUN早挂了..

一直在看阮博。。有关人文的都看得很叹。。。有关程序的都看得很汗。。。一直跳过。。。
弱弱地问一句,阮兄有兴趣写科普文么。。。给高二之后就没看过理工书籍的人看。。
不想看大部头教科书。。不求自己能写代码。。但想要明白你在说些什么。。

楼主的文章充满了对Open Source这个概念的错误理解和不切实际的幻想。Open Source是一个注册商标,持有人是Open Source Initiative,它授权这个商标给所有它认证符合这10条定义的软件license(www.opensource.org/docs/definition.php). 它和封闭根本不是反义词,它的反义词是一般采用EULA授权的proprietary software.

开源软件的社区管理方式,许可证,目的千差万别,不是只有Linux,GNU,Apache Software才叫开源,什么叫做封闭?一家公司对产品说了算就叫封闭了么?那mysql封闭么?JBoss, Spring呢?Xen呢?Mozilla Firefox呢?他们哪一个是在社区决定自己的产品的?他们不叫开源软件么?Android完全符合对Open Source的定义,它的做法也可以说是兼顾自己的商业利益以及社区的利益最好选择,Google在法在理上没有做错任何事,Android上它也没藏着掖着任何东西。Google开源Android和使用了GPL的kernel也没有任何必然联系,GPL的源码要求对其的修改必须以GPL开源(也没有要求必须贡献回原社区),Android是Apache License,和kernel的GPLv2根本就不兼容。

GNU和RMS对自由软件的理想是他们自己的事情,何况RMS自己也不反对依靠软件和服务赚钱,他只是反对过于贪婪的方式比如反对software patent以及用户付钱就有权得到源代码。把开源软件等同于道德先锋、理想主义和共产主义革命的同学们,请再多了解一些这个eco system。没有商业公司出于自己商业利益(而不是什么理想主义)的支持,开源软件根本不会有今天。我自己曾经做过几年的开源软件,是我的雇主发工资给我做,我参与的项目,90%开发人员都是和我一样的情况,我们的项目如今被Android使用,是核心部分之一,我为此深感自豪,因为这就是我们当初采用Apache License将其开源的目的。没有这些商业公司,Linux也好,Firefox也好,Eclipse也好,都只会是玩具。商业公司合理合法赚钱绝大多数都没有道德问题,糟蹋股东的钱有道德问题的几率倒是大的多得多。

再说到手机操作系统开源,真正有意义的是对于mobile internet这个eco system的参与者尤其是手机制造商,对于最终用户根本无关紧要。以是否被Linux Kernel接纳来判断Android是否会成功,简直不可理喻...iPhone是完全的proprietary产物,是现在和可预见的将来最火热的手机操作系统;Nokia的symbian是昔日霸主,更不是靠开源。

以上评论改了改,重新发了: http://blog.csdn.net/paulex/archive/2010/02/07/5295570.aspx

个人觉得,linux社区的作法并没有错,而google的做法也没有错,不是在和稀泥,而是这真的是一种他们互相行事的做法,那个负责人不是说了吗?他自己也在用g1,只是android的代码就不需要生存在linux的社区底下,我想android和linux的关系就有点像linux和unix的关系,linux同样可以被其它厂商拿来该该,然后以其它许可证的形式卖钱。
google首先是一家公司,而他需要做到的不作恶,面向的是社会大众,而不只是技术社区。
阮兄的博客一直看,挺好的,大家的讨论氛围也还不错。

这个事情只能说,“不主动做坏事”和“不主动做好事”,是有很大区别的。

希望博主能够意识到:创造未来 和 构建明天 的区别。
我们对Android和Google都有信任,希望他能够带来更好的明天,但是当下的矛盾是现实的。硬件级别的开源依然只是浮云。在这种前提下,开源和闭源的混合并不一定就是博主所设想的那么“不可饶恕”,毕竟对于用户而言,易于使用才是一切的根本。
众多的开源软件都有Win32下运行的发行版,难道这也是给MS免费打工吗?难道也在伤害开源的未来吗?

引用RedNax的发言:

至于系统,我倒不觉得封闭系统有什么不好。
iPhone系统是所有手机中系统最封闭的。一个OS、一种屏幕大小、一套API,结果是极大程度降低了开发者工作障碍,带来高质量应用的繁荣。

赞同RedNax的观点,特别在移动设备领域,硬件种类、型号繁多,差异较大,使用开源系统的话,我想绝大部分的厂商都会对系统进行修改,添加自己的特色功能,能否保证应用接口的兼容性,是攸关应用程序的丰富程度,继而影响系统的生命力,个人还是比较看好像iphone这样的封闭式系统。

各位,我有寫過 Android 應用,想問一問樓主︰你了解 Android 應用嗎?使用 java 的話,我的應用只要編譯一次,就能在所有不同 CPU 架構的 Android 平台上運行,而且能保有自己的源碼,這樣的事好難理解嗎?

事情是這樣的︰ Android 預留一個 middle layer, 基於 Java 的應用就能跑在上面,而因為想把應用分成不同 user space,他們對 kernel 做了修改。這讓 Linux 開發社群很為難。Android 對 user space 子系統的修改,與現行 kernel 的 user space 子系統不相容,不能共存,所以才把 Android 的碼給併出主源碼樹。只要 Google 找到方法,能讓 Android 的碼與 Linux kernel 相容,Android 的碼是可以重進 Linux kernel 碼樹的。

簡而言之,這事件主旨根本是編程方法問題,而不是意識形態之爭,或者甚麼「開源」不「開源」,請別亂寫吧

首先,我对操作系统重新编译即可实现移植性表示怀疑,实现平台无关性永远是一个美好的梦想,但从没完全实现。应用层的程序可以实现移植是因为OS封装了硬件,因此OS是高度硬件相关的。在嵌入式开发中,硬件更加多样化,将用于嵌入式的Linux版本用于桌面版,实在意义不大。将android移出主代码树,只是技术原因。只要android开源主旨不变,依然前途无量。

读过几年三流学校,还学到文科,现在知道错了。
这年头玩个手机,看看别人的评论都看不懂,头大,唉。
谁能给总结一下这些人到底在说什么?

@Joshua,如果你是为了用好手机的话,其实这些话都与你无关。简单的说,就是阮一峰认为Android某些部分不是开源的,可能会使得它的前景不好,也对开源社区不好;而其他人的看法则是相反的。


1、android被驱逐出linux的kennel,这是事实,我们要关注的是为什么?google对linux不好吗?实际上好得很,又有名气的支持,又有金钱上的支持,还有实际的代码贡献,有什么不好?那么为什么这帮linuxer会那么义无反顾的将这个号称“不作恶”的家伙赶出去?
2、google在linux上的问题,从阮文的描述来看,很简单,就是“鼓励了分裂”,这才是问题的关键。
3、也就是说,你google如果赞成linux的共享的精神,那么你就不应该在android的内核里为不开源的驱动打开一个后门,这个问题会导致什么呢?
4、厂商不开源,看上去是自己的选择,但是实际上是开源运动的倒退,因为你自己是建立在开源的基础上,你拿过去,改了改,然后变成闭源的了,那么原来的开源作者怎么办?GPL的精神,就在于群策群力,比如你原来写了一个hardware的driver,你创建了一个很好的框架,但是你的精力和经历有限,所以可能并不完美,所以你贡献出来,后来者可能借鉴了你的东西,并在更广大的范围内测试并提出了解决的方案,于是原来的作者也能够得利。这才是Open Source的精神所在,也就是说,每一个人都能对source给出自己的贡献
5、就好像作者你自己,你写出了原来的core lib,用在android上,难道你不关心他们是不是对你原来的code进行了改进吗?
6、所以,google本身遵守法纪是不够的,linuxer们气愤的是其创造了一个“闭源”的环境,从而导致一堆的硬件厂商只从开源社区吸奶,却根本不回馈社区,这样还怎么继续提高?还怎么有人有兴趣开源?
7、好,你也许会争辩说我有不开源的自由,那当然好,不过你为什么要用linux?这就是全世界唯一一个用GPL来要求的OS,你既然不赞成其理想,那就不要用linux好了,你google不是很厉害吗?想保护厂商的利益吗?那么滚去自己开发一个OS不好吗?像ms自己怎么艹都行,或者像apple强奸了freeBSD也可以啊

最终的宗旨不一样罢了。、
就我自己的理解,我觉得开源的目的是为世界计算机可以更完美而努力,重点并没有放到(金钱的)利益最大化中。
而商人追求的是利益最大化的之后才是如何去让世界计算机可以更完美。重点是谋利。所以是保护自己更重要。呵呵。


我是更希望android是完全遵守GPL的。

我不希望android的驱动/软件在离开了android的其他linux发行版中就无法使用了。

因为真的好不容易有了一个可以看见有实力的企业在领跑。
请勿要让尊崇开源精神的群众像玻璃窗后面的苍蝇一样“有前途,没希望”!呵呵。

Android可以繼續不完全開源,
但是我們可以要求Google拿一筆足夠回饋Linux的錢回饋Linux.

Greg K.H.把Android踢出去也是无可厚非的,
那确实不只是一个纯粹的代码不相容问题。
Greg K.H.没有做错,大家不要说他不是。

我想,大多数Linuxer并不是出于商业(或就业)考虑而热爱这个平台的。这与Linux在商业上是否成功无关,GPL本来就不是站在商业角度而提出的。

所以,Android不使用GPL是可以理解的。
Google在使用Linux时也没违反GPL,
他只是象很多其他商业公司那样,在尝试开辟一条能让开源赚钱的道路。如果这样Google能赚钱,然后又能分点所赚的钱给开源社区来支持开源项目的开发,也未尝不是一件好事。
大家还是少点打击,多点谅解吧。

引用XY的发言:
纵观现在电脑和手机上占有率最大的那几个系统,又有多少个是开源的呢?!

你可能没有看完,后边说的很清楚.

我们相信未来是开源的世界.
包括手机系统,NOKIA也已经公布.将要开源SB系统.
从这里我们可以看出,开始确实是大势所趋.
是未来.

别吵了
android确实java 虚拟机 那层并没有开源 (加密,解密)

你如果想开源 那我只能说 除非你想你发布出去的应用也开源

楼主做过Kernel开发吗,毛都不懂一根,也在这里乱喷。

楼主既不是搞技术的,可以说不真正知晓android的细节,也不是搞商业的,对于google的商业策略也不见得真的搞懂就在这里对google大家讨伐,真是太冲动了吧。其实文章中有多少你自己的观点?你不是用国外某作者的观点就是用台湾人的观点,你究竟弄清楚了其中的哪部分?开源就是好,闭源就是恶?找你这么说apple就是最邪恶的敌人了?怎么一个这么喜欢写博的人的观点这么幼稚?!

时机还不成熟,开源和贡献是迟早的事,计较那么多,只是考虑个人利益太多,成功才是硬道理,成功以后,希望Google开源,一个成熟的系统就不会有山寨了,那时才是一枝独秀,谢谢!

中国应用liunx系统来修正这个商业错误。不要在骗群众咯................
中国站出来,做自己的嘛?
我觉的m8就应用liunx,不能看见有未来的民营企业被压垮。。。。。。。。。。

灰常不同意作者的意见。开源毕竟是很小一部分,没有商业利益,就算开源也会死掉,看看SUN,几乎所有的代码都开源了,甚至包括操作系统,从来没有见过任何公司像这样,但是结果呢,就是被oracle收购了,楼主知道被收购后有多少开源项目被砍掉了吗?有多少开源的著名大拿离开了吗?被oracle砍掉的开源项目,有又多少没有人维护而逐渐消失吗?
相对来说讽刺的是,市值排在前几名的却是苹果,oracle,微软, 这类的公司。。。。

桌面linux上的驱动就都开源了么?
当然不是。都开源了厂商还有什么技术优势可言?
这种事情本来就是被linux社区睁一只眼闭一只眼默默认可的事情,为什么要求google去强迫厂商开源?
而且这个问题本身,前面也有人说了,承诺开源的,google都开源了;不过为了保护厂商的利益,开了一些通道,允许厂商闭源。
这就好像有人在家穿衣服 有人在家裸奔一样 你自己喜欢在家裸奔,总不能要求别人到了你家就都裸奔吧?

Google确实是不做恶,相对于整天耍流氓的百度就不用说了吧?管它开不开源,用户说好就是好,开源代表什么?我不懂,现在是盈利的社会,Google的这种行为没有伤害到它的用户,雇员,开发者。也许它收集用户信息,在现在,他不收集,移动联通各个电信商都会收集,还有一个问题,为什么Linux如此开源,以前MOTO E6几乎一个应用软件都没有?为什么诺基亚 N900的QQ开发起来会收阻?难道这就是“开源”的力量?

如果Google开源,那么就不能得到手机厂商的支持,光靠程序员?程序员能造手机么,程序员不是HTC、MOTO,只有使用Android系统的手机多了,才能吸引程序员去开发软件。

支持楼主,这里的反对者看来似乎并不关心GPL协议,而只在那里谈论商业价值之类的。可惜你这些所谓的商业成功还是建立在linux的地基之上。linux影响越来越大是不争的事实,所以不必担心linux没有占据市场。它是自由开放的一面旗帜,正是因为有它,才让人们看到知识共享的一丝希望。如果没有linux存在,你能够得到操作系统的核心代码?了解驱动程序的本质?如果没有它,大部分的linux高手应该还在闭源的无尽黑暗中苦苦等待吧。
因此为保证linux开放性本质必需将android剔除出去,以防一粒老鼠屎坏了一锅汤。

引用KingsamChen的发言:

个人感觉,这两个问题不能混为一谈。为Android写程序的大多应该都是开源社区的开发者,而那些人最避讳的就是这种不开放,即使Google做的并不过分。

google已经做得很好了。google也是身不由己,毕竟绝竟绝大部分硬件厂商是不会公布驱动的。
如果要让adroid绝对开源,首先得使硬件厂商开源,但是这在当下现实吗?
我觉得这样的做法已经很进步了,毕竟我们大多数只需要上层开源。驱动那些只需要了解接口就行了。有一个kernel的分支也不是一件很坏的事。以后源代码可能就会分为linux和android两派了。

引用EA的发言:

为什么Linux如此开源,以前MOTO E6几乎一个应用软件都没有?为什么诺基亚 N900的QQ开发起来会收阻?难道这就是“开源”的力量?

小马当年也想开发linux QQ的,但是当时的市场分析师投了反对票,归根结底还商业原因,用linux的用户实在太少!
后来TENCENT还是装模作样的搞了一个QQ FOR LINUX,可是结果呢?连手机QQ都比它强10倍!好像已经两年了,那个项目早就死掉了!

如果国内的盗版windows都死掉了,情况会怎样?所以说这也是微软对盗版睁一只眼闭一只眼的原因!

我想中国开源就真的好起来了,真正的QQ FOR linux也绝对可以诞生。

对于 update one,读后认为 liufeng 是个机会主义者。

支持楼主的观点,欢迎访问androideye.com关注Android开源世界

那就一起来支持Ubuntu Mobile吧

支持开源,就像电脑,一个东西可以装98 XP 还能装Liunx Ios 手机为什么不行,
厂商就是为了销量
新系统一出来马上都得买新手机,
相信第一个开放硬件源码的厂商肯定火爆

另外搞不懂Java难道比C还好么?

做应用的话,Java的确比C爽,做底层就不用比较了。
驱动还是在linux内核里,但没有哪个厂家会傻到把移植了的内核源码公开。
所谓的中间层是HAL,用来连接本地框架和驱动,不过HAL是虚的,开源了是无所谓的,这是android移植该做的。
个人看来,不管是哪个产业的硬件厂商,只有极少数愿意公开驱动。硬件开源并不是大多芯片厂商愿意参与的。
android这样的架构为了配合目前最可行的商业模式的。

“这段话解释了,为什么Android的应用程序,都必须用Java语言开发。因为不这样做的话,没法让程序做到硬件无关。”

在JAVA虚拟机上用JAVA开发应用程序能够做到操作系统无关,而不仅是硬件无关。所以能够吸引更多的开发商来开发推广应用。这就是JAVA的生命力。
这就是GOOGLE对付微软的策略:集众人的智慧堵截微软。而GOOGLE将要取代LINUX KENEL小组来自己单独维护发展一个LINUX分支:android。Android将全力支持JAVA开发,并运用java虚拟机的特长来得到广泛的开发者支持。这些java开发者的应用软件可以是私有的,是可赢利的。
google除了维护发展这个Linux分支android之外,还会结合自己的网站来在Java上发展手机应用;这才是隐藏的战略。可想而知,在这个领域,google将是先行者和最大受益者。
不过我估计,微软很快也会表示支持android上和java上的开发应用。进入敌人的内部才是最好的进攻方式。

看着沵们的这些东西让我不知道该买什么系统的手机了 ..
本来Android的系统特别的吸引我,而且手机的价钱都不是特别的高

可是 ..到底是两者哪个好呢 ..

市场上99%的用户是看不懂这些也永远看不到这些的……

iPhone党飘过
其实iOS太封闭了也不好

Google或许真有难言之隐,但这种做法就不对,他是淌浑水来的~

刚开始认识这个软件的时候还很好奇,怎么是开源的呢,这必定是个好的方案,但因他而起就会产生很多问题,今天才算明白了

最新消息:已经有一个新的项目发起了,旨在重新将andriod linux kernel合并入linux kernel树。事实上,google andriod的工程师一直期待能将代码并入linux kernel树,linus说这可能需要几年时间,但现在开源社区已经有人发起了这个合并项目。事实上andriod 3.0 的内核是2.6.x,而linux最新的稳定版内核都到3.0了,andriod自然不希望和上游拉开距离,渴望合并。而上游也不希望andriod这个分支游离在外,出现重复造轮子,一些andriod-specific feature无法被上游利用,白白浪费了。google是不是作恶,我们拭目以待吧。

建议博主把这篇博文删了吧, 严重的误人子弟啊。

谷歌这样做并不全是坏处,也有很多优势,另外它毕竟是一个商业公司,要考虑盈利问题

如果google doc,google gmail开源的话,谁敢用???用户隐私怎么保证。
google这么做是为用户考虑。你不能看到闭源就炸毛了!

删除android分支是因为无法合并,而无法合并的原因并不是
“这就是Android干的事情:它修改了Kernel,但是又不提供修改的细节,自己搞了一个封闭的系统。说得难听一点,它利用了开源社区,要求开源社区为它做贡献,却又不愿提供回报。”
而是因为android使用了个叫"suspend blockers" or "wakelocks"的电源管理方法,为了让android设备节省电量。
这是多么巨大的错误啊,以至于博主得出了“封闭”,“要求开源社区为它做贡献,却又不愿提供回报“的结论,还被2012年8月出版《Android底层接口与驱动开发技术详解》收录,杯具的是我还买了这本书,也是我在这写回复的最大原因。

英文原文可以看:
http://kernelnewbies.org/Linux_3.5#head-e04ea6fe9005ea057124123d7834624cd445e124
中的7Android-style opportunistic suspend

1、开源的目的是什么?是为了更好的发展。
2、Google绝对是想让Android发展的更好的团体,没有之一。
3、谷歌不傻,并且谷歌不只有程序员。

Google这个办法太好了 绕过GPL实在太高明 ASL BSD协议多友善啊

Linux也有很多闭源软件 为什么要开源 改的GPL的软件开源是可以的 100%自己写的东西也要开源么 DEEPIN把自己写的东西开源有点不理智

如果要用开源的东西 分开成多部件 改的开源 自己写的不开源

我一直认为开源的精神是:抵制那些完全商业化,恶意垄断不思进取的行为,让更多人可以更容易的自由免费地去获取,学习,使用那些自己想要的软件。毕竟大家都不是圣人,大家也都要吃饭养家糊口,能够获得些当然是大多数更为喜闻乐见的。如果开源是将源码封闭起来,谁做了修改都得公布,那也无疑,像传染病一样,开源软件将没有任何财富可言,长此以往,有多少人思想境界这么高?这么乐意做义务劳动?长此以往肯定是诸多不利的,这种开源不过是放任自由,像断了线的风筝,洒了毒的双刃剑。开源理应是一个可持续发展为人类软件谋求未来的更高理想的事业,虽然对安卓并不是特别了解,但也许可以看做是开源的一次尝试。

UPDATE ONE
liufeng针对此文,写了一篇很好的评论,推荐阅读。
原地址已经失效,找到篇转载的《关于 Linux “踢出” Android》
http://www.cnblogs.com/sinxiao/archive/2010/03/06/2110792.html

@Moses:

这只能说明 Google 利用了开源协议的漏洞,Google 的这种作法,其实是违背了开源社区的精神的。Google 这种作法就是典型的过河拆桥。

今天日期是2017.9.13,如今又是怎样的情况呢?雷军的MIX2听说为了达到18:9的全面屏设计,亲自带MIX2去了Google请求Android的认证!未来中国市场Android机的创新岂不都得让Google点头才行。。。

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接