Google 的 Android 为什么不自主开发一个内核而要用 Linux 内核?
程序员文章站
2022-05-28 18:50:23
...
内核相对整个操作系统来说是非常小一部分,按照 Google 的研发实力,真的想研发一个内核也不会那么难吧?是真的研发内核非常难,还是 Google 基于某些考虑让 Android 使用 Linux 内核呢?
苹果可以自研内核,因为苹果只需要驱动非常有限的少量的设备。说服少数这些设备厂商开发苹果驱动即可,或者甚至可以自行开发。
Windows 可以自研内核,因为这个星球上,设备驱动最多的可能就是它了吧。
那么除了 Windows 之外,哪个内核能驱动最多的硬件设备?答案是 Linux。
所以 android 必须只能选择 Linux 作为内核,没有任何其他选择。 之所以回答,是因为想吐槽一下点赞最多的@pansz 回答。
恰恰相反,linux最难的部分就是它的kernel.作为在n个开源或不开源的嵌入式系统下写过m种设备驱动的人,我想说,设备驱动的编写难度,绝对是吊丝级的。
其次,嵌入式的设备不需要同时技持什么成千上万种设备,不像是电脑,你换个声卡显卡重装驱动就OK了。你可以把你手机的屏幕换一个别的型号试试,硬件接口都不一样,软件需要去做支持吗?
再次,手机中需要的外围设备也没有成千上万那么夸张~。
现在回答题主的问题。google为什么要用linux.
1,不要拿google与apple类比。它们两个不是同一种公司。
google是互联网公司,google是靠服务挣钱的。而apple是设备商。apple要做的是apple认为最人性化的设备,用设备去赚钱,apple的软件是为apple的设备服务的。
2,智能设备需要一个有着优秀管理能力的多任务操作系统。没有人花钱让你去从头去开发这样一个系统。这个难度很大。
3,不是google选择了linux。是google选择了android, 而anroid选择了linux。当然,如果android当年用的并不是一个开源系统。google不一定会选择它。
4,一个稳定的,开源的,全球有众多工程师免费帮你升级维护的系统。对于一个互联网公司,它还不是最佳的选择吗?
5,linux功能强大,它的很多feature都能满足android的需要。且免费,免维护费。我想这是android最初选择linux的原因。或者说在android还不叫android之前,就选择了linux的原因。请看第6条。
6,最后,讲一个故事。曾经一个sun的大牛跳到了moto(也可能是被挖过去的)。因为是sun出来的人,到moto就建立了这样一个项目,底层是c(不记得是不是linux了)上层是java的系统用于手机。那个年代还是moto是业界老大的时代。所有的手机系统(包括界面)都是用c编写的,木有c++,更木有java。那个年代的手机cpu的主频26M是比较快的,想象一下,在这样的处理能力下,先跑一个c的系统,再跑一个虚拟机,再运行java是什么感觉?那个项目的bug满天飞啊~~~最后,这个项目最后在moto挂掉了,大牛自然也离开了。再再再最后,这个大牛到了google。 就我看来,简短的回答是三个字:没必要。
以下从三个角度展开来说:
从技术角度来说,在操作系统层面上,Linux操作系统无法做到,或者无法做好的地方Google其实是很清楚的,也都有相应的比较妥善的应对措施,所以从技术上来说没有这种动力;
从商业合作的角度来说,Google作为一个纯粹的软件提供者,为了尽量的将硬件厂商团结在自己的周围,为了形成一个稳固的生态圈,就要从硬件厂商的角度考虑问题,Linux作为一个已经经过实践和时间的检验,稳定性和性能都得到公认,而且各个硬件厂商也已经有了一定的技术储备,明显硬件厂商更愿意在之前就有一定把握把事情做好的平台下进行开发,这样他们的技术风险可控。同时Linux系统这个项目不由Google直接控制,也更容易让厂商减少警惕之心(第三方厂商也不傻,虽然他们可能会相信Google的技术能力,但是100%会考虑这个问题:如果我做得好,Google你会不会直接来抢我们的果实啊),让周边的厂商投入更大的精力在这个平台上。
从Google自己的角度来说,Google自己肯定觉得自己更擅长搜索和做平台(Google搜索也是一个平台),所以从“扬长避短”的角度出发,Google自己想在移动这个领域拥有更大的话语权,肯定也不会像Intel、高通那样,参与“18个月晶体管数量翻一番”的硬件竞赛中,而是想从软件的入口(也就是操作系统,或者应用这类)角度来控制。从技术角度来说,Google采用了设计模式中的Adapter模式(适配器模式)来处理Android和Linux系统的关系(其实你能发现从Chrome OS和Linux、Chrome浏览器和webkit核心这几件事来看,Google处理这种问题的技术手法都是一样一样的啊),使得移动平台上Linux的重要性被大大降低。同时Google又通过更致命的Google App方式,让Google服务的重度使用者最终难以离开。这样Google自己就能轻车熟路的复制自己之前成功的赚钱方式(从广告商那儿赚钱)
P.S:
@陈尘 同学提到的苹果的内核是他自己开发的,这个说法是不对的,至少不完全对,抛开早期的MacOS不说,Mac OS X的内核代码直接来源于BSD,当然苹果有做针对性的修改,但是要说是苹果自己开发的,这却是不正确的。正确的说法请参考wikipedia上针对FreeBSD的说法:
关于内核的作用我想楼主一定很清楚,简单说就是提供了进程管理、文件网络管理、系统安全权限管理、以及系统与硬件设备通讯基础。而在无论Android还是iOS这类高度依赖框架的多层次操作系统上,内核对上层开发者来说是几乎不可见的,只能通过开放给你的框架接口进行相关操作。
因此我们可以说内核对整个系统来说是基础性的,而非功能性。就整个Android工程来说,其Dalvik [包括新的ARTS]及主体交互、功能框架才是重中之重。
再说说自己开发内核到底有多大好处,或者说性价比有多高的问题。
作为整套系统的基础,内核的高效稳定可以说是重重之重,而任何一款软件的开发都要经历迭代过程,微软开发NT内核耗费大量资金与时间,而且至今还在不断改进与维护正是对此种迭代的最佳例证。而即使如此,经过将近十年的开发与维护,NT内核之效率与功能性仍弱于Linux。由于Linux的开源特性,大量个人与企业对其进行持续不断的维护与改进是Linux始终保持领先的重要原因,而微软以其一己之力自不能与其媲美。这实际上是告诉大家在已有开源Linux的前提下,自己开发系统内核实际上是一件吃力不讨好的事。且以前做Android的团队或现在的谷歌均没有自己现有的系统内核项目,因此使用来源Linux自然是省时省力省钱又保险的选择。而至于微软为何在NT的道路上越走越远,我想它必有自己的道理,比如对系统拥有完全控制权等等,在此不做假设性讨论。
另外值得一提的事,前面有人提到“苹果自主研发内核”实际上是不准确的。iOS与OSX其实都是基于UNIX内核。也算得上是“业界惯例”。
再次,软件、构建重用也是开源软件中惯用的手段。利用维护良好的开源项目对软件系统的稳定性与功能性提升至关重要,这点不再赘述。 为什么要重复发明*? 反对驱动依赖论的答案。驱动不是主要问题,或者说不是最大问题。因为手机不是传统PC,很多设备都是定制化的,本身就要重写。
围绕在Linux身边无数的库和网络组件才是大问题。
如果说不用Linux内核的话,这些庞杂而且涉及到方方面面知识领域的库就要移植甚至重写,这是很得不偿失的。
反过来说,如果Google要自己搞一个内核的话,也会因为这些库的原因,写出一个基本兼容Linux的系统出来。 从系统的开发分层和难度来说,既然有了开源的 Linux ,为什么还要自己去开发内核?就好象大家玩的一些游戏,有 Windows 系统可以直接跑,没有几个厂家会去重新开发底层系统。就连游戏机,其实他的操作系统和功能库也都是现成的,游戏开发者只需要根据系统的功能写程序就可以了。这样很好的减少了开发难度和成本。
P.S:请允许我吐槽
@科技热-Z
android 本质上是一个基于 Linux 内核上面运行的 java 虚拟机
Google只用了kernel,别的东西都没用。这就是说,与Ubuntu、Debian、Redhat这样的传统Linux发行版相比,只有系统的底层结构是一样的,其他东西在Android里都不一样,尤其是程序员的编程接口是完全不同的。因此,Android应用程序都必须重新写过,现存的Linux程序无法移植上去。所以,从严格意义上说,Android是一种全新的系统,它与Linux的距离,比Mac OS与Linux的距离还要远。
Kernel和Android的许可证不一样,前者是GPL许可证,后者是Apache Software License(简称ASL)许可证。GPL许可证规定,对源码的任何修改都必须开源,所以Android开源了,因为它修改了Kernel。而ASL许 可证规定,可以随意使用源码,不必开源,所以建筑在Android之上的硬件驱动和应用程序,都可以保持封闭。为了得到更多厂商的支持,Google有意 选择了这样做,并且特意修改Kernel,使得原本应该包括在kernel中的某些功能,都被转移到了userspace之中,因此得以避开开源。 可以参考robert love在quora上的一篇回答:Android (OS): What are the major changes that Android made to the Linux kernel?
尽可能少地修改内核,尽可能多地摆脱现存UNIX桌面遗产,这是 android 相比与其它一些手机设备(典型如 meego )的特色之处。
回复内容:
不是Google选了 Linux,而是安迪鲁宾创业做Android选了Linux,当时几十人的小团队,能把应用框架做出来,能打出电话就不错了,哪有精力发明OS,选一个成熟开源而且大家都会用的内核,只有Linux了。…… 首先 我要吐槽写一个内核不难这句话 如果都是从无到有 android的这framwork 和 linux内核相比 复杂度完全不是一个数量级的 你觉得kernel简单 是因为linux kernel做的太好了 让你感觉不到它的存在
而android自己这还在万年beta版 linux内核的稳定度岂是android可以比拟的
之前android团队为什么选linux?可能因为他们公司当时买的开发板只支持linux吧
……开个玩笑的 其实是以下原因:
1.linux使用范围广,在嵌入式市场从arm9以后已经开始逐渐成熟
2.本身开源
3.非gpl的开源库多,开源license是件很麻烦的事情
开源license对于商业化是一件很致命的事情…… 为什么没有人提到……
研发一个内核不难,难的是让成千上万的设备为它做驱动。那是一项庞大到几乎不可能的任务。苹果可以自研内核,因为苹果只需要驱动非常有限的少量的设备。说服少数这些设备厂商开发苹果驱动即可,或者甚至可以自行开发。
Windows 可以自研内核,因为这个星球上,设备驱动最多的可能就是它了吧。
那么除了 Windows 之外,哪个内核能驱动最多的硬件设备?答案是 Linux。
所以 android 必须只能选择 Linux 作为内核,没有任何其他选择。 之所以回答,是因为想吐槽一下点赞最多的@pansz 回答。
恰恰相反,linux最难的部分就是它的kernel.作为在n个开源或不开源的嵌入式系统下写过m种设备驱动的人,我想说,设备驱动的编写难度,绝对是吊丝级的。
其次,嵌入式的设备不需要同时技持什么成千上万种设备,不像是电脑,你换个声卡显卡重装驱动就OK了。你可以把你手机的屏幕换一个别的型号试试,硬件接口都不一样,软件需要去做支持吗?
再次,手机中需要的外围设备也没有成千上万那么夸张~。
现在回答题主的问题。google为什么要用linux.
1,不要拿google与apple类比。它们两个不是同一种公司。
google是互联网公司,google是靠服务挣钱的。而apple是设备商。apple要做的是apple认为最人性化的设备,用设备去赚钱,apple的软件是为apple的设备服务的。
2,智能设备需要一个有着优秀管理能力的多任务操作系统。没有人花钱让你去从头去开发这样一个系统。这个难度很大。
3,不是google选择了linux。是google选择了android, 而anroid选择了linux。当然,如果android当年用的并不是一个开源系统。google不一定会选择它。
4,一个稳定的,开源的,全球有众多工程师免费帮你升级维护的系统。对于一个互联网公司,它还不是最佳的选择吗?
5,linux功能强大,它的很多feature都能满足android的需要。且免费,免维护费。我想这是android最初选择linux的原因。或者说在android还不叫android之前,就选择了linux的原因。请看第6条。
6,最后,讲一个故事。曾经一个sun的大牛跳到了moto(也可能是被挖过去的)。因为是sun出来的人,到moto就建立了这样一个项目,底层是c(不记得是不是linux了)上层是java的系统用于手机。那个年代还是moto是业界老大的时代。所有的手机系统(包括界面)都是用c编写的,木有c++,更木有java。那个年代的手机cpu的主频26M是比较快的,想象一下,在这样的处理能力下,先跑一个c的系统,再跑一个虚拟机,再运行java是什么感觉?那个项目的bug满天飞啊~~~最后,这个项目最后在moto挂掉了,大牛自然也离开了。再再再最后,这个大牛到了google。 就我看来,简短的回答是三个字:没必要。
以下从三个角度展开来说:
从技术角度来说,在操作系统层面上,Linux操作系统无法做到,或者无法做好的地方Google其实是很清楚的,也都有相应的比较妥善的应对措施,所以从技术上来说没有这种动力;
从商业合作的角度来说,Google作为一个纯粹的软件提供者,为了尽量的将硬件厂商团结在自己的周围,为了形成一个稳固的生态圈,就要从硬件厂商的角度考虑问题,Linux作为一个已经经过实践和时间的检验,稳定性和性能都得到公认,而且各个硬件厂商也已经有了一定的技术储备,明显硬件厂商更愿意在之前就有一定把握把事情做好的平台下进行开发,这样他们的技术风险可控。同时Linux系统这个项目不由Google直接控制,也更容易让厂商减少警惕之心(第三方厂商也不傻,虽然他们可能会相信Google的技术能力,但是100%会考虑这个问题:如果我做得好,Google你会不会直接来抢我们的果实啊),让周边的厂商投入更大的精力在这个平台上。
从Google自己的角度来说,Google自己肯定觉得自己更擅长搜索和做平台(Google搜索也是一个平台),所以从“扬长避短”的角度出发,Google自己想在移动这个领域拥有更大的话语权,肯定也不会像Intel、高通那样,参与“18个月晶体管数量翻一番”的硬件竞赛中,而是想从软件的入口(也就是操作系统,或者应用这类)角度来控制。从技术角度来说,Google采用了设计模式中的Adapter模式(适配器模式)来处理Android和Linux系统的关系(其实你能发现从Chrome OS和Linux、Chrome浏览器和webkit核心这几件事来看,Google处理这种问题的技术手法都是一样一样的啊),使得移动平台上Linux的重要性被大大降低。同时Google又通过更致命的Google App方式,让Google服务的重度使用者最终难以离开。这样Google自己就能轻车熟路的复制自己之前成功的赚钱方式(从广告商那儿赚钱)
P.S:
@陈尘 同学提到的苹果的内核是他自己开发的,这个说法是不对的,至少不完全对,抛开早期的MacOS不说,Mac OS X的内核代码直接来源于BSD,当然苹果有做针对性的修改,但是要说是苹果自己开发的,这却是不正确的。正确的说法请参考wikipedia上针对FreeBSD的说法:
另外,还可以从这篇博客中了解Mac OS X同Mach之间的关系:http://dolgopa.wordpress.com/2010/04/14/jordan-k-hubbard-freebsd-relation-between-freebsd-and-mac-osx/ 看了大家的回复,我觉得可以从另一个角度回答这个问题。需要了解两个问题,所谓系统内核他到底做了件什么事?花钱花精力自己开发内核的到底有多大好处?Mac OS X Server includes the latest technological advances from the open source BSD community. Originally developed at the University of California, Berkeley, the BSD distribution is the foundation of most UNIX implementations today. Mac OS X Server is based largely on the FreeBSD distribution and includes the latest advances from this development community.
—"Apple Mac OS X Server Snow Leopard—UNIX: Open source foundation"
关于内核的作用我想楼主一定很清楚,简单说就是提供了进程管理、文件网络管理、系统安全权限管理、以及系统与硬件设备通讯基础。而在无论Android还是iOS这类高度依赖框架的多层次操作系统上,内核对上层开发者来说是几乎不可见的,只能通过开放给你的框架接口进行相关操作。
因此我们可以说内核对整个系统来说是基础性的,而非功能性。就整个Android工程来说,其Dalvik [包括新的ARTS]及主体交互、功能框架才是重中之重。
再说说自己开发内核到底有多大好处,或者说性价比有多高的问题。
作为整套系统的基础,内核的高效稳定可以说是重重之重,而任何一款软件的开发都要经历迭代过程,微软开发NT内核耗费大量资金与时间,而且至今还在不断改进与维护正是对此种迭代的最佳例证。而即使如此,经过将近十年的开发与维护,NT内核之效率与功能性仍弱于Linux。由于Linux的开源特性,大量个人与企业对其进行持续不断的维护与改进是Linux始终保持领先的重要原因,而微软以其一己之力自不能与其媲美。这实际上是告诉大家在已有开源Linux的前提下,自己开发系统内核实际上是一件吃力不讨好的事。且以前做Android的团队或现在的谷歌均没有自己现有的系统内核项目,因此使用来源Linux自然是省时省力省钱又保险的选择。而至于微软为何在NT的道路上越走越远,我想它必有自己的道理,比如对系统拥有完全控制权等等,在此不做假设性讨论。
另外值得一提的事,前面有人提到“苹果自主研发内核”实际上是不准确的。iOS与OSX其实都是基于UNIX内核。也算得上是“业界惯例”。
再次,软件、构建重用也是开源软件中惯用的手段。利用维护良好的开源项目对软件系统的稳定性与功能性提升至关重要,这点不再赘述。 为什么要重复发明*? 反对驱动依赖论的答案。驱动不是主要问题,或者说不是最大问题。因为手机不是传统PC,很多设备都是定制化的,本身就要重写。
围绕在Linux身边无数的库和网络组件才是大问题。
如果说不用Linux内核的话,这些庞杂而且涉及到方方面面知识领域的库就要移植甚至重写,这是很得不偿失的。
反过来说,如果Google要自己搞一个内核的话,也会因为这些库的原因,写出一个基本兼容Linux的系统出来。 从系统的开发分层和难度来说,既然有了开源的 Linux ,为什么还要自己去开发内核?就好象大家玩的一些游戏,有 Windows 系统可以直接跑,没有几个厂家会去重新开发底层系统。就连游戏机,其实他的操作系统和功能库也都是现成的,游戏开发者只需要根据系统的功能写程序就可以了。这样很好的减少了开发难度和成本。
P.S:请允许我吐槽
@科技热-Z
android 本质上是一个基于 Linux 内核上面运行的 java 虚拟机
Google只用了kernel,别的东西都没用。这就是说,与Ubuntu、Debian、Redhat这样的传统Linux发行版相比,只有系统的底层结构是一样的,其他东西在Android里都不一样,尤其是程序员的编程接口是完全不同的。因此,Android应用程序都必须重新写过,现存的Linux程序无法移植上去。所以,从严格意义上说,Android是一种全新的系统,它与Linux的距离,比Mac OS与Linux的距离还要远。
Kernel和Android的许可证不一样,前者是GPL许可证,后者是Apache Software License(简称ASL)许可证。GPL许可证规定,对源码的任何修改都必须开源,所以Android开源了,因为它修改了Kernel。而ASL许 可证规定,可以随意使用源码,不必开源,所以建筑在Android之上的硬件驱动和应用程序,都可以保持封闭。为了得到更多厂商的支持,Google有意 选择了这样做,并且特意修改Kernel,使得原本应该包括在kernel中的某些功能,都被转移到了userspace之中,因此得以避开开源。 可以参考robert love在quora上的一篇回答:Android (OS): What are the major changes that Android made to the Linux kernel?
尽可能少地修改内核,尽可能多地摆脱现存UNIX桌面遗产,这是 android 相比与其它一些手机设备(典型如 meego )的特色之处。