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

在計算機的歷史長河中,Oracle(甲骨文)是一家極具爭議的公司,吳軍在《浪潮之巔》之中將其定義為「純軟件公司的先驅」,即開啟只開發軟件,然後靠軟件的使用費(License Fee)生存的商業模式。Oracle 與 Google 曠日彌久的關於 Java API 版權案十數年下來,直接影響了 Android 的走向,而另一方面,Oracle 自身還面臨著眾多侵權爭議,比如前不久爆出的抄襲亞馬遜 API 爭議,以及 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 語句類似於下面這樣:

<code>select customer_name, ship_date from orders where product_id=17 and state='CA'/<code>

這裡有兩件事要注意。首先,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 標準完全兼容,就可以讓他們在客戶面前提高可信度。

據 SQL 語言的一位設計者唐納德·錢伯林(Donald Chamberlin)說,埃裡森決心實現與 IBM 技術的兼容性,所以他在 1978 年打電話給錢伯林,向其諮詢 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 直播間,從虛擬化、存儲、網絡、安全、雲計算、大數據、物聯網等多個維度著手,釋放阿里雲的核心技術與競爭力。

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

☞比爾·蓋茨退出微軟公司董事會;蘋果 WWDC、微軟 Build 大會均改為線上舉辦;Rust 1.42.0 發佈| 極客頭條

☞11 國股市熔斷,“禍及”程序員?!

☞2.2版本發佈!TensorFlow推出開發者技能證書

☞Soul App 高管被捕,惡意舉報導致競品被下架

☞2020 年最新版 68 道Redis面試題,20000 字乾貨,趕緊收藏起來備用!

☞最近一個名為 BTCU 的比特幣分叉,準備用新分叉解決比特幣網絡的舊問題


分享到:


相關文章: