时不时会有开发者抱怨Android不是“开放的”。问题是有太多的东西被称为“Android”,这导致一些开发者尝试比较苹果和苹果。
首先是Android开源项目。这是在一个慷慨的开放源码许可下发布的大量源代码,任何人都可以用于他们想要的任何目的。但是,这个开放源代码并不真正代表一个完整的操作系统,就像Linux内核一样。而且,这个开放源代码不包括专有的应用程序,就像Linux内核不包括Oracle一样。
然后,还有一套安卓“发行版”。正如Linux内核、驱动程序和用户地工具结合起来创建Linux发行版一样,Android开源项目、驱动程序和其他通常是专有的部分也构成了Android“发行版”。这些都是从内部构建到OHA树,Google维护一些私有的存储库,其中包含最新和最好的Android源代码。然后,谷歌和精选设备制造商致力于将Android代码转换成各种设备上的发行版,通常包含特定于制造商的比特(例如HTC Sense、MOTOBLUR),有时还包括运营商特定的比特(例如,针对T-Mobile US的myFaves)。没有什么可以阻止人们创建一个纯开源的Android发行版,尽管为任意的手机硬件寻找开源驱动程序最多也很困难,而且它只限于开源项目,而不是尚未发布的内部代码。
私有发行版是不开放的,就像TiVo或许多Linksys路由器是“开放的”一样。他们使用开源基础,但随后他们混合了一些专有的部分,并将其分发到设备上,而不是设计成开放系统。我渴望有一天,你可以在手机上安装任意的操作系统,就像你可以在开放的PC上那样。然而,期望在Android的第2年是不现实的,因为围绕它的问题远远超出了任何一个移动操作系统的范围。此外,根据Android开源许可证,制造商有权制作专有发行版,如果你剥夺了这个权利,你就很大程度上剥夺了设备。
Android的开放源代码是开放的,但是正在进行的公共协作开发是有限的。这是令人失望的,正如我在几次场合指出的那样。已经发布的源代码可能是透明的,但是开发过程最好是透明的,并且那些已经发布到发行版但还没有进入开源树的代码是非常不透明的。
然后是第三个“Android”——Android API。这使得开发人员可以创建由Android开放源代码支持的应用程序,并且可以在Android发行版上运行。所有的api,无论是开源的还是专有的,都不是开放的——api定义了一个契约,而契约不能在手指轻轻一敲就被修改。如果您认为要单方面地为所有内核重新定义userland应用程序的Linux内核API (ABI),这是不太可能的,但是如果您的姓是Torvalds,这种可能性会增加。
因此,当开发人员抱怨缺少api意味着“Android”不是“开放”的时候,开发者对他们的抱怨缺乏清晰的理解并不能帮助他们解决问题。Android的API不应该是“开放的”。专有发行版不应该是“开放的”。缺少API不会使开源代码不“打开”。
相反,我能看到的关于api缺失的唯一两个相关且有效的“不开放”的抱怨是:
- Android发行版的开发过程不是开放的(开放源码树滞后于当前的操作系统版本,等等),这就是你可能会在所有设备上添加一个缺失的API的方式
这些设备本身很少是开放的,这意味着开放的发行版是很难做到的,这就是您可能会在自己的设备上添加缺失的API的方法
如果开发人员努力开发更开放的设备,如The等,后一种情况将得到改善ODROID。如果Symbian更加开放的进程获得成功,或者设备制造商(或者谷歌本身)确信更加开放的进程将给他们在Android操作系统中带来“更好的”性能,前一种情况将会得到改善。对于这两种情况,只有时间才能证明。