最初新闻来源:http://www.iteye.com/topic/587600
你是Google粉丝吗?Google的“不作恶”信条是否令你推崇之极?Android的“开源”是否是你鄙视苹果专权的理由?或许你该看看下面这篇文章了。
满大街都在谈论Android,它是当红炸子鸡。许多人觉得,iPhone将受到它的强力挑战。
而日前,有一位名为“阮一峰”的网友就根据国外的一些业内状况对Android的发展提出了自己的看法,Android真的像Linux那样开源,而Google也真有那么伟大吗?此文非常值得大家一读:
我也曾经对Android充满了期待,但是后来的事态发展,令我改变了看法。前几天,我就在网志上写了自己的担忧:“首先,Android应用
程序只能用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,都是经过他的手流出来的。此外,他还负责硬件驱动的部署。而他的手机就是
HTCG1,每天都在使用。所以,他是绝对有资格谈论这个
问题的,他的看法代表了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的距离还要远。
然后,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许可,又能不让外界看到厂商的硬件驱动和应用程序的源码。
这样做或许有利于推广Android,吸引厂商和软件开发商的加入,但是也给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呢,至少能在软件商店里多卖一点钱,而且乔布斯看上去也更酷一点。
slashdot上有很多关于此事的讨论。有人指出:“Google自己的网站,与微软的网站一样封闭。它开源出来的东西,都是根据GPL许可证不得不开源的。”
好吧,姑且不谈Google本身,因为它至少不要求外界提供支持。但是Android不一样,你不能假装成开源系统,骗取社区的支持,然后又干着封闭系统的勾当。
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的支持。
原地址:http://zx.sj.91.com/content/2010-02-05/20100205062335144,1.shtml
再转一个评论:
“kernel是GPL,并不代表驱动是GPL,LINUX社区和GPL协议并没有强制硬件厂商的LINUX驱动程序以GPL的形式发布,只能是推荐和建议硬件厂商以GPL的形式发布驱动程序,或者顶多在编译驱动程序的时候如果驱动以非GPL发布会产生警告或者不允许使用个别内核接口。驱动程序尽管是内核的一部分,但驱动自身并不修改内核,它只是使用内核的接口,就像基于LINUX的应用程序使用LINUX系统调用但并不一定需要遵守GPL协议,应用开发商使用LINUX内核而不是修改它无需要开公应用程序的源代码。要明白这一点!驱动选择公不公开源代码是硬件的意愿。并不带强制性。GPL说的很清楚,任何“修改”基于GPL的代码才需要公开。再比如ATI的显卡驱动程序就是公开一半然后又封闭一些代码成.a的库。
GOOGLE使用LINUX内核并修改了它,然后也公布了其修改部分,这是符合GPL的,至于硬件驱动程序我想并不由GOOGLE来开发,GOOGLE没有权力要求硬件厂商公开驱动程序代码。除非是GOOGLE自己帮硬件厂商开发驱动,然后公布。Android做的事情大部分的是集中在应用程序这一层,有些太天真以为GOOGLE是一切,其实GOOGLE是无法做到帮所以的厂商开发相应的驱动程序。HTC的手机G1,G2,G3驱动程序大多是高通提供的。这也许GOOGLE会协助高通完成驱动程序的开发。然而GOOGLE对内核修改的部分已公开,它还能怎样?有驱动程序代码的话我根本连高通MSM7200A芯片手册都不用,更不要说现在网上根本无法得到MSM7200A的芯片手册,除非是高通的客户如HTC才有机会得到。
只是还有一些天真人士在还没搞懂GPL之前又不懂KERNEL更或者带着理想主义。这是商业,我觉得GOOGLE把商业运作和开源的理想主义结合,为开源的普及已经做出不少贡献了。开源老大说了一句话,中国人对开源的贡献在于中国大量使用开源软件。这已经在是中国很了不起了。
现在GOOGLE还有那些代码是非公开的?该按开源协议公开的都已经公开,不会下载过和分析过的没有发言权,或许新版本的代码只是时间而已。”
分享到:
相关推荐
qt-opensource-windows-x86-android-5.8.0.exe 20-Jan-2017 12:48 1.3G Details qt-opensource-mac-x64-clang-5.8.0.dmg 20-Jan-2017 12:45 1.3G Details qt-opensource-mac-x64-android-ios-5.8.0.dmg 20-Jan-...
The Architecture of Open Source Applications(开源软件架构),其中包含了中文和英文版,整理之后免费分享给大家,中文版由图灵社区翻译http://www.ituring.com.cn/minibook/19 本书是开源应用的必读资料之一,介绍...
"simple-android-opensource-framework"这个项目专注于对一些知名的Android开源框架进行简化的实现和设计分析,让我们深入探讨一下其中可能包含的知识点。 1. **Android组件库**:开源库通常包括对Android原生组件...
GitNux is an open source Github app that lets you access your Github profile, repositories, starred, projects and codes. Features Show your profile overview See your follower's project/repositories ...
an android demo to use openai's api 调用openai提供的接口,实现与ChatGPT对话 功能: 支持至Gpt-3.5模型(因为本人买不起plus) ✓ 无需代理即可与ChatGPT对话(可以使用自己的服务器中转) ✓ 支持带记忆的...
open source 5G implementation,5G(5G-CN、5G-RAN、5G-UE)开源实现。打造一个基于SDR、端到端(CN-RAN-UE)的开放5G平台,便于学习或科研,推动5G生态发展
本实例探讨了如何使用CH559 USB单片机实现与Android设备的通讯,利用Android Open Accessory Protocol 2.0 (AOA 2.0) 协议进行数据交换。这一技术允许开发人员创建兼容Android系统的外部硬件设备,从而拓展手机或...
标签为“open source”,说明该文件与开源软件相关。开源软件(Open Source Software, OSS)是指源代码开放的软件,用户可以自由地使用、研究、修改和分发这些软件。 在部分内容中,提及了多个开源软件许可证和版权...
此外,源代码标记和细分版本对于Android开源项目(AOSP)的贡献者来说同样重要。这些标记对应于特定的源代码分支,允许开发者获取特定版本的源代码,构建自定义ROM或者进行系统级别的调试。开发者可以从Android...
qt-opensource-linux-x64-5.12.12.run Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command ...
"qt-everywhere-opensource-src-4.7.3" 是QT库的一个开源版本源代码包,发布于2011年,主要用于4.7.x系列。这个版本在当时具有很高的稳定性和兼容性,适用于多种操作系统,如Windows、Linux、Mac OS X以及各种嵌入式...
Android 13 android T 原生Settings 源码 source code 基于qcom release
【Android Open Project】是关于Android操作系统开放源代码项目的讨论与研究。这个项目旨在提供一个全面了解Android系统及其发展的平台,涵盖了从操作系统的基本概念到实际应用的各个层面。 **什么是Android?** ...
Open source for developer.(开发资源整理:Java,Android,算法,iOS,MacOS等等Open source for developer.(开发资源整理:Java,Android,算法,iOS,MacOS等等Open source for developer.(开发资源整理:Java,...
opencore-amr-android, android中的opencore amr编解码器 opencore-amr-android一种带有解释功能的opencore amr编解码器及其封装amr音频文件的。中文文档请移步 README_CN QQ部落帮助: 453503476背景opencore 是...
2. **Android开放源代码项目(AOSP)**:谷歌将Android的大部分源代码放在AOSP(Android Open Source Project)上,允许开发者查看、修改和发布这些代码。这包括核心系统服务、库、框架API,以及一些预装应用。 3. ...
"Open Camera Android 源码 适配Android Studio" 是一个关于开源相机应用 Open Camera 的源代码项目,已经优化为能够在Android Studio环境下进行开发和编译。Open Camera是一款功能丰富的免费相机应用,它允许用户...
The world's first fastest, open source Music player for Android with latest design... Features Fastest Music Player Latest Designed Open Source Music player Customizable Options Team Members Archit...
Xiaomi_Kernel_OpenSource,小米内核开源:cancro kk oss(包含mi 3w、mi 3c、mi 4系列、mi note)、armani jb oss(h1s)、dior kk oss(hm note-lte)、法拉利l-oss(小米4i)、thmoas kk oss(hm2 lte)、libra-l-...
【开源SIP】 开源SIP(Session Initiation Protocol)是一种基于Internet的协议,用于控制多媒体通信会话,如语音和视频通话。SIP是IETF(互联网工程任务组)制定的一种标准,它允许用户在互联网上进行实时通信,...