鏖战九载,Google 是否会因 Oracle 而弃用 Java?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鏖战九载,Google 是否会因 Oracle 而弃用 Java?相关的知识,希望对你有一定的参考价值。

技术分享图片

在过往的九年间,Google 因旗下全球第一大操作系统 android 中是否合理使用 Java 的问题,已经与软件巨头 Oracle 大战了三百回合,但一直没得到最终的定论。

而如今,随着 Google 官方博客中一则名为《Oracle v. Google and the future of software development》声明的发布,标志着这一案件的最后一战即将打响。在声明中,Google 全球事务 SVP 兼首席法务官 Kent Walker 表示“我们请求美国最高法院审查 Google 与 Oracle 在软件接口使用方面长期存在的版权纠纷。案件的结果将对整个计算机行业的创新产生深远的影响。”

这意味着 Google 已经向美国最高法院提出审理与 Oracle 之间有关 Java 版权问题的请求。其中如果最高法院接受案件审理,那么 Google 或许还有翻盘 Oracle 的可能;但如果最高法院拒绝审理此次案件,那么 Google 只能执行去年 3 月份美国联邦巡回上诉法院的裁决结果,即 Google 使用 Java 开发 Android 系统的行为的确侵犯了 Oracle 的版权,需向对方赔付 88 亿美元。

回顾正常案件,这看起来仅是部分代码的事件为何会演变成为如今这般情景?Oracle 的胜诉又将带来怎样的影响?最终是否会导致 Google 弃用 Java?全球的软件开发者又该何去何从?

全球第一大操作系统 Android:树太大招来了强风

提及这一事件的根源,其实还得从 Google 的 Android 系统讲起。

21 世纪以来,各大科技巨头暗中发力,为移动互联网的新纪元做足了准备,其中 Google 也不例外。2005 年,Google 在低调地将成立仅 22 个月的高科技企业 Android 及其团队收购后,迫切希望以此为契机能打破塞班统治的手机操作系统市场格局,抢占移动互联网下智能手机领域的先机。然而在美好的愿景之下,如何才能突破常规,打造出更出彩的操作系统生态?

当然首要因素是需要适用于诸多的开发者及用户,而这前提就需要 Google 去选择一门成熟且极具前景的编程语言为基础。

在彼时的环境之下,和广泛应用于桌面系统软件开发的 C++、非面向对象的 C 语言、社区生态不够庞大的 Python 等语言相比,具有良好的跨平台特性以及拥有成熟生态系统的 Java 无疑中成为了 Google 最佳的选择。

不过值得注意的是,当时的 Google 并没有直接将 JVM 直接搬到 Android 上,而是自己使用 Java API 设计了一个能够运行 Android 应用程序的虚拟机——Dalvik,在这过程中,Google 并未向当时 Java 的拥有者 Sun 公司获取 API 的授权,而正是因此,才引发了后来两大巨头有关 Java 的版权之争。

Google 与 Oracle 之间的 9 年之争

2009 年,纯软件先驱 Oracle 以 74 亿美元收购了 Sun 公司、并接手了 Java 的拥有权。然而令人唏嘘不已的是,第二年即 2010 年 8 月,Oracle 就以一纸文书将 Google 告上了法庭,称迅速占领移动操作市场的 Android 系统侵犯了七项 Java 版权和专利,同时要求 Google 赔偿 26 亿美元。虽然 Oracle 律师 Annette Hurst 曾正面回应,Oracle 收购 Sun 公司并不是为了对 Google 发起版权诉讼。但是在收购第二年就急切地提出诉讼,这一行为免不了让业界人士的猜想一番。

对此,Oracle 方坚持的态度是,Google 明知道 Java API 是受版权保护的,还故意而为之,目的就是为了让传统的 Java 程序员能很好地往 Android 平台过渡,为 Android 的生态带来丰富的应用程序。与此同时,Android 背靠 Java 这棵大树,才会大获成功,为 Google 带来了巨大的商业价值。简而言之,没有 Java,Android 不会有今天的地位。

而另一面,Google 则一直强调对于开源的 Java,自由使用 API 是业界的正常做法,暗示着自己并不知晓 Java API 是具有版权保护的。

不过,对 Google 颇为不利的是,Oracle 在随后的对弈中,收集到了一封Android 之父 Andy Rubin 邮箱的企业内部邮件,其中提到 Google 内部试过替 Android 和 Chrome 寻找 Java 以外的替代方案,但那些替代方案都很糟糕,所以需要协商 Java 的授权问题。这意味着 Google 私底下都是知晓 java.lang 是受版权保护的。

在此不利的情况之下,2011 年 3 月,Google 聘用了 Java 的创始人 James Gosling 来为自己站台。而自此之后,Google 和 Oracle 之间的 Java 侵权事件也开始愈演愈烈:

2011 年 9 月,Google 和 Oracle 双方 CEO 第一次庭外和解失败。
2012 年 3 月,Oracle 不接受 Google 280 万美元赔偿方案。
2012 年 5 月,陪审团认为 Google 使用了 9 行范围检查的 Java 代码构成侵权,代码如下:
private static void rangeCheck(int arrayLen, int fromIndex, int toIndex) {
if (fromIndex > toIndex)
throw new IllegalArgumentException("fromIndex(" + fromIndex +
") > toIndex(" + toIndex+")");
if (fromIndex < 0)
throw new ArrayIndexOutOfBoundsException(fromIndex);
if (toIndex > arrayLen)
throw new ArrayIndexOutOfBoundsException(toIndex);
}
同月,William Alsup 法官推翻了陪审团认为 Google 侵权的意见,称 API 不应该受版权保护。随后,加州北区法院裁定 Android 系统没有侵犯专利,Java API 不存在版权,Google 赢得短暂胜利。
2012 年 10 月,Oracle 不满判决结果,于是上诉至美国联邦巡回上诉法院。
2014 年 4 月,美国联邦上诉法院判定 API 受版权保护,Google 侵权,须赔偿,Oracle 赢得胜利。
2014 年 10 月,Google 不服判决上诉至美国最高法院,请求高院介入。
2015 年 6 月,美国最高法院驳回了 Google 在软件版权诉案中提出的上诉申请,维持原先的判决。
2015 年 10 月,案件退回美国地区法院,由 William Alsup 法官再次审理。
2016 年 4 月,双方庭外和解会议再次失败。
2016 年 5 月,旧金山联邦法院对该案复审。
2018 年 3 月,美国联邦巡回上诉法院裁决,Google 侵犯了 Oracle 的版权。
2018 年 8 月,Google 提出上诉,但美国联邦上诉法院宣布拒绝重新审理此案。

Java 侵权案升级为行业的 API 版权之争

时针走到了现在,也正如文章伊始所述,Google 寄最后的希望于最高法院。但无论最高法院受理与不受理,这将都是一场有关 API 的版权论。

作为将复杂软件系统结合在一起的粘合剂——应用程序接口,Google 全球事务 SVP 兼首席法务官 Kent Walker 在声明中表示道,“标准化的软件接口推动了软件开发的创新。它们让计算机程序可以相互交互,让开发者能够轻松地基于不同平台构建技术。”

同时,Kent Walker 认为:

随着智能手机应用程序的普及,我们往往会忽略开发者在各种不同平台上创建应用程序的难度。而在 2008 年,Google 发布开源的 Android 平台改变了这一现状。它帮助开发者克服了更小的处理器、有限的内存和更短的电池寿命带来的挑战,同时为智能手机开发提供创新的特性和功能。最终带来双赢,即开发者可以更方便地构建新的应用程序,制造商可以创造出优秀的新设备,由此产生的竞争可以使消费者既享受更低的价格,也可以获得更多的选择。Google 根据计算机行业长期接受的重复使用软件接口的做法构建了 Android,这些接口提供了一组命令,可以轻松实现常用功能,譬如按下“Ctrl”+“P”键盘快捷键,就可以触发打印功能,使打印变得容易。Android 开创了一个变革性的新平台,同时让数百万 Java 程序员使用他们现有的技能来创建新的应用程序。而 Java 的创造者支持 Android 的发布,并称它“给(Java)社区的发展安上了火箭。”但在 2010 年收购 Java 之后,Oracle 起诉 Google 使用这些软件接口,试图通过事后改变软件开发规则且从中获利。Oracle 的诉讼声称自己有权控制软件接口即软件开发的基石,由此也能够锁定投资于学习免费和开放 Java 语言的开发者社区。旧金山法院最初裁定,在这种情况下,软件接口不具有版权,但该决定后来被驳回。陪审团曾一致地认为 Google 对接口的使用是合法的合理使用,但该决定后来同样被否决了。除非最高法院纠正这两个否决,否则这个案例将终止开发者自由使用现有软件接口为消费者构建新一代计算机程序的传统能力。就像我们都学会使用计算机键盘快捷键一样,开发者已经学会使用不同编程语言相关的许多标准接口。如果不撤销以上两次的否决,那么这些立场将把开发者有效地锁定在单一版权所有者的平台上,就好比是键盘快捷键智能用于一种类型的计算机上。

Google 胜不了或许会放弃,Oracle 赢了又怎样?

对于事件的最终结局,现在还存在很大的不定性。在 Google 看来,除非最高法院介入,否则当前联邦巡回上诉法院裁决将对软件行业带来颠覆性的冲击。但其实自从和 Oracle 杠上之后,Google 在全力上诉的同时似乎也为自己做好了败诉的退路:

2016 年,Google 宣布 Android 系统采用 OpenJDK;
2017 年的 Google I/O 大会上,Google 宣布将 Kotlin 作为 Android 官方支持的开发语言;
过去一直有传言,Google 秘密研发的 Fuchsia 系统在未来将会统一 Android 和 Chrome OS 系统,而从 Fuchsia 项目此前提交记录上显示,它或将支持 Java 了。
技术分享图片

而对于 Oracle 而言,若这一案件胜诉,最终又将收获到什么呢?

事实上,从近几年的科技行业发展来看,迫于 Oracle 昂贵的软件服务费用,亚马逊、SPA、Salesforce 等巨头们纷纷发出“弃用 Oracle”的声音。与此同时,在 Oracle 宣布 JDK 8 将收费以及 OracleJDK 无法免费商用之后,不少开发者也诞生弃 Java 而转其他编程语言的念头,对此亚马逊甚至自己研发了一款 OracleJDK 的替代品—— Corretto,以备不时之需。

整体而言,此次 Oracle 倘若胜诉,显而易见的是,其必然能够收到来自 Google 的高额赔偿,且能够颠覆了行业中对于 API 固有的“无版权”定义,但估计也难免不会再一次地成为众矢之的。

开发者何去何从?

不过,对于绝大多数的 Android 开发者来说,因 Google 和 Oracle 之间的官司,让自己直接放弃成熟且拥有庞大技术支持的 Java,似乎也显得不现实。

而且事件发展到如今,事实上,早已不单是 Google 和 Oracle 两家的商业之争,而是整个软件行业的标准化的问题。如果此次事件中,联邦巡回法院的最终判决获得最高法院的支持,这意味着 API 是受版权保护,那么它可能会迫使软件行业的开发方式发生巨大变化。

过往,软件开发者可以直接基于已创立的软件平台和标准功能进行开发,这样能确保他们的新产品与已经存在的产品兼容。有时,这种兼容的软件会打包到开源库中,供其他人免费使用,并且可以与其他程序捆绑在一起以生成更大的软件包。彼时的开发者普遍认为 API 不受版权保护,且企业也并不担心自己开发的项目是否中引入了第三方 API 库。

现在,联邦巡回法院的裁决倘若真的开始执行,那么可能导致很多引入第三方的 API 软件会在一夕之间受到版权侵权索赔。对此,美国最高法院最终是否会受理次案件,目前尚未可知。如果受理,预估计今年秋季会有消息。

而针对这一现状,Hacker News 上的网友也展开的激烈的讨论:

@int_19h:鉴于 Oracle 此前曾在法庭上胜诉,人们至少要接受法律真正允许 API 受版权保护的可能性。但如果是这样,法律需要迫切修改 API 的性质,至少从共有的角度来看,是互操作性问题超越其他一切。如果企业为了自己私有的商业利益而对 API 进行版权保护并阻止竞争对手使用自己的 API,那么这对整个行业来说是非常不利的。
@toyg:Oracle 实际上并不缺钱。它们之所以这么做是想要将长期受苦的客户从本地产品往云端产品过渡。但是现在很多人不相信他们,你可以和一条每年出现一次的鳄鱼进行交易,但是在你使用 SaaS 时,你基本上是一直在鳄鱼身边行走,希望它不会在提前一天通知你的情况下以更高的价格咬你。在这种情况下,让 Google 为 Android 交税是值得的。
@nradov:控制主流的平台具有很大的优势。即使 Oracle 没有从 Java 中获得多少直接的收入,但是他们也可以用它来阻止竞争对手。
从道德的角度来看,Google 在 2005 年破坏了 Java 生态系统,而不是就版权问题和 Sun 进行谈判,他们的行为很不合理。但是我还是希望 Google 可以赢。
**这里是程序员秘密聚集地,各位还在架构师的道路上挣扎的小伙伴们速来

加QQ群:611481448
**

以上是关于鏖战九载,Google 是否会因 Oracle 而弃用 Java?的主要内容,如果未能解决你的问题,请参考以下文章

可变地址会因我们是否使用它而改变?

信用卡交易是不是会因测试交易而被拒绝?

Jenkins 构建会因覆盖率下降而失败吗?

为啥 gorm db.First() 会因“无效的内存地址或 nil 指针取消引用”而恐慌? [复制]

Oracle 胖客户端是不是支持数据库更改通知?

C 中的这段代码决定一个数字是不是是素数,它会因大数而崩溃。为啥?