2012年4月16日 星期一

Google與Oracle因為Java開打

Oracle在2009年自Sun Microsystem買下Java這個免費散佈的軟體的擁有權,當然也包括相關智慧財產權(專利、著作權),這個交易本來是令人疑惑,免費下載、使用的軟體有何利益?就像日前facebook買下免費使用的Instagram!

Oracle果然之後就與Google槓上,使用的武器就是Java,Java行之有年,運行在網頁上、裝置內、伺服器端,算是無所不在,Java程式碼最大的特色就是「Write once, run anywhere」,透過虛擬機器(virtual machine),可以在各種平台上執行,而且標榜不用重寫程式!
熟不知,這個免費且不需授權的使用權利可能被Google所破壞,Oracle宣稱Google侵害著作權,在Google提出給程式開發人員的多個Android API的10萬多行程式碼中,使用了Java的原始程式碼,違犯著作權!

其實,Oracle並非全面認為Android作業系統不能使用Java,以下為免責的部份:
1. Android使用Java程式語言
2. API使用的名稱,包括檔案名稱、包裹檔、類別檔、方法、區域、參數等,如果這些不允使用,程式人員麻煩大了
3. 使用上述被宣稱侵權的API原始碼的某些部份
4. 基於上述API的概念
5. Dalvik虛擬機器
6. 上述37個APIs以外的APIs與所連結的類別程式庫
7. 除上述列表以外的Android原始碼與物件碼



Oracle而又另外提告,認為Google也違反其專利權--美國專利第RE38104號,其揭露在程式碼中解析資料關聯的方法與裝置,其中涉及一種具有混合型編譯/翻譯器(hybrid compiler-interpreter)的電腦系統,其中有原始程式碼的編譯器(compiler)與翻譯已經編譯的碼的翻譯器(interpreter)。根據此案摘要說明,編譯器有根據符號產生的資料連結產生中介(intermediate)程式碼(也就是使用者寫的程式語言)的程式碼產生器,翻譯器則包括處理各種資料連結、數字關係的翻譯程式,透過解析各種動態或是靜態的資料關聯而重寫程式。這顯然就是提供的程式設計人員撰寫程式的工具的運作方式,尤其在快速開發程式的需求上,系統業者(如Google)常常需要提供快速開發程式的編譯工具,其中已經設計好許多的物件程式、程式庫與API,彼此的連接關係已經建立好,或是動態建立,能產生快速開發出最佳程式的功能。

此案的獨立範圍,顯然為了要避免被認定為抽象概念的非法定可專利的核駁理由,範圍包括有電腦系統中產生可執行程式碼的方法,產生可執行程式碼的裝置,與記載相關程式產生的指令的電腦可讀取儲存媒體。

獨立範圍第1項如下,其為產生程式碼的方法,在不會寫程式的人來看,可藉此對此專利窺探一二,先根據原始程式碼中的符號資訊產生可執行程式碼,其中包括電腦系統中的各種指令,接著翻譯這些指令,解析其中所載的符號關聯,並以對應的數字取代,最後根據這些數字關聯取得資料,並反覆上述動作,直到重新建立新的可執行程式碼。
可參考本案附圖,其中記載了步驟先執行語法分析(parser),之後轉換為使用者中介表示式(intermediate representation),並執行語義分析,翻譯中介表示式後產生程式碼

1. In a computer system comprising a program in source code form, a method for generating executable code for said program and resolving data references in said generated code, said method comprising the steps of:
a) generating executable code in intermediate form for said program in source code form with data references being made in said generated code on a symbolic basis, said generated code comprising a plurality of instructions of said computer system;
b) interpreting said instructions, one at a time, in accordance to a program execution control;
c) resolving said symbolic references to corresponding numeric references, replacing said symbolic references with their corresponding numeric references, and continuing interpretation without advancing program execution, as said symbolic references are encountered while said instructions are being interpreted; and
d) obtaining data in accordance to said numeric references, and continuing interpretation after advancing program execution, as said numeric references are encountered while said instruction are being interpreted; said steps b) through d) being performed iteratively and interleaving.


Ron
資料參考:BBC News

沒有留言: