[旧闻]Linux 开发者把安卓踢出去了,利用了开源社区却不回报

Will2018-avatar

Will2018

2021-06-01T02:49:04+00:00

来自“阮一峰的网络日志”,2010年的旧闻:[url=http://www.ruanyifeng.com/blog/2010/02/open_android_or_not.html]Android,开源还是封闭?[/url]


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

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

其次,Google对Android采用了一种全面霸权式的管理,完全不是其他开源软件的开发方式,一切都由Google说了算,很多地方是黑箱,外界不得而知。"[/quote]没有想到,仅仅过了两天,担忧就变成了现实。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发行版不一样:

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

Google只用了kernel,别的东西都没用。"[/quote]然后,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编程的真正原因,到底是什么?

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

"Linux kernel 的版权是 GPL。

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

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

这段话的意思是说,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清楚地说出了自己的不满。

[quote]"...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的分支,大量的开发者都依赖那个分支。"[/quote]这就是Android干的事情:它修改了Kernel,但是又不提供修改的细节,自己搞了一个封闭的系统。说得难听一点,它利用了开源社区,要求开源社区为它做贡献,却又不愿提供回报。

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

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

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

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

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

[quote]"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程序员的加入,什么也不会发生。"[/quote]Android必须变成一个真正的开源系统。如果像现在这样封闭下去,就会被开源社区抛弃,就一定不会成功,即使有Google的支持。

我读完这一篇,感觉2010年安卓对linux所做的事情,和现在鸿蒙对安卓做的有点像?现在很多人喊鸿蒙套皮,当年的安卓不也在套皮嘛。套不套皮重要么,能够用,好用,合法合理合情,那我们支持不就完了。多给鸿蒙一点时间,我希望他能成功!
Will2018-avatar

Will2018

我读完这一篇,感觉2010年安卓对linux所做的事情,和现在鸿蒙对安卓做的有点像?现在很多人喊鸿蒙套皮,当年的安卓不也在套皮嘛。套不套皮重要么,能够用,好用,合法合理合情,那我们支持不就完了。多给鸿蒙一点时间,我希望他能成功!
Will2018-avatar

Will2018

当年的部分评论

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

----

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

SaFKa

很简单一个问题 谷歌不搞HAL把GPL协议屏蔽了 那些硬件厂商根本不会参与Android的生态
Leukron-avatar

Leukron

[img]http://img.nga.178.com/attachments/mon_201209/14/-47218_5052bc4cc6331.png[/img]Google都这么干多少年了,嘴上的互联网是开放自由的,实际干的事是互联网是我家后花园。
Element06-avatar

Element06

[quote][pid=522328725,27085887,1]Reply[/pid] Post by [uid=60186975]队友快变强[/uid] (2021-06-07 10:54):

我读完这一篇,感觉2010年安卓对linux所做的事情,和现在鸿蒙对安卓做的有点像?现在很多人喊鸿蒙套皮,当年的安卓不也在套皮嘛。套不套皮重要么,能够用,好用,合法合理合情,那我们支持不就完了。多给鸿蒙一点时间,我希望他能成功![/quote]说什么呢,华为在Linux Kernel5.8里是代码修改贡献最多的厂家。你以为都像谷歌那样无耻?
[img]https://img.nga.178.com/attachments/mon_202106/07/c4Q2o-9wzwK20T1kSf5-a9.jpg[/img]
coookiie-avatar

coookiie

这件事没过1年就又把Android给请回来了.

现在做的Device Tree也是为了移动设备的.

你把HAL踢走, 不影响人家继续维护自己的分支.

之所以要Fxxk NVIDIA, 也是因为这个, 但是NVIDIA绝不鸟你....
xDIANAx-avatar

xDIANAx

[quote][pid=522338179,27085887,1]Reply[/pid] Post by [uid=15426219]zj19951223[/uid] (2021-06-07 11:19):
很简单一个问题 谷歌不搞HAL把GPL协议屏蔽了 那些硬件厂商根本不会参与Android的生态[/quote]实际上Linux目前的主要贡献者是那些大公司。
coookiie-avatar

coookiie

Reply to [pid=522328725,27085887,1]Reply[/pid] Post by [uid=60186975]队友快变强[/uid] (2021-06-07 10:54)

Android不是Linux套皮.

这两者可以说是毫无关系, 只是借用Linux内核而已.
Android整个生态和Linux是完全隔离的.

另外, 套皮不是贬义词, 请停止污名化套皮.
coookiie-avatar

coookiie

Reply to [pid=522339655,27085887,1]Reply[/pid] Post by [uid=1309608]iCE_Kimi[/uid] (2021-06-07 11:24)

这不是都在回报社区吗?

说的好像Google不在列一样.

具体行数不能直接比较, 因为每次Intel发新CPU, 行数都会暴涨.
Bones214_-avatar

Bones214_

冷知识:linux把安卓踢掉没多久就加回来了
Mazen-avatar

Mazen

你这么说,意思就是鸿蒙也是在Android的基础上,切换一个分之开发的?
Arthur299792-avatar

Arthur299792

安卓是谷歌收购的
google map,google doc,google gmail是人家商业公司的产品,你觉得微软会把windows产品或者华为会把通信和服务器产品无私奉献出去吗?
burntchicken-avatar

burntchicken

老面孔回来了啊,可惜青春哥和供应链哥再也回不来了
《用猴子也能懂的方式说说鸿蒙》 - 艾泽拉斯国家地理论坛,地址:[url]http://ngabbs.com/read.php?tid=27084242[/url] (分享自NGA安卓客户端开源版)
Arthur299792-avatar

Arthur299792

Reply to [pid=522339655,27085887,1]Reply[/pid] Post by [uid=1309608]iCE_Kimi[/uid] (2021-06-07 11:24)这个看其他人讨论过,华为还做设备,提交高主要是给鲲鹏写驱动
Milo Sanchez-avatar

Milo Sanchez

既然这样的话,那还不如去支持iPhone呢,至少能在软件商店里多卖一点钱,而且乔布斯看上去也更酷一点。

伤害不大,侮辱性极强[s:ac:哭笑]
Hadez-avatar

Hadez

[quote][pid=522339655,27085887,1]Reply[/pid] Post by [uid=1309608]iCE_Kimi[/uid] (2021-06-07 11:24):

说什么呢,华为在Linux Kernel5.8里是代码修改贡献最多的厂家。你以为都像谷歌那样无耻?
[img]https://img.nga.178.com/attachments/mon_202106/07/c4Q2o-9wzwK20T1kSf5-a9.jpg[/img][/quote]可是谷歌也有贡献啊
每家厂商的需求不一样
总不能说贡献多的就可以踩贡献低的吧
华为做了很多嵌入式系统,比如说网络通信设备,和内核接触比较多,最近又是通信系统大力扩张的时候,他提交代码比别人多不是很正常
谷歌的安卓已经趋于稳定了,正在推的新系统又不是Linux内核,提交的少也很自然

另外,用行数来衡量源代码本来就是只有参考意义
就这张图也不用跟个圣经是的到处转载吧。。

而且楼主这篇旧闻也是有历史局限的
如果安卓手机厂商都要把驱动合并到Linux内核里面
那现在怕已经是混乱不堪的局面了
君不见个大Linux发行版包管理器和软件安装命令都不一样?
想当一大部分软件完全依赖于源代码编译是Linux的常规模式

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

看这段,这就是程序员的奇思妙想了
如果真的搞出这种分别编译却不能保证兼容的局面
智能手机怕也是和当年群魔乱舞的山寨机差不多
而且连个大山寨机到生涯末期都不约而的选择了内置java来争取更多的开发者和用户
到了智能时代反而要开历史倒车?

谷歌确实不厚道,但是普通人也别以为自己和Linux内核是一条战线上的
Linux开发者想要的是更多的人贡献代码而不是更好的用户体验,这和谷歌开发手机系统的出发点是背道而驰的
他们是极客,手机是他们的玩具
普通人是用户,手机是日常
Linux开发者从来注重的都是功能的迭代,不是软件的兼容和使用体验,了解一下最热门的Linux开发工具之一docker就知道我所言非虚
支持他们观点的人,可以先把自己主力电脑换成任意Linux发行版使用一段时间。。

最搞笑的是,他认为谷歌打着Linux的旗号分流了他的开发者,程序图真的那么傻?
退一步讲,看不懂谷歌在做什么的程序员,也就是包括我在内的随大流的普通程序员,即使被分流了那也大概率是因为钱。。


另外再补充一下
开源项目不止Linux内核一个,很多项目谷歌的贡献还是很大的。。
Merlijn-avatar

Merlijn

[quote][pid=522342553,27085887,1]Reply[/pid] Post by [uid=21086729]jqhsztsl[/uid] (2021-06-07 11:32):

冷知识:linux把安卓踢掉没多久就加回来了[/quote]你那是自媒体的鬼知识,android被踢出去是linux kernel邮件组里公开的话题,而所谓加回来只不过是部分第三方贡献的vendor代码里android和linux是通用的不会去做分割
google自己19年的时候倒是有计划把android和linux重新整合回来搞个通用内核,已经被喷没了
到今天为止,你既不可能单纯从linux源码里编译出android,也没法让linux和android互相引导,它们的ELF header也不一样,甚至运行对方平台的可执行文件都要通过兼容层模拟。跟直接用WINE跑windows程序也没多大区别了,远不如BSD兼容起来方便
Da Otaku ツ-avatar

Da Otaku ツ

Reply to [pid=522348208,27085887,1]Reply[/pid] Post by [uid=17388931]剑凌天[/uid] (2021-06-07 11:48)

这TM真就是“自有江南大儒辩经”[s:ac:吓]

Google这么干是违反了gpl开源协议(至少是擦边球),换成华为这么搞到时候知乎上程序员满屏高潮,纷纷揭批邪恶大魔王,到了Google身上就是历史局限性,自有苦衷[s:ac:嘲笑1]

还“普通人也别以为自己和Linux内核是一条战线上的”,linux基本都是给专业人员用的,和普通人有个什么关系?只见过开发人员嫌弃windows的命令行不好用,没见过嫌弃linux命令行不好用的。内核开发不关注功能迭代还要关注什么?作为专业人员用ubuntu又怎么不行了?这些话都能说出口,真的脸都不要了。

这种脸都不要的歪理都能说一大堆,至少也是懂点行的吧(一般普通人估计都不知道docker是啥),你贱不贱啊.jpg