開發者其實不太需要關注Java 收不收費
作為繼Java 8之後的第一個LTS版本,Java 11的發布引起了廣泛關注,一方面是因為這個版本帶來了一些重要的新特性,比如熱議的ZGC、HTTP/2 Client、Flight Recorder等,在內存管理與JVM診斷/Profiling等方面都有很強的能力突破。另一方面是因為Oracle針對Java的一系列動作,比如宣布變更版本迭代周期、修改了商業支持方式,推出訂閱模式、在兩種不同的License下提供JDK 發布版 ……
這持續性的變化讓大家不斷困惑,者不知道還能不能愉快地免費使用Java,也不清楚接下來將會面對一些什麼。
雖然Oracle 官方有解釋,並且也有30 幾位Java 社區領袖與專家聯名發表了一篇文章,詳細分析了Java 其實還是免費的等相關問題,但是因為普遍存在語言與網絡障礙,並且也有理解上的偏差,再加上一些自媒體的過度製造焦慮,使得本身就複雜的問題變得更加難以理解。
在前陣子開源中國舉辦的技術會議“源創會年終盛典”上,資深Java專家楊曉峰為與會者帶來了針對Java 11的最新解讀,帶領大家重新認識了現代Java。
楊曉峰是OpenJDK Committer,目前在京東擔任大數據中心架構師,曾領導Oracle 北京Java 核心類庫等團隊,參與甚至負責過Java 8~11 核心類庫等部分新特性的相關任務。
我們藉此機會邀請他為大家把Java這令人困擾的事理清楚了。
楊曉峰一開始就直接來了一句:Java還是免費的。話是這麼說,但實際上這並不足以打消疑慮,也存在一些更加具體的問題需要解釋,具體是怎麼回事呢?
相關概念
首先要理清一些概念,一方面是Oracle JDK 面向的用戶類型:
- Oracle客戶,主要是指那些購買了Oracle Java SE相關服務支持的用戶,比如,通過前邊講到的訂閱模式購買服務的客戶。
- 商業用戶,免費使用Java用於商業目的的實體。
- 個人用戶,在個人電腦上,免費使用Java SE,以及不用於商業目的開發人員。
當前大部分使用Oracle Java的開發者/所在公司是屬於哪一種類型的用戶呢?是第二種—— 商業用戶。
再來看看關於“ Oracle的Java ”。一方面,Oracle主導著OpenJDK社區,它本身自己做了一個叫Oracle JDK的產品,這是它的商業產品,也是目前最為廣泛使用的JDK;另一邊,Java SE 9以來,Oracle也提供Oracle的OpenJDK發行版Oracle’s OpenJDK,而這個Oracle’s OpenJDK就是完全開源免費的,可以用於商業用途。
楊曉峰解釋:
OpenJDK 是基於GPL v2 的開源項目,從Java 7 開始,就是Java SE 的官方參考實現。狹義上的OpenJDK 往往是指基於OpenJDK 構建的發行版,各個主流廠商的JDK 產品基本上都是基於OpenJDK 源碼,或多或少增加自己的定制內容。
Oracle JDK 是Oracle 提供的商業JDK 實現,是目前應用最廣泛的JDK,在JDK 11 之前,Oracle JDK 與Oracle’s OpenJDK 除了一些強大的商業特性,還有CA 根證書等便利性內容和細微差別。
從JDK 11開始,Oracle JDK使用原來的商業BCL License,而Oracle’s OpenJDK開始獨立改用GPL v2+CPE License,二者提供同樣的功能,本質上沒有不同,但是不同的License 針對不同用戶。
Java 8 更新不再免費
像前邊所說,關於Java的使用困惑是一波接一波的,首先是Oracle公告從2019年1月以後,將不再為商業用戶提供免費的Java SE 8更新服務。商業用戶可以使用Oracle Java SE訂閱模式繼續享受更新支持;而個人用戶不受影響,還可以繼續享受免費更新到2020年12月。
楊曉峰解釋:
這本來其實就是一個正常的軟件生命週期結束(EOL),不必過度解讀,Oracle已經免費支持了5年JDK 8了。
OpenJDK 有一個約定成俗的做法,就是經過多年免費支持以後,Oracle JDK 版本會進入End of Life,也就是生命週期結束EOL,然後由社區接手並主導後續更新事務。
之所以目前只有這個Java 8的EOL導致恐慌,主要是因為這個Java 8太成功了,相當多用戶還沒有準備好,也沒有足夠動力去升級JDK,這就像目前還使用Windows XP的用戶,無法獲取官方更新,但是還是很多用戶停留在上面。
另外一個不容忽視的原因是,Oracle顯著縮短了其提供後續JDK版本的免費支持週期(目前建議為半年),社區會承擔長期支持版本(LTS,Long-Term-Support)的後續更新工作。
所以實際上,開發者其實不太需要去關注Java 8收不收費這麼一個問題,真正需要關注的人是企業IT決策者。一方面,個人開發者使用Java 8還是一樣免費,還是一樣可以獲得更新支持;另一方面,所謂的收費,其實指的是在2019年1月之後的更新要收費支持,Java 8本身就還是免費的,而要不要使用訂閱模式去繼續獲得更新這是IT決策者要考慮的。
那麼企業IT決策者可以怎麼考慮呢?
楊曉峰介紹:
- 付費的選項,除了Oracle,還有其它廠商也提供了商業的JDK 發行版,包括Azul、IBM等,具體選擇要看企業自己的判斷。
- 不希望付費的用戶,Java SE 9 以來,Oracle 也提供Oracle 的OpenJDK 發行版,基於GPL v2 協議,總體免費更新周期比較短,AdoptOpenJDK 會提供更長期的免費支持。當然,也有個別廠商聲明會提供長期的JDK 8 更新,可以參考Amazon Corretto。
同時我們也注意到,因為目前已經是2019 年1 月份,也就是到了Java 8 免費更新結束的日子,有一些公司的響應也被公佈出來,比如這個:
楊曉峰表示:“這個公告比較專業也比較謹慎,我認為8u201/202是最後的一個免費Oracle JDK 8更新。涉及到License相關的決策,嚴格來說這不僅是個技術決定,更是個法務相關的決定。 ”
所以,總結下來,真正需要關注Java 免費問題的是企業IT 決策者,而且他們目前有上邊講的幾種方案可選:
- 使用訂閱服務,花錢獲得Java 8 更新
- 花錢使用其它廠商提供的商業JDK
- 選一個OpenJDK 發行版遷移過去,由開源社區提供更新支持
- 保持在8u201/202 或者之前版本
楊曉峰還強調:“授權(License)和付費是商業行為,是企業的IT 決策,本就應該是由專業人士來做的,耐心、客觀一些,不要被自媒體收智商稅。”
發布週期變化
其實Oracle 早在2017 年9 月份就宣布改變JDK 版本發布週期,這之後也陸續發布了Java 10 與11,12 也快要到來。
楊曉峰介紹,新的版本發布週期中,改變了以特性驅動的方式,變成以時間驅動版本變化。每6個月就會發布一個新的Java版本,也就是“大版本”,同時每3年會出現一個LTS版本,Java 11作為這個新模式的第一個LTS。
引用相關材料可以大概看到,新的版本週期與舊有模式的變化:
這其實是一件好事,而且也沒有什麼好困惑的。對於企業來說,技術棧的未來可預測性和可靠性是非常重要的,它可以保證研發投入的安全性和能力。對於Java 來說,這一點其實也已經在過去20 多年其生態圈的長期持續投入中獲得了印證。
“Java新的發布模式中,由於LTS的存在,對於企業IT決策提供了清晰的指引 ”,楊曉峰表示:“與此同時,新的模式加快了新技術迭代和落地,以便更加敏捷地適應云計算等新浪潮,這事實上提高了企業的參與度和生態活力。”
為什麼不直接用Java 11?
既然Java 11新特性強悍,並且也是集萬千關注,那為什麼那麼多人都不願意從Java 8升級到Java 11呢?直接不用Java 8的話,也就沒有上邊那些更新問題了。
其實關於Java還有一件事情挺神奇的,在關於目前正在使用哪個版本的Java的各種大大小小的調查中,很多人都表示公司正在使用很落後的版本,管你Java 11最新特性多厲害,反正就是要堅守Java 1.4、5.1……這是一種比較普遍的現象,實際上調查數據顯示目前Java 8是最被廣泛使用的版本。
對此楊曉峰認為軟件升級本就不是一蹴而就的事,尤其是基礎軟件,就像服務器操作系統的升級,也是一個緩慢的過程,他解釋:“雖然Java在兼容性上總體做得很好,但升級總是需要人力等成本的,未必是企業的當務之急。相信未來這種情況一定會持續下去。”
但是與之形成對比的是,除了這些“滯後”的現象,當然也有在相關方面積極投入的公司企業,比如穀歌、亞馬遜與阿里等,與其被動接受變化,不如自己主動往前一步,去引導變化。楊曉峰以其所在的京東大數據平台部為例介紹:
京東大數據平台有業界少有的超大規模Hadoop、Spark、Kafka 等集群,承載著海量的數據和計算負載,在Java/JVM 領域有一些比較深入的工作,例如:
- 通過JVM 層調優,不斷獲取通用性的計算資源效率提升,節省大量資源。例如,通過對Spark Streaming 運行情況的深入分析,我們進行了JVM 調優,在內存等計算資源減少20% 的情況下,吞吐量還提高了10+%。
- 對於Java 相關代碼實踐的持續改進,提高研發、運維效率和產品質量。
- 通過對大數據基礎引擎等代碼層面優化,相對於開源社區產品,我們取得了大百分比甚至是倍數級別的性能等提升。以Kafka 為例,大數據中心團隊通過Profiling 技術,進行代碼層面的一個深度改進,就使得吞吐量提高40%,CPU 消耗降低5%。整個集群1400 多台,按照通常每台服務器48 核/256 G 內存來計算,單是這個優化的經濟效益就是千萬級人民幣。
因為並未刻意進行宣傳,也許很少有人知道,我們已經簽署了OCA 協議,並積極參與到了OpenJDK 等社區貢獻中,目前已經貢獻了若干性能和功能性的增強到OpenJDK 等開源社區。
Java 在新時代
關於繼續使用Java接下來將會面對一些什麼,除了上邊講到的版本週期變化、商業支持方式改變和開源許可的變化等,其實還有一個方面值得關注,那就是技術上的東西:Java當前的問題與未來的方向。
Java 多年來在各個編程語言排行榜上一直是穩坐第一把交椅,但是最近有一些榜單上Python 都已經走在 Java 之前,並且在逐漸拉開差距。這其中很大一部分原因可以歸為 AI 以及相關的數據挖掘、分析等領域的快速崛起。
同時,另一方面,隨著雲時代不斷發展,像 Golang 這樣原生具有高並發、語法易學等各方面優勢的語言也在不斷壯大勢力、完善能力。
那這就帶來了問題:AI與雲計算等領域當下快速發展,會不會對Java造成衝擊?Java在這樣的新時代可以與其它編程語言區分開的明顯優勢有哪些?
對於這些問題,楊曉峰認為目前Java龐大的生態系統,包括最龐大的開發者群體、海量的類庫/工具等、主流廠商的參與和投入,都是其明顯的優勢。
比如據不完全統計,目前Java 開發者超過了1200W,活躍的JVM 有380 億+,同時連接到雲的JVM 有210 億+。
很多人認為Java慢,但是楊曉峰反駁:“ 拋開場景說快慢是沒有意義的。”
他解釋:“目前來說,長時間運行的服務器端場景下,Java 是處於沒有爭議的霸主地位的;而在微服務等新型架構下,Java/JVM 依然還是首選;並且,當前云計算時代, Java 也是No.1 的編程語言,它覆蓋了電商、大數據、企業軟件、移動,甚至IoT 等領域;此外,各個大公司也都在相關方面積極投入,包括但不限於谷歌、阿里、亞馬遜、IBM、Oracle 與京東。”
除了這些優勢,楊曉峰也坦言,目前Java還是有面臨挑戰的,“ 最大的問題在於Java是否能夠快速地調整自己的能力,以保證在新場景下的競爭力 ”,他說:“排行榜/衝擊都只是競爭的表現而已,能力才是更加重要的決定成敗的關鍵因素,簡單說就是——效率!效率!效率!”
在面對這些挑戰的時候,Java 在不斷改造自身,以適應新時代的需求,楊曉峰介紹Java 現在快速演進的領域主要有:
- 更輕量級的JVM,以適應云端應用需求。微服務與Serverless 等都是短時間、輕量級的應用;
- 進一步增強數據密度、數據結構等基本能力的value types 等;
- 變得更具開發效率的語法;
- 更具擴展性和更高開發效率的並發基礎設施,如Java 版協程Fiber;
- 此外還有底層、硬件級別開發效率和能力急需的Panama 等等。
總之,楊曉峰認為,在新時代,雖然還是需要不斷跟進,不斷去快速調整自己的能力,但是Java 還是排在第一的編程語言,未來可期。