带你真正认识Linux系统结构
最新一代安卓系统安卓N已经出现了,和以往的全新安卓系统一样,尽管新的安卓拥有很多激动人心的新特性,但仍很难勾起人们的兴趣。无它,就因为新的安卓系统,和大部分用户绝然是没什么关系的,不能升级说这个有什么用?尽管安卓来自Google,但Google却似乎管生不管养,手中的机器能不能升级到安卓,还得各家OEM厂商说了算。
安卓N已经发布,但市面上绝大多数机器不能升级,为什么?
但仔细想想,这情况似乎还是有点奇怪。安卓能够运行在各种设备中,类似的系统也不是没有,大家最熟悉的Windows,也是靠硬件不同的机器打天下的。然而,无论是什么电脑厂商制造的Win PC,往往都能轻松升级到最新的Windows甚至随意更换不同的系统,硬件再碎片化,也不存在升级困难的问题。为什么同样是开放授权安装,安卓的升级就如此困难?今天,一起来说说这个事吧。
历史原因:安卓机没有类似IBM兼容机的标准
虽说安卓和Win PC的硬件都是花样百出,但其实这里的门道,还是有些许不同的。在上世纪90年代之前,个人电脑市场也经历过混乱的战国时代,市场上存在着大量不同标准的PC,什么苹果电脑啦,TRS-80机啦日本的PC-9801机等等,相互间硬件和系统都不通用。然后,IBM在1982年公布了IBM PC上几乎所有的技术资料,兼容机就此诞生了。只要使用了IBM公布的技术标准,这些PC机的零部件都可以互换。繁荣的电脑DIY市场就此崛起,为了兼容DIY电脑,Windows在这方面也是做了大量工作。Win PC一时无两,到了90年代,个人电脑市场就只剩下苹果电脑能够在Win PC的重压下喘息了。
Windows能普及,IBM兼容机功不可没
而安卓机的崛起历程,和Win PC是不一样的。安卓阵营中,并没有出现IBM公开技术标准这样的大事件。Win PC或者说是Windows的繁荣,得益于IBM公布兼容机标准后,DIY市场的兴起;而安卓机的普及,则归功于手机整机OEM制造商各自为政的推广。Google一开始,就没打算让安卓如同Windows那样,可以运行在某种标准架构的设备上,各家OEM制造商拿到Google发布的安卓代码后,把安卓推出去(当然还得添点Google生态的东西),就完成任务了。因此,安卓的推广的过程中,本来就没有Win那样用一样的代码、兼容不同的硬件的基因。
安卓阵营并没有类似IBM兼容机的标准,OEM厂商各做各的
简单来说,Win能够有着如此好的系统升级支持,是因为现在的Win PC都是IBM兼容机,Win以兼容IBM兼容机为己任;而安卓设备并没有一个类似IBM兼容机这样的标准,Google自然也没法直接把最新的安卓推送到任一部安卓机器了。
技术原因:Linux和Win内核架构差异
熟悉电脑装机的朋友应该都知道,DIY电脑安装完了Windows,还没算完,还得通过Windows Update,或者手动安装各种硬件驱动。而安卓一个ROM不能兼容某部机器,最大的原因,就是硬件驱动适配问题,这也造成了Google发布的最新原生系统,不能装在任意安卓机器上。这里面,是不是也存在Windows和安卓的技术差异呢?的确如此。
Windows和安卓的内核差异其实挺大的
实际上,Windows对驱动的管理,是要比安卓更加方便的。Windows属于比较接近微内核的混合内核结构,这样的结构有一个特点,那就是驱动是单独分发的,并不会和Windows的微内核混合在一起。如此一来,各家硬件厂商单独发Windows驱动就很容易了。新的Windows要兼容某个硬件,硬件厂商只要把驱动发给微软,微软完成认证后,就可以把这驱动放到Windows Update或者干脆整合到Windows的安装镜像中,无需重构Windows的内核代码,并不复杂。
Windows对驱动的适配更加灵活方便
而安卓则基于Linux,Linux是一个宏内核的结构,Linux的驱动和内核是整合在一起的。要适配某种硬件,得把驱动都整合进Linux内核。虽然Google为了避免GPL污染,已经在Linux之上建立了一个硬件抽象层HAL,但根本问题仍未解决,安卓的硬件驱动仍不能如同Windows那样独立安装。例如某某芯片厂商更新安卓驱动,用户并不能直接安装,需要等安卓厂商把这驱动整合进新ROM中,再提供给用户刷入。
安卓适配某种硬件,需要厂商进行驱动整合
从这方面来说,如果Google想要为所有安卓机都提供系统升级,就超级麻烦了——Google得为每一种硬件不同的安卓机,都准备一个内核不同的ROM。考虑到市面上的安卓机硬件组合种类的数量……就算是Google,也是干不来的。因此,Google实际上并没有技术条件为市面上所有安卓机都提供系统升级,Google能顾得着自家的Nexus设备,就不错了。
利益原因:安卓并不只是Google的安卓
虽然安卓来自Google,安卓并不仅仅属于Google。Google把安卓的源代码发布到开源项目AOSP后,各家厂商只要遵循Apache协议,就可以利用这些代码构筑自己的ROM了。如果想要使用Google提供的服务,还需要和Google签订协议,预装制定的Google应用。更多的情况是,各家厂商会在安卓中整合自家的服务,把安卓修改成自己想要的模样。
安卓OEM厂商接触的是安卓开源项目,而Win PC厂商接触的是Windows成品
放眼望去,其实除了Nexus和Android One这种Google自己管卖的机器外,市面上使用安卓原生系统的安卓机根本就没有。开源让OEM厂商看到了铺开自家生态的机会,安卓被紊乱而繁多的OEM厂商的生态战略冲击分化成数十百种,Google不可能跟随这些厂商的安卓分支,为用户提供后续的系统升级服务——除了必要的部分,这些厂商可不会像Google那样,把修改后的安卓源码也公布出来的。
你跟Google说这是安卓,Google说不定还不信
安卓源码被发布后,就不仅仅只是Google的安卓了。要问为什么各家厂商不愿用原生安卓?原生安卓只能帮Google赚钱,不能帮自己赚钱,这就是利益问题了。这种情况,在Windows上就没有出现。由于Windows是闭源的系统,因此第三方难以对其进行大幅修改,最多也就预装几个软件,修改成番茄花园那样子已经算是变动比较大的了。微软一直牢牢把握Windows系统的话语权,OEM卖电脑赚的是硬件钱而不是安卓那样的生态钱。微软对Windows升级的支持度,自然也不是Google可以与之相比的。
保持原汁原味的Nexus,是可以获得安卓最新的系统升级的