Java、SQL 十年混战史:Oracle 告 Google、“窃”IBM 往事

头图 | CSDN 下载自东方 IC

出品 | CSDN(ID:CSDNnews)

以下为译文:

十多年前,Google 重新实现了 Java 编程语言,作为其新的 Android 移动操作系统的一部分。Java 的所有者 Oracle 公司随后在 2010 年起诉 Google 侵犯版权。本月晚些时候,最高法院将对这起史诗般的 API 侵权案举行听证会,这起侵权诉讼案的判决将对整个软件行业产生深远影响,并且可能给 Google 公司带来数十亿美元的巨大损失。

Google 公司宣称它并没有做错什么。因为联邦版权法明确将“系统”和“操作方法”排除在版权保护之外。Google 辩称,它复制的 Java 函数名、参数类型等等内容完全符合这个例外。Google 同时还辩称,版权的合理使用原则允许这种形式的复制。

该案正受到整个软件行业的密切关注。微软和 IBM 等公司警告称,Oracle 公司的立场可能会给软件行业带来混乱。他们认为,判决这种复制形为“非法”不仅会给许多软件公司带来法律上的麻烦,同时也会损害客户的利益。

软件公司一直以来都在复制竞争对手产品的软件接口(行业行话称之为“应用程序编程接口”,亦即 API),这种复制使得相互竞争的软件产品可以互操作,这样客户就可以把设计为在一个平台上使用的软件,放到另一个平台上重用它。对客户来说,这意味着转换成本的降低。这一点对软件初创公司来说尤其重要,因为这意味着更低的进入门槛,而且如果一种新产品与客户已经了解并信任的软件产品相互兼容,那么销售这种新产品就会更加容易。

如果要说有人“应该理解”这种复制的重要性的话,那非 Oracle 公司莫属。毕竟,Oracle 公司在上世纪 70 年代就开始销售基于当时新的结构化查询语言(SQL)的数据库产品。而 SQL 语言是 IBM 公司发明的,但是 Oracle 公司似乎并没有获得它的使用许可。

如果 Oracle 赢得了这场官司,一个具有讽刺意味的结果将是:软件行业将对像 Oracle 起步时的初创企业不再友好。现有的软件公司将有更大的能力将客户锁定到自己的专有标准中。初创企业将不被允许像 Oracle 公司 40 年前所做的那样:让其产品与一个既定的竞争对手的产品兼容,然后让互操作性成为一个卖点。

正如我将在下面解释的那样,Oracle 公司对 SQL 的复制看起来与 Google 公司对 Java 的复制非常相似。但 Oracle 公司的发言人不同意这种说法。她在周二的一封电子邮件中写道:“这是一个错误的前提,就像拿苹果与西兰花进行比较一样,完全背离了案件的事实”。

历史重演/strong>

对于这个故事,我阅读了两本关于 Oracle 公司历史的书,并阅读了几篇对 IBM 内部人士的深入采访。Oracle 公司甚至似乎没有试图从 IBM 获得 SQL 的许可授权,所有相关人员似乎都认为 Oracle 不需要这个许可授权。

相比之下,Google 公司在最终决定不获取 Java 的许可授权之前,确实和相关方面接洽讨论,试图达成一项许可协议。

当 Google 公司在 2000 年代中期开始开发 Java 时,这项技术归 Sun 公司所有,而 Oracle 直到 2010 年才收购了 Sun 公司。2005 年,Google 公司就一项许可协议与 Sun 公司接洽。Google 坚称,它从未试图获得 Java 接口的授权,因为(在 Google 看来)法律并不要求这样做。但 Google 表示,两家公司初步同意 Google 向 Sun 公司支付 2800 万美元,用于许可 Java 相关专利、Java 商标和其他资产。

然而,Google 声称“谈判因与金钱无关的问题而破裂。”Google 表示,Sun 公司寻求对 Android 平台的演进拥有更多的控制权,而这超出了 Google 愿意接受的范围。因此,Google 公司决定在没有 Sun 授权的情况下构建自己的 Java 版本。

这意味着 Google 要从 Java 语言的功能规范开始开发,这些规范是保证这是 Java 语言的一套基本规则。它包括关键字、语法规则以及标准函数的名称和参数类型。但是除了一些有争议的例外,Google 并没有像 Oracle 对待 SQL 那样,复制这些功能的实现代码。Google 的工程师从头开始编写自己的代码,这些代码生成的结果与 Sun 的 Java 代码生成的结果相同。

尽管没有达成授权协议,但是 Sun 公司首席执行官乔纳森·施瓦茨(Jonathan Schwartz)在 Google 最终宣布 Android 系统将基于 Java 时,还是表现得非常热情。

施瓦茨写道:“我只想像 Sun 公司的其他同事一样,衷心祝贺 Google 公司宣布推出新的基于 Java/Linux 手机平台的 Android 系统。”。

但是被 Oracle 收购后,公司的态度发生了变化。随着 Android 系统的采用率飙升,Sun 的新东家看到了从 Google 公司获得数十亿美元的机会。所以在收购 Sun 后不久,Oracle 公司就对 Google 提起了诉讼。

Java 语言 vs. Java API

另一个重要的问题是,复制编程语言是否不同于复制相关的 API。要理解这个问题,需要深入了解 Java 语言是如何组织的。

Java 分为两部分。一部分是核心语言规范,它定义了像”n = a + b;” 或 “return(true);”等语句的语法和含义。另一部分是 Java API。这是一个类库和函数库,随着每个现代 Java 系统一道发布。

Java API 非常庞大。它是以包的层次结构来组织的,有些包有几十个函数。加州联邦法官威廉·阿尔苏普(William Alsup)曾在加州审判法庭上裁定 Google 胜诉,根据他的统计,Google 重新实现了 Java API 的 37 个包、616 个对象类和 6,088 个函数。

这意味着 Google 完全复制了 6,088 个 Java 函数的名称、参数类型和预期输出。但它并没有复制在这些函数中真正起作用的代码。相反,Google 的工程师们从头开始重新编写这些函数,以一种可能与原始 Java 实现完全不同的方式生成相同的运算结果。

例如,Google 复制了一个名为 java.lang.Math 的 Java API 包。它包括了像 max 这样的函数,函数定义是”int max(int a, int b);”。顾名思义,这个函数接受两个整数值并返回较大的那个整数。或者像 sqrt 这样的函数,函数定义是”double sqrt(double a)”。它接受一个数字(可能是整数,也可能不是整数)并返回其平方根。

当然,max 函数是一个非常简单的函数,两个有经验的程序员可能会想出相同的实现。但对于更复杂的功能,Google 公司和 Oracle 公司的实现应该看起来会大不相同。

Oracle 公司起诉 Google 复制了这些 API 函数的名称和参数。但是它没有起诉 Google 抄袭核心 Java 代码。显然,Oracle 公司认为 Google 可以开发出一种能够解释基本 Java 语句的编程语言。但 Oracle 似乎认为,Google 在抄袭 Java 的大型支持函数库时越界了。

如果这一区别成立的话,它可能会将 Oracle 复制 SQL 的行为与 Google 复制 Java 的行为区分开来。IBM 的 SQL 在 1979 年没有一个庞大的支持函数库供 Oracle 公司复制。因此,如果“语言复制”可以,但“API 复制”不行这个观点成立的话,那么 Oracle 公司在它自己的 API 版权理论下可以说没有做错什么。

但是格里梅尔曼认为,在编程语言和 API 之间划出法律意义上的区别并不合理。

他这样告诉我们:“SQL 本质上是一个通用的数据库 API,SQL 语句中有一些动词是命令。同时有一些参数,一些格式和一些语法糖来将它们结合在一起。”

目前尚不清楚版权法会不会区分核心语言和相关 API。比如说,为了执行一个加法运算,Java 不会使用”n = a + b;”,而是要求用户调用这样一个 API 函数:”n = sum(a, b);”。如果版权法保护带有前缀和括 的字符串“sum”,却不保护中缀符 “+”,这从道理来讲很难让人接受。如果一个可以受到版权保护,另一个也应该受到保护。

从本质上说,API 是一种用来在计算机程序之间进行通信的语言,SQL 或 Java 之类的语言都是 API 的一种类型。成熟的计算机语言往往比其他 API 具有更加复杂的语法规则。但潜在的版权要素,如关键字、参数类型、语法规则是相似的。如果传统 API 中的函数名可以受版权保护,那么计算机语言中的关键字似乎也可以受版权保护。其中包括“select”、“from”和“where”这样的 SQL 关键字。

推荐阅读 

尔·盖茨退出微软公司董事会;苹果 WWDC、微软 Build 大会均改为线上举办;Rust 1.42.0 发布| 极客头条

1 国股市熔断,“祸及”程序员

.2版本发布!TensorFlow推出开发者技能证书

oul App 高管被捕,恶意举 导致竞品被下架

020 年最新版 68 道Redis面试题,20000 字干货,赶紧收藏起来备用!

近一个名为 BTCU 的比特币分叉,准备用新分叉解决比特币 络的旧问题

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年2月11日
下一篇 2020年2月11日

相关推荐