1. 程式人生 > >深入谷歌和甲骨文曠日持久的版權戰爭,趣味科普當前最火的程式語言JAVA的前世今生

深入谷歌和甲骨文曠日持久的版權戰爭,趣味科普當前最火的程式語言JAVA的前世今生

這篇文章是我在B站上投稿的一個科普java的視訊文案,內容如標題,感興趣的碼農朋友可以移步觀看https://www.bilibili.com/video/av81171108/

在過去短短几十年間,伴隨著網際網路的興起和磅礴發展, 程式語言也在同步進行著變革和演化, 從機器語言出現,到1956年真正意義上的程式語言fortran誕生直到今天, 根據我在業餘搜尋引擎百度上進行搜尋的結果來看, 目前世界上一 共有600多種程式語言 坦白講,當我第一次看到這個資料時,我自閉了 作為一個鹹魚程式設計師 滿打滿算我自己瞭解的語言用手和腳就能數過來, 給你們隨便展示幾個比較冷門的語言以及他們的"hello world"語法,   在網際網路這塊肥沃的土壤裡,各式各樣,千奇百怪的程式語言,悉數登場, 在群星璀璨或者說群魔亂舞的程式設計"語宙"中, 有的語言, 生於亂世,卻不斷野蠻生長, 有的語言,歷經滄桑,但依舊推陳出新, 有的語言,被千夫所指,為世人詬病, 還有的語言,振臂一呼,擁躉無數, 不用猜了,上面說的都是java,也就是今天的主人公,程式語言排行榜常年屠榜的狠角色.   本期視訊,我將帶你回首java的前塵往事, 漫談java當前的行業現狀, 瞭解谷歌和Oracle長達近十年的java版權戰爭的始末. 以及窺望一下java的未來將會何去何從, 視訊我打算做一個系列,這是第一期,我預設這個視訊的觀眾是編外人員, 我希望用一種比較有趣下飯的方式能讓你快速瞭解一些網際網路相關的專業術語和行業趣聞, 有勸退門檻的程式設計知識我會小心繞過,實在繞不過去我就降維解釋, 作為一個鹹魚程式設計師,我也不敢講的太硬核,我不是擔心你不看, 我真正害怕的是自己正給外行吹牛呢,結果碰到真懂的,誤人子弟的事,咱不幹. 所以這期視訊不會涉及JDK,JRE,JVM以及程式設計語法之類的硬核知識, 準備面試的朋友可以直接出門右轉馬士兵   java的創始人叫James Gosling,不是這個james,也不是這個gosling, 是他,不修邊幅,戴眼鏡,聰明,是大神沒跑了,後面我們簡稱為”高司令”, 時間要追溯到上世紀90年代,在SUN公司任職的高司令 領導了一個名為"Green計劃"的專案,他們判斷嵌入式系統在未來的家電領域很有搞頭, 於是決定編寫一個通用的控制系統.應用在電視,電話這樣的小型家電上. 當時市面上最流行的語言是C++,成員基本都是C++程式設計師,團隊最初也是打算直接拿過來用, 但是在討論的時候大家覺得C++和一些通用API在某些方面存在很大的問題, 他們做的是嵌入式平臺,可以用的系統資源十分有限,因此好刀一定要用在鋼刃上, 一方面C++比較複雜,容易被程式設計師誤用 而且缺少垃圾回收系統,在多執行緒和分散式等方面也有明顯缺點,總之,說人話,就是C++不好用, 不好用怎麼辦,那我就讓你好用 最初James Gosling打算直接修改C++的編譯器來擴充套件自己想要的功能,後來發現也行不通. 於是他們決定創造一個新的程式語言 在資金支援下,工作組起早貪黑忙活了一年多, 終於到了1992年,這個新的程式語言就已經能跑在Green作業系統上了, 雖然說是全新的語言,但依舊是參考了C++很多設計,算是取其精華,去其糟粕. 這也得虧沒有直接修改和擴充套件C++,否則你們聽到的語言就會被喚作,C++ ++--   現在語法,類庫,硬體都有了,算是具備了java語言的基本雛形. 語言雖然設計出來了,但是在上個世紀末智慧家電的市場蛋糕還非常小, 就像我們今天談智慧家居一樣,市場前景廣闊,但現實囊中羞澀 Sun公司無奈放棄了這個計劃.這門新的語言也暫時被擱置在一邊. 1992年底,Green計劃項組被拆分成SUN的單獨的全資子公司,"FirstPERSON有限公司", 類比紅米之於小米,榮耀之於華為. 當時,媒體公司時代華納,廣發英雄帖,徵求一個電視機機頂盒互動系統. SUN公司果斷出手,提出了一個機頂盒平臺的方案,使用新生兒java作為底層技術實現 ,結果在競標大會,鎩羽而歸.後來與3DO公司的另外一筆關於機頂盒的交易也沒有成功, 一鼓作氣,再而衰,三而竭,由於FirstPERSON有限公司在當時機頂盒市場上毫無作為 於是被並回SUN公司,java的第一次出道嘗試以失敗告終.   1994年,全球資訊網的蓬勃發展讓瀏覽器開始登上歷史舞臺,成為當時風口浪尖的弄潮兒. 當時的網頁不像現在這麼豐富.,沒有什麼動態可言, 互動體驗非常糟糕,整個市場嗷嗷待哺,急需要一種新的技術打破僵局, 各大公司也紛紛投入人力物力來研發能在瀏覽器上帶來更好體驗的技術產品, 高司令團隊再次果斷出手,對java進行了小規模改造,並且很快做出了一個可以嵌入網頁 可以隨同網頁在網路上傳輸的Applet,其實就是個小瀏覽器, 這個產品在互動上給當時的人們帶來很大的驚豔.這就是後來的HotJava瀏覽器. 次年5月,在當時的SUN舉辦的SUN world 大會上,java語言和HotJava正式出道,一經發布,一夜爆紅, 當時很多的大公司,像IBM,微軟,Apple,惠普等等,紛紛購買java的使用許可, 很多公司甚至直接停掉自家在相關領域的開發專案, 大公司跟進,眾多的軟體開發商也不含糊,紛紛響應號召,開發基於java的軟體產品. 此時java的未來看上去一馬平川,前途無量.   這裡我們必須要停下來說一下Java命名的故事,java其實他是個藝名,出來混,誰還沒有個藝名呢, java在她還不叫java的時候,也就是出道以前,名字叫Oak, Oak呢是橡樹的意思,相傳Green計劃研究組的辦公樓門前有兩個樹, 一棵是橡樹,他們很喜歡那棵橡樹,於是就把新的語言取名叫Oak, 那另一棵樹呢,沒有另一棵樹. 你是不是覺得這名字起的有點太隨意了,配這個一個鼎鼎大名的程式語言好像有點不夠豪邁, 在開發出基於java的瀏覽器應用時,得到了公司上下的一致好評,於是趕緊去註冊專利, 雖然名字起的已經足夠隨意,在註冊專利的時候,還是彈出了此使用者名稱已存在的警告, 後來他們在咖啡館討論起新名字的事情,有個成員一口喝著Java(爪哇)咖啡,一邊說 有一個人說就叫Java怎麼樣,那還能怎麼樣,你用膝蓋骨也能猜到結果是得到了公司領導的一致好評, 於是,Java這個名字在喝著咖啡唱的歌的間隙就這麼定下來了.你看Java語言的Logo.    緊接著1996年,SUN公司就馬不停蹄地釋出了第一個正式的開發工具包,也就是JDK1.0. 這是java史上第一個重要里程碑,標誌著java正式躋身為一個獨立的程式語言和開發工具, 為什麼這麼說呢,雖然在1995年Sun就推出了Java,但是這時候java還只是一種語言, 如果要想開發複雜的應用程式,必須要有一個的強大的開發庫支援才行. 接下來的幾年,SUN又陸續的更新了幾次1.X的版本,java也是越來越受到行業的追捧, 1998年,java再次迎來里程碑式的版本,jdk1.2,在這個版本中,SUN將java技術兵分三路, 分別是面向桌面應用的J2SE,面向企業開發的J2EE,以及面向手機移動端的J2ME,這個版本的釋出, 充分體現了SUN公司的的野心,標誌著java吹響了同時進攻企業,桌面,手機3個領域的號角.   在在一篇1998年發表的論文<java的發展動態和前景>中,我們可以看到這樣的描述: 今年的JavaOne會議是第三屆了,除軟體巨頭微軟外, 幾乎所有的計算機公司都參加了此次盛會。會議設有300多個展臺,先後舉行了90場專題討論會, 從企業的Java計算、Java在電子商貿中的應用,到Java在教育中的作用,幾乎涵蓋了所有的資訊科技領域. Java的發展已不僅僅只是一種語言了,而是形成了Java技術,甚至正在成為“Java產業”.   雄鏹鏹氣昂昂,時間進入了21世紀. 2001年,諾基亞宣佈,未來幾年將會生產一億臺手機支援java, 諾基亞的塞班系統開始內建java虛擬機器,從網路上下載java小遊戲, 拷貝到諾基亞的java檔案裡,也成了一代人獨有的回憶, 現在的小孩對諾基亞的概念,估計就停留在無間道上了.   到2002年,全球財富500強企業中超過了95%的企業內部都使用了基於Java應用的企業平臺, 與此同時,家大業大的微軟也釋出了自己的平臺語言.NET. 關於java和.net之間孰強孰弱的討論,一時間也成為那個年代的程式設計師之間獨有的浪漫, 同時也出現了java的第一批黑粉,開啟了後世對java過時討論的先河. 當時人們對於java的最大的詬病就是一點,效能. 有病治病,2002年,SUN公司釋出了JDK1.4,針對性能問題做了很多的優化,使java的效能得到質的飛躍.   效能這事差不多過去了,java又迎來了新難題,複雜,java當時對一些高階的語言特性並不支援, 自己本身的一些功能也由於比較複雜無人問津,像EJB2.X的版本 2004年,JDK 1.5釋出,JDK 1.5在Java語法易用性上做出了非常大的改進。 例如,自動裝箱、泛型、動態註解、列舉、可變長引數、等語法特性都是在這個版本加入java大家庭的. 正在看視訊的碼農朋友們,這一段是我精心為你們準備的優越感.   2005年,這一年,java領域沒什麼大事發生,但是要埋個伏筆, 這一年在另一條故事線上,谷歌收購了一家成立不到兩年的高科技公司,這家公司叫android. 2006年,SUN公司釋出jdk1.6版本,同年的javaONE會議上,SUN公司宣佈將java開源.這裡是第二個伏筆. jdk1.6可以說是影響最為深遠的一個版本,深遠到直至今天依然有公司還在使用這個版本 如果你的公司還在使用jdk1.6的版本,建議你馬上離職.     2007年,當那個男人從口袋裡拿出Iphone的那一刻起,宣佈了一箇舊時代的結束, 同年11月,谷歌倉促的釋出了android1.0手機作業系統, 同時由谷歌主導,聯合一眾手機制造商,晶片廠商,以及移動運營商成立了開放手機聯盟, 給自家的android系0統造勢,不過當時市場一片冷淡. 這裡之所以講這個是因為,android系統正是選擇了java作為他的官方開發語言, 谷歌選擇java,可以從java本身的適用性和普及型等很多方面找到原因, 但不可否認的,ios的橫空出世,讓谷歌感受了危機,才倉促發布android系統, 雖然助長了java的名聲,但也為日後谷歌和Oracle兩大巨頭對於java的長達數年的版權之爭,埋下了隱患.   說到甲骨文,時間很快來到了2009年,本來這一年SUN公司要釋出JDK1.7 但是公司經營每況愈下,自家最知名的產品java也一直沒有找到很好的商業化變現途徑, .這一年,SUN公司相繼在技術競爭和商業競爭中都陷入泥潭 公司股價也一落千丈,最落魄股價只有巔峰時期的3% 被收購的命運在所難念,這麼說來其實很讓人唏噓 坐擁java這一座巨無霸礦山,卻始終沒有挖到正經的礦 這java要是在比爾蓋茨手裡,那畫面太美,我不敢看. 此時,Oracle果斷出手,在於IBM的競標中虎口奪食,以74億美元的價格收購了SUN 同時一併獲得了java的商標和所有權 這裡特別說一下,java的語言本身並不屬於哪一家公司,是開源的 它是由一個開放的國際組織,JCP進行管理.成員都有誰呢,主要是SUN公司的java的開發者.   2011年,接管了java的Oracle公司釋出了java7,這次版本升級是Oracle釋出的第一個版本, 耗費時間最長,經歷了長達5年之久.   2014年,Oracle釋出了JavaSE8,,此次版本升級加入了很多新的特性,讓java變得更加強大.   接下來的幾個版本就不提了,沒有引起太大的轟動,目前來看也沒有得到很好的推廣,不足為外人道也, 截止到今年,java最新版本已經來到java13,更多的新特性被納入到java語言帝國的版圖, 但是網際網路公司是滯後的,目前市場的主流版本依然停留在java8.    2018年發了一件網際網路圈的大事, 3月,美國聯邦巡迴上訴法院宣佈了谷歌的產品安卓是否違規使用java及相關技術專利和版權的判決結果, 甲骨文勝訴,谷歌將賠償近90億美元. 這場從2010年就開始的馬拉松官司影響深遠,表面上針對谷歌一家公司, 實際上牽扯到整個java產業鏈和開放手機聯盟 接下來我們來梳理一下谷歌和甲骨文關於java的版權之爭.   你可能會有疑問,java不是開源的嗎,為什麼還會有版權問題, 在解釋這個問題之前,我先解答另一個問題 為什麼安卓手機用著用著就卡了,而蘋果手機怎麼用都不卡, 這個當然原因有很多,這裡你只需要記住最重要的一點, ios系統的的開發語言,可以直接跑在蘋果的硬體上 而java是一個跨平臺的語言,他必須跑在一個叫JVM的虛擬機器之上 也就是說在安卓手機上執行用java編寫的程式,你就必須在硬體層次之上先先把JVM虛擬機器跑起來 這個虛擬機器執行本身就需要佔用記憶體以及耗電 而ios系統,沒有中間商賺差價,速度肯定更快一些. 那麼問題就來了,安卓手機上是否有JVM這個虛擬機器呢,答案是沒有. 前面我們說,ios系統的橫空出世,震撼了世界 ,也震撼了谷歌,在蘋果釋出了IPhone之後的四個月 谷歌倉促發布了android1.0作業系統. 谷歌沒有選擇直接在andoid系統上搭載官方的JVM虛擬機器 而是谷歌自己做了一個虛擬機器,Dalvik,你可以叫他DVM 這個DVM你可以理解為谷歌專門為手機裝置開發的一個虛擬機器 相當於使用JDK標準庫函式實現了自己的一個私有庫, 他針對手機做了一些特殊的"作弊"機制,比如預讀使用者預裝的很多APP直接扔到快取裡 這就是為啥android手機總是需要的更大的記憶體 這個DVM和官方JVM並不能相容,也就是說無法跑在JVM虛擬機器上, 而JVM的授權協議中有規定 任何人都可以自己的JVM.但是必須要相容官方JVM, 這就有意思了,java是開源的,任何人都可以使用java進行開發 Google以java為基礎實現在自己的私有庫,違反了java的授權協議, 那為啥谷歌當初不找SUN公司買一個授權呢. 其實早在2005年,谷歌就和SUN公司申請過授權 但是最後沒談成,SUN公司也左右為難 不給你授權吧,java本身是開源的,又不能不讓你用,對對java的推廣也不利, 如果給了你授權,就等於允許谷歌可以隨意的修改java 你要是自己搞一個私有庫,取名java++,那還有我什麼事, 最後雙方達成了一個"君子協定", 雖然不給你授權,但是允許你用 雖然允許你用,但是要有度,找準自己位置,不要越界.界在哪裡,大家都懂 SUN公司也真是個老實人,後來的事也就睜一隻眼閉一隻眼了.  如果你覺得Oracle告谷歌,是告他違反授權協議,韭苔小看Oracle的律師團了 事實上,Oracle壓根就沒有在"違反授權協議"上過多的糾纏, 大家心裡都清楚,谷歌的行為就是擦邊球. 但是怎麼告,這裡有很多門道 直接告你違反授權協議?不合適,為啥呢, 如果告贏了,就意味著android不能再使用java,那豈不是傷敵一千,自損8百, 感興趣的朋友可以自行搜尋J++,當年雞賊的微軟就是使用java語言和java系統庫 另起爐灶做出了一個無法在JVM執行的J++,,結果被SUN公司告的雞飛蛋打, 這也間接促成了C#的誕生.   甲骨文起訴谷歌的理由,是谷歌在開發android時未經授權使用了java的應用程式設計介面 也就是直接將java應用程式介面直接複製到安卓系統中, 這個要提到java的開源協議GPL,這裡不多說了. 總之簡單理解,告你不是因為你使用了java,而是你在使用java開發android的方式不當 告你也不是為了讓你停止使用java 單純就是為了讓你賠點錢,你侵權了沒問題,賠了錢就可以繼續侵. 這場持續8年之久的官司不僅在"java"社群爆發了巨大的騷動 這也引起了業界廣泛的討論,Oracle一時成了眾人眼中的"孔乙己". Oracle一到店,所有程式設計的人便都看著他笑 有的叫道:"你家又裁員了,java啥時候收費啊",他不回答, 對著櫃裡說:"來幾個頂級律師,越貴越好",便排出九文大錢 他們又故意的高聲嚷道,"你一定是打官司又輸了" oracle睜大眼睛,"你怎麼這樣憑空汙人清白" "什麼清白?我親眼見你版權官司敗訴了,被谷歌吊著打",oracle便漲紅了臉,額上青筋暴起 爭辯道"輸一場不能算輸,陪審團的問題,能算輸嗎",接著便是難懂的話, 什麼"fair use",什麼"API版權",什麼"原始碼"之類,引得眾人都鬨笑起來,店內外充滿了快活的空氣.   這個段子由本視訊首發,講它是為了引出一個問題,Oracle因為告谷歌這事這麼不受待見 為啥還要緊咬著谷歌不放呢 我們可以從兩個維度分析一下 第一個,顯而易見,就是商業利益, 天下熙熙,皆為利來;天下壤壤,皆為利往 java是非盈利專案,但是你的android是個徹頭徹底的的盈利專案 濃眉大眼,富得流油,廣告就上百億收入 你谷歌靠這個android賺了那麼多dollar,分我一點怎麼了.不分,告你. 另一個維度就要從甲骨文的CEO Larry Ellison說起, 這個人你可能不熟悉,但是你肯定熟悉另一個人 拯救地球的男人,鋼鐵俠託尼,屎大顆.在鋼鐵俠2中,埃裡森就扮演他自己在螢幕上和託尼打了一個照面 埃裡森和鋼鐵俠在性格上有很多相似之處,億萬富翁,花花公子,個人名聲兩極分化. 埃裡森有一個一生的摯友,名字叫斯蒂夫,喬布斯,沒錯就是那個男人, 這裡又要說道蘋果和谷歌的關係了 在很長的一段時間裡.他們兩家公司不僅是商業合作伙伴,還是精神盟友 蘋果製造偉大的裝置,谷歌開發偉大的軟體 谷歌公司的創立者視喬布斯為精神導師 時任谷歌執行長的埃裡克,施密特,曾經還是蘋果的董事會成員 由於微軟這個共同的敵人存在,兩家公司曾一度如膠似漆 俗話說,沒有永恆的朋友,只有永恆的利益,這一切在2007年都土崩瓦解了 11月,谷歌釋出了android作業系統,喬布斯對此深惡痛絕 蘋果和谷歌的關係迅速惡化,  喬布斯在蘋果內部會議中曾表示 我們並未涉足搜尋業務 但是谷歌卻進入了手機產業。谷歌想要扼殺iPhone 我們絕不會讓他們得逞。喬布斯甚至公開表示 除了搜尋引擎,谷歌的產品,都是狗屎 後來蘋果和谷歌就因為android侵權的事情開始槓上了,明裡暗裡,衝突不斷.   埃裡森,作為喬布斯的靈魂伴侶,在喬布斯被逐出家門,一度想買下蘋果,來讓給喬布斯的男人, 不用說,他肯定是站在喬布斯這邊的, ,在收購SUN以後,Oracle馬不停蹄的開始搞事情,僅僅幾個月後 2010年9月, Oracle就谷歌侵權一事向法院提起了訴訟 要求谷歌賠償88億美元,理由就是谷歌在Android作業系統上使用了Oracle的版權程式碼 從這一方面來看,Oracle起訴谷歌侵權,實在是蓄謀已久.    2011年,上帝的手機落伍了,那個男人因病去世,只有56歲 全世界都在緬懷這個偏執的完美主義者, 桀驁不羈的埃裡森在回顧喬布斯臨終情景時曾動情地說 他已經被癌症消耗光了,他實在太累了又太痛了。雖然他絕對是我見過最堅強的人 但他還是最終放棄了和死神的對抗。他最後停藥的決定震驚了所有人. 三天後幫主與世長辭,但是Oracle和谷歌的戰爭卻愈演愈烈 在多年的官司中,埃裡森始終拒絕和解. 對埃裡森這種全球富豪榜名列前茅的人說,這種行為在八卦群眾眼裡就像是替那個男人的復仇. 當然這是八卦的成分,追本溯源,還是Oracle覺得Android已經威脅到了java本身 android雖然用的是java的語法,但實際上卻已經不是java本身, 稱之為一個java衍生的程式語言也未嘗不可 從某種程度上來說,安卓的不斷崛起,會讓java越來越尷尬. 在2017年,谷歌IO大會上,谷歌宣佈支援android開發支援Kotlin語言 Kotlin是2011年由JetBrains釋出的一個新的程式語言,和java一樣也是執行在JVM虛擬機器之上 和java100%相容,甚至可以說,java能幹的,他都能幹,java不能幹的,他也能幹, 而且身形更曼妙,姿勢更優雅. 2019年的谷歌大會上,谷歌直接把Kotlin扶正, 宣佈Kotlin正式政委android 應用開發的官方首選語言.   被android打入冷宮的java會不會被時代最終淘汰,我覺得不會, 雖然在過去短短十多年裡,很多程式語言異軍突起, 像含著金鑰匙出生的Golang,背靠谷歌,天生富二代, 像java的同門兄弟,scala,kotlin等,這些新語言以更加人性化和現代化的程式設計理念為基礎,輕裝上陣, java能夠一直名列前茅, 除了前期拿到優勢能夠不斷滾雪球以外 更重要是推陳出新,與時俱進,跟著時代不斷裝備自己新的技能點, 人紅是非多,java現在幾乎成了一個市場準入標準 用來衡量一個程式語言是否能夠被大家接收認可以及是否值得推廣, 如果你推崇的程式語言,在他擅長的領域連java都超越不了 那他就沒有什麼存在的意義了. 在tiobe公佈的2019年12月程式語言排行榜上 java依然穩坐頭把交椅,並且每年都是屠榜的局面.   滾滾長江東逝水,浪花淘盡英雄 java的未來將會何去何從,我不得而知 kotlin或許能為java的進化提供一些啟示 未來的程式語言會是什麼樣,誰也不知道, 我們不能預測,倒也無需擔心 生於憂患死於安樂,斗轉星移,新舊交替,都是亙古不變的真理 程式語言只是工具,使用工具的人才是進化的關鍵, 在科技爆炸式發展和資訊量幾何式增長的當下和未來 必然會不斷湧現出優秀的程式設計思想和程式語言 灼燒我們的眼球,拓寬我們的想象 讓我們滿懷期待

&n