Java的版权和各大公司的博弈

来源:互联网 发布:android 视频直播源码 编辑:程序博客网 时间:2024/05/21 17:19

        Oracle和Google关于Java侵权的官司持续5年多了, 闹得沸沸扬扬, 我就是想搞清楚其背后的来龙去脉以及利益争夺.

        Sun推出Java后, Java所向披靡, 大行其道.

        虽然Java语言是公用的, 但是Java虚拟机, JDK一直是Sun的私有产品. 要商用, 就得向Sun购买授权.

        IBM通过向企业提供java的服务, 赚了很多钱, SUN也赚了不少.
        2005年, Apache Harmony项目建立, 目标是建立开源的JDK.仅仅API和Sun的JDK相同, 实现完全不同.
       做这个事, IBM是最有动力的, 所以IBM贡献了很多代码.
       Harmony开发了JDK之后, 必须要通过JCP的TCK测试, 才能对外宣称自己完全符合java规范, 于是从2007年开始申请TCK.

       但是Sun此时有自己的考虑.:
       首先, Apache的开源协议是非常宽松的, 它允许任何人使用该代码, 甚至是商业用途. 如果把TCK给了Harmony, 那么以后jdk就完全免费了, 谁还来买Sun的授权呢?
       第二, JDK分为J2SE, J2EE, J2ME, 其时J2SE基本是废了, Sun也赚不到什么钱, 但J2EE可是一块肥肉, SUN在上面赚到很多钱, 此外, J2ME在当年看起来也前途无量, 2007年的时候, 正是移动起飞的时机.

        所以Sun采取了两个措施来对付Harmony:
        第一, 仅仅授予Harmony在J2SE的TCK.
        第二, 开源自己的Java源码成为OpenJDK, 但是是已GPL协议开放, 也就是说,如果商业机构要使用免费的OpenJDK, 那么商业机构将必须遵守GPL协议而开放自己的商业软件的代码.所以, 基于GPL的开源, 不会断掉Sun的财路.
        第三, 不知是迫于压力还是良心发现, Sun对J2SE和J2EE采用了LGPL协议, 即如果商业机构如果以jar包的形式不更改地使用源码,可以不公开其软件代码. 但是, J2ME是完完全全的GPL协议.
        当然, SUN开放JDK源码的最主要目的不是对付Harmony,  主要原因还是对SUN有利, 有利于在Linux(也是遵循GPL协议)上推广Java, 用来抵御Python和Perl的竞争.

        Harmoy在2010年申请不到TCK后, 愤然退出了JCP. 此后IBM看到有了OpenJDK, 也辞去了Harmony主席的职务, 再后来Harmony就关闭终结了.


        然后是Google收购了Android, 其中采用了Java作为开发语言. 这时Google怎么来绕过Java的版权问题呢?
        有了Harmony的前车之鉴, Google采取了聪明的做法, 没有去试图开发一个完全兼容Java规范的JDK, Google虽然使用Java语言, 但是并没有尝试写一套真正的JDK, 也就无需通过JCP的TCK测试.但是Google的java语言在写代码层面是完全遵守Java规范的. 但是其底层的Java虚拟机和Java类库, 都是自己从头写的.
       那么问题来了, 第一, Google为什么不采用开源的OpenJDK?
       这是因为, 如果使用OpenJDK的J2ME, 那么就必须遵守GPL协议, 那就必须使Android开源, 这倒没什么, Android本身也是开源的, 但是那些利用Android进行定制的厂商,他们可不愿意开源啊! 比如小米, 三星.
       问题二, Google的虚拟机和类库是怎样快速完成的?
       写一个JDK, 最难的部分不是虚拟机, 而是庞大的类库. Google的做法很简单, 自己重写一个简陋的虚拟机,后面再迭代. 类库就直接移植Harmony的java类库! 注意Harmony是基于Apache协议的, 移植是不需要公开软件代码的. 此后经过N个版本的迭代, Android虚拟机已由最初的连JIT都不支持, 到现在支持AOT了.


       那么, Google有没有侵权?
       对于这个问题, 其实不管有没有侵权, 肯定都是要搞你的, 谁叫你Google这么有钱呢? 同时又在河边走呢?
       但是对于当时的Sun来说, 已经日薄西山, 连打官司的钱都拿不出来了,只好眼看着Google在河边走得挺欢. 2009年Oracle收购了Sun, 收购的目的之一, 我猜想其中肯定有一条是去敲诈Google. 2010年Oracle对Google提起诉讼. Google先是赢了一场, 后面又输了一场. 2014年中级的审定结果,判定Google侵权, 主要有两点:
       1, 在代码层面上, Google有9行代码的侵权, 但是这个侵权太小了, Oracle拿不到钱
       2, 法院认定Google在Java的API设计上有侵权, 对于java中166个package, 其中有33个是oracle的专属包,没有进行开源, 法院判定侵权. 这个点也是本案的争议所在,因为之前法院对API设计的雷同是不认定为侵权的.
       2015年6月29日晚间消息,美国最高法院宣布,不会针对谷歌与甲骨文专利侵权案的上诉举行听证会,从而维护了低等法院之前的裁决,即谷歌需要向甲骨文支付Java使用费.

        最近的消息表明:“Google证实下一版(2017年发布)Android不再使用Oracle专属的Java API,Android N”将仅仅依赖于OpenJDK.

        这里我们可以推断, Google未来会采用OpenJDK的API接口,剔除Orcale的专属接口, 但是java运行环境里面的类库应该还是Harmony的.


0 0