怎么看待谷歌（Google）赢得了跟甲骨文（Oracle）关于安卓使用 Java api 的官司？
这是一件好事，这意味着Java将来会更加开放 之前谷歌和甲骨文的争论焦点就在于，java本身是开源且开放的，那在一个非正规的java环境中，使用跟java一摸一样的api，是否侵权？ 谷歌Google认为，你都开源了，凭什么不让我用？而且根据协议，我也开源了，对吧？java的gpl with classpath exceptions开源协议，谷歌的确修改了源码，所以按照协议，开源了，没毛病，而且当时openjdk并不像今天这帮成熟，所以当时用的是oracle jdk 但是甲骨文Oracle认为，你改了源码开源没问题，但是你不能叫自己叫做java，因为java有一个承诺，那就是compile once, run everywhere，编译一次到处跑，也就是只要是叫做java的地方，就有标准，比如可以执行jar，class等文件，你要遵守这个标准 但是安卓修改了很多地方之后，除了源码兼容以外，编译之后的产物，安卓上是apk，是不能在其它的java环境下执行的，这点跟kotlin，scala等明显不同，而且很要命的是，安卓还叫自己的api是java，但其实这已经不符合java的规范了，那37个api罗列如下： 都是java开发时候，最基础的类库，基本上每一个java开发人员，都用过这37个包 什么意思呢？就是在安卓里面，这些api是客观存在的，你也可以用，用法跟其它支持java的环境（比如linux，macos）下，是一样的 但是，其编译后的产物，以及整个实现的过程，都是不同的，这意味着，虽然语法相同，但是经过编译后的结果，是不兼容的，也就是你用谷歌的这一套生产工具，生产出来的结果，就只能在安卓这个谷歌的平台上运行，那这个其实就不是java，不能实现compile once，run everywhere/编译一次到处跑，安卓上的java从来也没承认过自己是java，只是用了java的语法而已 区别于其它jvm上的语言，kotlin，scala等，这些语言编译后的产物，是兼容java环境的，是能够在不同的jvm上运行的，而且语法跟java不同，且有不同的名字，这些就没有什么问题，所以jvm上语言还挺多，kotlin，scala，groovy，clojure还有一些名气较小的语言 但是安卓上的java正好反过来，语法跟java相同，api相同，没有名字，其实民间就默认是java，然后编译后的产物，又不兼容java环境，那这就造成了一定程度上的混乱，每次说安卓的时候，都要解释半天，说的是哪部分 那这个形成的原因就比较复杂，但是简单说就是，谷歌本身跟java最早的开发公司也就是sun升阳公司，系出同门，都是斯坦福大学的产物，是斯坦福系的师兄弟，所以sun对这个小老弟，颇多照顾，Google也投桃报李，积极参与java的各种规范设计，你今天回头去看很多jsr，jep等java规范文件，都能看到Google的身影，比如di的规范，就是interface21也就是spring作者rod johnson开的咨询公司，跟Google两个凑在一起定的，所以Google有guice，也可以做di，只是用的人少 但是随着sun在商业上的巨大失败，导致sun经营不下去，本想卖给ibm，ibm嫌贵不要，不得已，被迫卖给了犹太人艾立森创立的oracle，但是sun在卖身之前，做了一件非常有种的事，那就是把java开源了，那技术一旦开源之后，其实怎么改，就基本上是一家公司难以控制的事了 所以在制作安卓的过程中，其实就是把sun的java，也就是hotspot，拿过来，改改改，其实安卓本身就是linux和java这两个大的系统的改改改，后来谷歌还雇佣了很多当初在sun制作hotspot的技术人员，比如hotspot之父lars bak，此人在谷歌还做出了v8，就是后来让node.js声名鹊起的那个东西，随后又制作了dart语言及环境，也就是今天flutter使用的那个东西，所以这个人其实很重要，他做一个东西，成一个东西，不管是hotspot还是v8还是dart，我始终就看好这个人，你不妨设想一下，如果没有v8，node.js会是怎样一番光景，python和ruby在web领域止步不前，其实跟这两个语言缺少一个高效率的运行环境有很大关系，如果只是语法的话，js根本跟ruby等没法打，只是ruby没有一个好的运行时，当然现在也有了[1] 随着Google在安卓上的成功，java跟安卓上的java的分歧就越来越大，早期的版本大部分语法相同，但是安卓上的gui部分，是自己做的，跟java缺省的api，也就是swing那些，完全不同，Google很聪明，知道以前java最弱的一块就是gui，但是最早让java声名鹊起的其实就是gui，也就是applet那些东西，swing真是灾难，所以外界对于swing的作者，颇多微词。那不管怎样，Google自己做了一套gui，这就从源码层面，都跟java不兼容了，也就是连api都不一样，那其实这个就彻底分裂了java，java其实有两个部分，一个是安卓上的java，还有一个是其它的java，那这个就是oracle所不能容忍的，于是就希望Google不要继续只用java的api，或者干脆，重新做一个语言，就不要再用java了 而事实上谷歌也是这么做的，那当时lars bak还在谷歌，现在好像离开了，而且lars bak正在谷歌做一个在前端替代js的语言，叫做dart，那在这个前提下，谷歌其实最好的方式，就是在内部，找一个跟java接近，且能够替代java的语言，然后重新构建生态 对了，这就是flutter 所以今天回头看这场谷歌和甲骨文的旷日持久的官司，其实未必是坏事，它催生了很多产品，比如flutter，kotlin，graal这些都是在安卓上的java和java被迫分道扬镳之后，催生出来的产物 在这场官司还没尘埃落定之前，继续使用java是有风险的，所以安卓上的java，版本一直上不去，就不敢继续兼容java语法了，安卓上的dalvik后来引入了kotlin，官方也开始支持kotlin语法，同时也制作出来flutter以及flutter所使用的dart语言，dart一开始的语法设计，跟java几乎是一样的，但是dart现在也开始慢慢偏离java，开始借鉴和学习swift，kotlin的语法，比如最新引入的空安全，这个就是java所没有，但是swift和kotlin有的语法特性，还有什么三个点啊，const等关键字，都是java目前还没使用的语法 另外一方面，正经的java，也在发展，oracle后来投资大学，做出了graal编译器，使得java能够真正被aot，也就是编译成native code，那这样的话，就意味着可以用真正的java来制作安卓上的应用，其实在graal之前，就有一些民间的，把java编译成native代码的第三方应用，比如robovm之类的，但是这些第三方技术，多数被收购了，甚至被恶意收购破坏了，比如robovm后来就被xamarin收购，xamarin后来又被微软收购，微软就赐死了robovm，还有俄罗斯那边有一家公司做了excelsior jet，后来被华为收购了，好像就不再继续开源了，那不管怎样，这些都不是正规的，官方的产物，都存在有一些问题以及不确定性，所以graal编译器才是正统之道，毕竟官方的产品 然后在graal诞生之后，知乎上有一个小妹妹，叫做glavo，就尝试用graal编译javafx，也就是java后来重新设计的gui，发现崩了，所以就过去提交了一个issue，于是引起了graal的注意，因为一开始，做编译器的人也没想过要去编译javafx，然后又过了两年，在javafx和graal两个技术组的努力下，真正使得javafx在graal上能够编译通过，那这样就具备了编译成安卓上应用以及苹果手机上应用的可能性，同时也使得kotlin，scala等jvm上的语言，也可以用来写app了 所以这个官司今天回头看，未必是坏事，它就像一只下金蛋的母鸡，催生了很多技术和产物，谷歌也开始偏离java，形成了自己的一套生态系统，java也在与时俱进，将自身编译成native，也具备有了上安卓和苹果手机的基础 这说明一点，业界良性的竞争，对社会是有利的，今天你回头看，不管是安卓上的kotlin，还是flutter，以及java/graal/javafx那些，都比当初的安卓上的java，要好太多，无论哪方面 这个官司尘埃落定，最多也就是让oracle不能向其它公司要钱了，但是技术上的分道扬镳，也就是谷歌形成自己的一套生态，正统java形成一套自己的生态，也已经是大势所趋，各方面技术都已经慢慢浮现并接近成熟，再回去让谷歌用变种的java搞安卓，已然不太可能