vlambda博客
学习文章列表

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

在计算机的历史长河中,Oracle(甲骨文)是一家极具争议的公司,吴军在《浪潮之巅》之中将其定义为「纯软件公司的先驱」,即开启只开发软件,然后靠软件的使用费(License Fee)生存的商业模式。Oracle 与 Google 旷日弥久的关于 Java API 版权案十数年下来,直接影响了 Android 的走向,而另一方面,Oracle 自身还面临着众多侵权争议,比如前不久爆出的,以及 Oracle 创业之初,Larry Ellison 从 IBM 科学家那里学习到的关系型数据库。

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

作者 | TIMOTHY B. LEE
译者 | 苏本如,责编 | 唐小引
图 | 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 公司的发言人不同意这种说法。她在周二的一封电子邮件中写道:“这是一个错误的前提,就像拿苹果与西兰花进行比较一样,完全背离了案件的事实”。


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

Oracle 起步于复制 IBM 的软件接口


自上世纪 70 年代初开始,IBM 的研究人员开发了一种新的数据库组织方法,称之为关系模型。这种模型使得在数据库上执行复杂的查询更加容易,IBM 为此创建了一种新的语言,称为结构化查询语言(Structured Query Language,亦即 SQL),以帮助用户制定这些查询。一个典型的 SQL 语句类似于下面这样:

select customer_name, ship_date from orders where product_id=17 and state='CA'

这里有两件事要注意。首先,SQL 语言具有一个简单的类似于英语的语法。没有编程或数据库管理背景的人可以通过阅读这个语句大致了解它的作用。其次,SQL 是一种声明性语言:即用户指定他们要查找的信息,而数据库系统决定如何查找信息。

这两个特性结合在一起,就能够让那些没有经过计算机编程正规培训的人特别容易使用 SQL。只需要经过一点点实践操作,非程序员也可以编写 SQL 查询来完成各种任务。

1974 年,IBM 公司的一个研究小组开始在一个名为 System R 的软件包中实现这些想法。大约在同一时间,IBM 的研究人员(他们既视自己为计算机科学家,也视自己为软件开发人员)发表了关于他们的研究成果的论文。这些发表的论文涉及了非常详细的内容,包括 SQL 语言的完整规范。

IBM 在几年内就有了 System R 的工作版本,但它从未打算让其成为商业产品。直到 20 世纪 80 年代初,IBM 才最终发布了一个基于 SQL 语言的商业数据库。

1977 年左右,拉里·埃里森(Larry Ellison)和他的联合创始人发现了一个商机。他们刚刚成立了一家名为软件开发实验室(Software Development Laboratories)的软件咨询公司,但他们想转型为软件产品销售。埃里森意识到 IBM 的白皮书中有足够的细节来克隆 IBM 的数据库技术。他还意识到,如果能够说他们的新 Oracle 数据库与 IBM 的 SQL 标准完全兼容,就可以让他们在客户面前提高可信度。

钱伯林在 1995 年的一次采访中说,埃里森“听说过 System R 原型,他想确保他的产品与其完全兼容,甚至错误代码也要一模一样。”。钱伯林说他很乐意分享更多的信息,但是他的老板拒绝了这个想法,宣布错误代码是保密信息。

不过,IBM 的 System R 白皮书包含了大量关于 SQL 工作原理的细节。因此,埃里森和他的团队可以借此向前推进,在 1979 年发布了 Oracle 数据库的第一个版本。并且该公司一再大力宣传该产品与 IBM 和 SQL 的渊源。

“Oracle 数据库的用户界面是 SQL,这是 IBM Advanced Research 部门开发的关系型数据库语言。”一份早期的 Oracle 公司的宣传单如是说。

比 IBM 抢先两年上市,使 Oracle 公司获得了可观的市场份额。Oracle 公司因此在未来几年里保持了其作为 SQL 数据库领导者的地位。

System R 内部人士继续争论 IBM 发布 SQL 的详细信息是否是一个错误。很明显,这让埃里森在市场上击败了 IBM,抢走了 IBM 的市场份额。但一些内部人士认为,System R 白皮书的发布对于这项技术产生足够的轰动而引起 IBM 在第一时间认真对待是至关重要的。

IBM 的一位资深人士 Mike Blasgen 在 1995 年说:“如果我们不发表这些论文,SQL 就会失败,因为 IBM 会无视它。”


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

历史重演?


对于这个故事,我阅读了两本关于 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、SQL 十年混战史:Oracle 告 Google、“窃”IBM 往事

Java 和 SQL 的案例有何不同?


Google 和 Oracle 的案例有一个很大的不同之处:Google 复制了 Sun 已经在市场上发布的一个产品。相比之下,Oracle 复制了一个 IBM 尚未发布的产品,它依靠 IBM 发布的白皮书来了解 IBM 最终的 SQL 数据库产品将如何工作。

但康奈尔大学的版权学者詹姆斯·格里梅尔曼(James Grimmelmann)认为,从版权的角度来看,这可能并不重要。如果复制一个已交付软件产品的 API 侵犯了版权,那么从有关软件产品的文档中复制 API 也是侵犯了版权。

格里梅尔曼在一月份的一次采访中告诉我们:“IBM 的论文也是受版权法保护的作品,从 IBM 论文发表的规范中大量复制也属于同样的复制行为。如果 SQL 规范可以获得版权,那么无论它是从正式软件复制,或者从白皮书中复制,版权都同样适用。”


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

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 关键字。


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

最高法院决定很快复审此案


这里还有更大的担忧,目前尚不清楚 Oracle 公司主张的“API 版权”适用范围究竟有多大。在 2010 年 Oracle 公司提起诉讼之前,软件行业的许多人都假设软件接口不受版权保护。所以他们不太担心不同类型软件接口之间的细微差别。

Oracle 公司的胜利将会打开潘多拉的魔盒。也许法院最终会裁定 API 版权延伸到编程语言的核心特性。或者他们会找到一个法律原则来区分普通的 API 和编程语言。但不管怎样,都会有很多不确定性。要弄清楚哪些软件接口得到版权保护,需要数年的诉讼和数百万美元的法律费用。

最高法院定于两周后的 3 月 24 日审理此案。Google 在地方审判法庭赢得了多项裁决,但是每一项裁决都被联邦巡回上诉法院驳回。Google 将试图说服最高法院的法官,让他们相信初审法院的判决是正确的,而上诉法院的判决是错误的。

从技术上讲,有两种方式可以让 Google 公司赢得诉讼。Google 和许多软件行业人士青睐的方式是,最高法院裁定软件接口不受版权保护。这是很多人在 Oracle 2010 年提起诉讼之前认为的法律,它将为未来基于 API 复制的版权诉讼提供最有力的辩护。

或者退而求其次,最高法院可以认定软件接口有时可以获得版权保护,但 Google 的复制属于“合理使用”范围。这个判决会让 Google 公司免于向 Oracle 支付 10 位数天文数字的赔偿,但是仍然可能将软件行业拖入法律的泥潭。

这是因为“合理使用”是一个众所周知的复杂而且主观的法律标准。任何想让软件与竞争对手的产品进行互操作的公司都必须担心遭到竞争对手的起诉,因为他们可以认为这种使用不像 Google 使用 Java 那样合理。大多数软件公司都没有 Google 的法律资源或耐力,因此,即便是他们赢得诉讼的胜算很大,一场旷日持久的诉讼也可能成为构建一个可互操作软件的主要障碍。

原文:https://arstechnica.com/tech-policy/2020/03/before-it-sued-google-for-copying-from-java-oracle-got-rich-copying-ibms-sql/

翻译:苏本如

本文为 CSDN 翻译,转载请注明来源出处。

全方位解析阿里云核心技术竞争力

CSDN 独家在线峰会来了!


3 月 18 - 19 日,CSDN 创始人&董事长、极客帮创投创始合伙人蒋涛,阿里云研究员蒋林泉,阿里云首席智联网科学家丁险峰,阿里云智能事业群研究员、网络产品线负责人祝顺民,阿里达摩院资深算法专家谢宣松等 12 位大咖齐聚 CSDN 直播间,从虚拟化、存储、网络、安全、云计算、大数据、物联网等多个维度着手,释放。

扫描下图中的二维码或点击阅读原文,立即免费报名参与直面大咖👇

推荐阅读 

你点的每一个在看,我认真当成了喜欢