Android是目前为止世界上最流行的平台,支持超过20亿台移动设备。毫无疑问,这是一个巨大的成功。java
尽管如此,我怀疑Android的发展前景可能不如过去那么乐观。android
我第一次产生这种想法大约始于一年前。当时谷歌宣布Kotlin编程语言将正式支持Android开发。 这个公告引起了Android开发者们极大的热情,但我却没法加入这一浪潮。编程
我试图去了解Kotlin将如何与Android互惠互利,但我所能看到的仅仅是一个已经分散、混乱的开发生态系统的进一步碎片化。安全
我曾但愿谷歌会与咱们分享更多的信息,但他们没有。他们只是说Kotlin获得了官方的支持,由于它是“更好的”开发语言,会集中精力推广它,并将Kotlin示例添加到了官方文档中。markdown
一个最直接明显的问题 -Java在Android上的路线图是什么? - 仍未获得答复。oracle
有些时候,我想与我博客的读者们分享一些悲观的想法。 因此,我写了一篇文章:经过一系列的量化分析来讲明Kotlin的引入可能会对Android产生反作用。 使人惊讶的是,这篇文章吸引了很多读者的关注并收到了不少反馈。app
我分析了这些反馈,并指出你们对于JetBrains为何要发明和推广Kotlin彷佛存在着误解。 许多开发人员专一于技术方面,却忘记了JetBrains若是没有明确的商业模式就不会在Kotlin上投入如此巨大的资源。没问题,我也是这样写的。less
下一步我想分享一些我认为Google会采用Kotlin的缘由,但我陷入了数月的困境。编程语言
最开始我认为Google采用Kotlin是由于他们与Oracle在Android上使用了Java这一问题上存在持续的法律纠纷。我以为Kotlin能够帮助谷歌摆脱这个纠纷。然而,在详细研究了甲骨文与谷歌的诉讼以后,我以为我想错了。oop
个人心中逐渐产生了另外一种更可怕的假设 - 谷歌采用Kotlin并伤害咱们以更好地对抗甲骨文的诉讼。
接下来我将与大家分享我这个可怕的推测。
请记住,这篇文章是我系列文章中的第三篇。 它创建在个人第一篇文章的内容基础上,这篇文章解释了谷歌为何采用Kotlin,第二篇文章总结了甲骨文与谷歌的诉讼。 我假设你已经阅读了本系列的前两篇文章。
甲骨文与谷歌官司中的一个使人惊讶又以为有趣的证据是软件工程师Tim Lindholm给“Android之父”安迪鲁宾发送的一封电子邮件:
请容许我解释下这里到底发生了什么事情:
也就是说,Alan Eustace认为从Android里移除Java API 是很难威胁到Safra Katz的。 可是咱们认为在谈判中提出Java API 的替代方案是有价值的,这样咱们就能得到使用Java API 的更好的条款和价格。 在咱们看来,Obj-C提供了一种可信的替代方案。 咱们想知道的是你为何讨厌这个想法的缘由,无论你认为咱们在理解这个方案时错过了什么。
这里提到了两我的:Google高级执行官Alan Eustace和Oracle的高级主管Safra Katz。 这封电子邮件的日期大约是在Oracle收购Sun后大约六个月的时间,在Oracle起诉谷歌以前大约两个月。
在我对Oracle与Google诉讼的评论中,我提到Google确定知道Java API是受版权保护的,而且得到了Sun的许可。事实证实,在Sun被收购以后,他们还与甲骨文进行了谈判。
请注意Google是如何威胁Oracle要从Android中移除Java API 的。 他们并不打算真正这么作,但他们认为这样的威胁可让他们得到更好的Java使用许可证条款和价格。 如今请记住这个策略。
这封电子邮件中最引人注目的部分是:
(拉里和谢尔格)实际上要求咱们去作的是调查替换Android和Chrome中的java语言的技术方案。 咱们已经完成了其中一些,并认为他们都很糟糕。
我在解释Google为何采用Kotlin时,描述了谷歌的一位中层管理人员和一位高管之间关因而否采用Kotlin的虚拟对话。 我用它来告诉你,谷歌之因此采用Kotlin是由于它“更好”或者“开发者社区要求他们这么作”这种想法是荒谬的。我还表示,Kotlin的采用可能须要Google的高层管理人员,甚至是董事会的批准。
如今你知道了,谷歌创始人拉里佩奇和谢尔盖布林甚至在甲骨文起诉谷歌以前就直接参与了Android中使用了Java语言这个问题。 今天,当Google处于数十亿美圆的诉讼中时,我认为Google公司里的人是不会讨论Kotlin是一种“更简洁的编程语言”这个话题的。
咱们得出结论,咱们须要根据咱们的需求经过谈判协商来得到Java的使用许可协议。
可是,可是,可是......谷歌这么多年来一直说Java API是不受版权保护的。 他们说,贪婪的甲骨文没有理由起诉他们!那么他们为何会得出结论:他们须要经过谈判来得到Java的使用许可协议呢?难道是谷歌急于向甲骨文捐赠数亿美圆,或者是他们向咱们和法院撒谎吗?
谷歌曾经在诉讼中辩护称他们认为API的版权将“终结咱们今天所知的软件行业”。 事实证实,早在甲骨文起诉Google以前,API就有了版权概念,正由于如此,软件行业才会发展至今。
Tim Lindholm在撰写上述电子邮件的时候OpenJDK已经三岁了。 Google是能够将这个开源的Java API实现集成到Android中的。 可是,顶级的Google高管寻找到了Java的替代品,并试图操纵Oracle高管给予他们折扣。 本电子邮件中甚至没有提到要把OpenJDK做为选项。
为何谷歌不直接无偿使用Oracle的开源OpenJDK,而是去与甲骨文谈判得到Java API的使用许可证?
OpenJDK是根据GPL + Classpath Exception得到许可的,而Android主要是在Apache下得到许可的。 将OpenJDK整合到Android并不能帮助到谷歌,谷歌高管对此很是了解,所以在此次讨论中甚至没有提出这个选择。
然而,大约六年以后,随着Android Nougat的发布,OpenJDK被引入了Android。 是什么让Google改变主意?
OpenJDK和Android的许可协议都不会改变,因此OpenJDK并非Google的安全选择。 只是在那个时候,谷歌已经实在是没有办法去说服美国联邦巡回上诉法院相信Java API是没有版权的。最高法院拒绝了谷歌的请求,要求审理此案。与此相比,与OpenJDK相关的风险再也不那么大,因此Google决定整合它。
可是请不要误会 - 谷歌与Android中的OpenJDK相关的风险仍然很大。
首先,甲骨文能够向法院请求Android Nougat版本以后的系统禁止使用OpenJDK,甲骨文确定会赢得诉讼,并得到禁令。 即便谷歌可以说服法庭须要进行另外一项单独的审判来肯定Android Nougat版本以后的系统的侵权损害赔偿,甲骨文极可能不会退缩。
虽然谷歌有机会摆脱Android中的OpenJDK,但它不可能仅凭这一点就但愿能打赢数十亿美圆的官司并掌控Android的将来。
因此,谷歌看上了Kotlin。
还记得Google在2010年与Oracle进行Java许可证谈判时使用的策略吗? 他们试图证实他们能够把Android迁移到别的技术上,但愿甲骨文可以给予他们折扣。 今天,咱们知道它并不像预期的那样有效。
个人一个推测是:谷歌想经过Kotlin来进行一次炒做,借此来证实他们此次是认真的。这样的话,若是谷歌决定与甲骨文达成和解,这多是和解谈判的一个很好的筹码,甚至多是惟一的筹码。由于就这起诉讼而言,谷歌彷佛落于下风。
我我的认为这个解释的可能性很是低。甲骨文明确表示,他们但愿得到公平的Android份额,但谷歌曾用Android作过的全部事情都代表他们不会让任何人参与进来。看起来甲骨文和谷歌的地位相差太远,没法成为一个可行的解决方案选项。
即便Kotlin只是一个谈判的的筹码,谷歌仍然须要证实他们能够将Android从Java迁移到Kotlin。
除非…
从理论上讲,谷歌能够从新实现Kotlin API以消除Android对Java API的依赖。 若是Java API再也不使用,Google将可以从Android中删除OpenJDK。
Android会在删除OpenJDK后放弃对Java应用程序的支持吗? 我不这么认为。
以Facebook为例,他们的代码库中极可能早就已经积累了一百万行Java代码。 将如此庞大的项目迁移到Kotlin将是一项很是困难和长期的工程,这将耗资数百万美圆。 在可预见的将来,我认为Facebook不会达到这个水平。Google是不可能放弃对相似于Facebook等其余应用程序的支持的,所以它别无选择,只能继续使用Java来支持Java应用程序。
在删除OpenJDK以后,Andorid能够在编译以前将Java编译为Kotlin,或直接编译为使用Kotlin API的代码,从而解决Java API缺失的问题。这实现起来并不困难。
因此,谷歌采用Kotlin是为了从Android平台移除有争议的Java API。
据我所知,若是甲骨文胜诉,理论上,他们能够在Android中得到份额,不管它是否会继续使用Java API。
甲骨文表示,Google侵犯了他们的版权,并创造了一个基本上将Java从移动市场中淘汰的竞争产品。 即便谷歌此时删除侵权部分,法院仍能够断定谷歌须要对甲骨文核心业务的长期损害负责。在这种状况下,即便侵权行为中止,甲骨文也能够得到Android的份额。
这对谷歌来讲是一个世界末日的场景,由于甲骨文将得到Android的份额,谷歌将没法作任何事情。
除非......不会再有Android。
关于Android的一个最神秘的话题是Google的新“秘密”操做系统Fuchsia是否真的打算取代Android。
若是Fuchsia真的取代了Android,这对于Android生态系统的参与者来讲影响将是巨大的,但Google不会与咱们分享任何信息。我和其余许多Android开发人员向Google的官方表明询问了Android和Fuchsia的路线图,但据我所知,没有人可以回答这个问题。
因此,让我回答一下关于Android的一个大问题:什么是Fuchsia?
Fuchsia是谷歌给本身买的的一份保险。若是谷歌最终被判侵权,甲骨文将得到Android生态系统或利润的份额,那么Google将杀死Android并迁移到Fuchsia。
可是,Fuchsia要想取代Android,至少必须知足三个前提条件:
我相信取代一个世界上最流行的操做系统将远不止于以上三个条件。 我选择专一于这三个先决条件的缘由是:他们中的每个都是强制性的,并且可能须要很长的时间才能实现。
因此,即便谷歌决定杀死Android转而去支持Fuchsia,咱们仍然会有好几年的时间,由于在短期内没法实现上述目标。
除非... Google今天已经在努力知足这些条件。
Flutter是谷歌新发布的移动开发SDK,支持Android和iOS。它是用一种名为Dart的语言编写的,它在底层不使用Java API。
Steve Yegge(一个将会盗取谷歌的Android系统的人)曾在他的帖子中说过这样一段话:
谷歌是不会被竞争对手所超越的,他们回答说:“哦,是吗?你是不可能与咱们竞争的,由于咱们要与本身竞争!”,因而他们推出了Flutter,说这是一种与原生Android竞争的技术栈,可是他们没有完彻底全的作到这一点,只是Android团队拒绝认可罢了。
这篇文章精确地表达了Flutter所处的荒谬环境。也就是说,我不认为Google确实在与本身竞争。
那么,让我回答另外一个与Android相关的问题:Google为何启动并推广Flutter?
Flutter也是用于编写Fuchsia应用程序的官方SDK,这不是什么秘密。 若是他们决定在有朝一日杀死Android而选择Fuchsia,鉴于谷歌须要创建一个由熟练的开发人员组成的生态系统,那么让Android开发人员提早了解Fuchsia上的应用程序开发是有道理的。
谷歌的Project Treble的官方文档的开头有这样一段话:
The Android 8.0 release includes Project Treble, a major re-architect of the Android OS framework designed to make it easier, faster, and less costly for manufacturers to update devices to a new version of Android. Treble is for all new devices launching with Android 8.0 and beyond (the new architecture is already running on the Developer Preview for Pixel phones).
所以,Google投入了至关大的资源,以减小设备制造商们更新设备至新版本的Android系统的成本。 哇,Google对这些原始设备制造商真的是太好了。
你已经知道会发生什么,对吧?
事实上,我能够向您解释Google是如何抓住每一次机会去为OEM厂商提供帮助的。 我能够告诉你,原始设备制造商中止发布旧设备的更新与Treble无关。 我甚至能够告诉你,Treble并非真的与这一切有关。
说回到Fuchsia。
Android生态系统深受碎片化问题的困扰。 我在这里说的并非Flutter所致使的Android开发方式的碎片化, 我指的是那些影响Android系统自己以及运行它的硬件的碎片化问题。
每一家设备制造商都占据必定的Android市场份额,他们能够根据其需求对Android系统进行更改。例如,设备制造商能够在Android系统里添加使其相机拍摄出来的图像超清晰的专有代码。 若是底层硬件暴露出一些特殊的功能,那么它一样须要在特定的Android系统里考虑到这些。
全部这些问题都是因为这些变化会致使不一样的Android版本之间不兼容。三星手机将没法运行Pixel的的Android版本和副版本。这使得在同一台设备上切换不一样版本的Android系统成为了避免可能,更不用说彻底不一样的操做系统了。
若是谷歌这时候将Fuchsia发布出来,那么就没有设备能够运行它了。 Fuchsia可能须要数月甚至数年才能获得硬件制造商的正确支持。
所以,用另外一个操做系统来替换一个已有的操做系统是很是困难的任务。
幸运的是,Google对软件工程的基本定理是这样描述的:
We can solve any problem by introducing an extra level of indirection.
目前还不清楚这种“indirection”与Project Treble有何关系。
所以,Project Treble并非关于如何帮助硬件制造商或者关心Android用户的。 它彻底是为了确保硬件制造商标准化他们的平台,让他们为Fuchsia作好准备。 我不知道Google是否计划将Fuchsia推向运行Android的设备。然而,很显然,他们但愿移动设备可以在启动时支持Fuchsia。
我认为我能够确定地说今天制造的绝大多数设备都已经支持Fuchsia。
此时,您可能倾向于指出Android和Fuchsia之间的技术差别。这些操做系统的确基于不一样的技术栈。不过,我能够向你保证,谷歌有数十亿条理由让Fuchsia与Android设备兼容。
所以,前面提到的第二个先决条件已经知足了。
为了杀死Android,Google须要确保Fuchsia支持Android应用程序。 这一点不须要我过多的解释。
我计划这部份内容的时间比较长,由于我须要解释Fuchsia如何支持Android应用程序。 我想代表这不是不可行的,谷歌可能已经朝着这个方向前进。
幸运的是,我再也不须要解释这些了。 我能够向你展现9天前的这条推文:
说实话,我尚未认真研究过这段提交的代码,我不彻底肯定它与我在研究的问题是彻底相关的。可是,我不认为这是一个巧合。
那么,前面提到的第一个和第三个先决条件彷佛也已经知足了。
Android社区里有不少淡化Kotlin,Flutter和Fuchsia的声音。 我我的认为,这种状况绝对相当重要,并会给Android生态系统的全部参与者带来巨大的我的和商业风险。
在这篇文章中,我与你分享了我思考这个问题的过程 :从 谷歌为何采用Kotlin? 到Android的Java的路线图是什么? 而后到在Android上正在发生着什么事情?
如今我认为最重要的问题是: Google什么时候会杀死Android?
从技术的角度来看,我估计谷歌能够在一两年内用Fuchsia代替Android。
可是请记住,这一过程与技术无关,也与用户、开发者、设备制造商无关。 惟一块儿做用的因素是谷歌但愿避免侵犯版权的责任,若是甲骨文赢得了诉讼的话。
所以,法庭处理这起诉讼的进程才是决定Android命运的时间表。
若是最高法院赞成听取案件并恢复联邦巡回法院的一项决定,那么Google甚至可能关闭Fuchsia和Flutter项目,而Android将会依然生存下去。
在这一点上,你可能倾向于把全部的这一切怪罪于甲骨文。至少这是我最初的反应,由于我认为Oracle是软件行业的魔鬼。
而后,我问本身:过去甲骨文对个人职业形成了什么伤害?
彷佛没有,做为Android开发人员,我甚至没有参与过Oracle的生态系统。
可是为何我对甲骨文很反感呢?
我认真思考了一下,并得出了一个结论:我即将成为谷歌公关的牺牲品。 多年来,我一直听到一些甲骨文是如何使坏和作恶的的事情,但我历来没有停下来认真想过这个观点。
在了解了甲骨文与谷歌官司的细节以后,我确信甲骨文是正确的。 法院才是那个断定谷歌是否真的有罪的人,但毫无疑问有足够的证据证实甲骨文的行为是正当的。
而后,我想到了若是Google在2005年或2006年或者是2010年从Sun得到了使用Java Api的许可证,Android生态系统将会是什么样子。它会对咱们开发者、设备制造商以及最重要的Android用户形成什么危害? 我实在想不出。
可是,我确实看到了Google的这一决定剥夺了咱们全部人的许多潜在利益。想象一下,Sun或Oracle是Android生态系统的一部分。
那么咱们就不会在等待多年以后才能在Android上支持Java 8。 咱们将成为更大的Java生态系统的一部分,并将得到全部相关的好处。 实际上,咱们将成为最大的Java开发人员群体,而且能够影响整个Java生态系统的演变。
我曾经认为甲骨文是邪恶的。今天,我认为Android开发者,原始设备制造商和用户错过了许多,由于谷歌没有将Oracle视为合做伙伴,而这一切都是因为Google的贪婪所形成的。实际上这是一个很是合理的要求,由于若是您阅读了Oracle与谷歌诉讼中的证据,就会马上明白Sun的Java生态系统是Android成功的主要因素。
在最近的三篇文章中,我与您分享了一些关于Android的现状和将来的很是使人不安的理论。
这些理论多是所有错误的或者是部分错误的。
个人这些想法解释了过去几年Android发生的一切,并回答了今天最棘手的问题。 也就是说,一个好的理论不只解释过去,并且能预测将来。
一个预言已经实现,由于看起来Google确实正在努力使Fuchsia支持Android应用程序。
下面是个人的一些额外的预测:
我不相信上述全部的预测都会成真。然而,若是你看到1至6中的某个预测实现了,那么请注意它增长了预测7实现的可能性。
Android生态系统可能还会有其余的发展,我会尽力关注他们。在这一点上,你可能想知道该怎么作,我也不知道。
正如我所说,根据这一理论,Android生态系统的每一个参与者都面临着我的或者业务风险,它取决于您参与的具体状况。
虽然我不能提出具体的建议,但我认为如下两个建议多是有用的:
相信我,我也但愿个人整个理论最终是废话。