微軟全力擁抱 Java !

作者 | 蘇宓

雖然一直以來,微軟的不少產品在很多層面都有使用 Java 語言,但近日其官網上的一則「Microsoft is committed to the success of Java developers」(微軟致力於 Java 開發者的成功)的公告正式吹響了微軟全面擁抱 Java 的號角。

對此,我們也不禁好奇,繼構建 C#、.NET、TypeScript、Visual BASIC、JScript 等語言之外,微軟為何要大費周章地再去深入 Java?在本文中,我們將從近年來微軟的種種足跡中探尋原因。

微軟對 Java 的最新動作

微軟對 Java 的最新動作

在這篇公告中,微軟開發者部總裁潘正磊(Julia Liuson)表示,「作為一家公司,我們致力於使 Java 開發人員儘可能地高效和高產。這一承諾意味著開發者能夠在任何作業系統上使用任何工具、框架和應用伺服器。」

為此,微軟推出了一個專門針對 Java 所有相關內容的新網站(developer.microsoft.com/java),該網站提供了微軟 Java 雲開發團隊的最新內容以及技術文件、工具、資源、教程、視訊和程式碼示例。

除此之外,微軟也在工具方向增加了對 Java 的諸多支持,其中,在新版本的 VS Code 中帶來了更多 Spring 相關的新功能更新,譬如:

  • 其一,增加了查看實時進程中的 Spring Bean 屬性。

如果沒有 IDE 的支持,開發者必須編寫程式碼來獲取 ApplicationContext 和調用 .getBeanDefinitionNames() 才能得到同樣的結果。比如說:

    System.out.println(Arrays.asList(applicationContext.getBeanDefinitionNames());

    在添加了這一功能之後,VS Code 可以展現 Bean 的屬性資訊,即它們是否是 Singleton、prototype 等,同時還可以用「defined」來標記自己的 Bean,以保持事情的條理性。

    • 其二,更好的 Spring 入門體驗。

    通過讓 IDE 自動載入 Initializr 的 HELP.md 檔案,為使用 Spring Initializr 初始化的項目提供了更好的啟動體驗。事實上,HELP.md 包含了有用的資訊,但過去大部分開發者都忽略了它的存在,如今隨著這一功能的改進,方便開發者上手。

    • 其三,Java Project Explorer 集成了 Maven 和 Gradle

    有點像 Intellij,微軟加強了 VS Code,使其更容易訪問最頻繁的構建操作,如訪問訪問 POM 或調用 Maven。

    與此同時,微軟並沒有把對 Java 和 Spring 的支持侷限於 VSCode,它還加強了對 Intellij 和 Azure 的支持。

    微軟與 Java 的愛恨情仇

    微軟與 Java 的愛恨情仇

    當然,以上僅是微軟近段時間為擴建自己的 Java 生態版圖所做的一些工作。其實,微軟對拿下 Java 開發者的「野心」也非一兩天之間才有的。

    如果說曾經依靠 Windows 構建起生態帝國的微軟不可一世,從藐視開源、嫌棄 Linux,再到開源、數字化浪潮下的「微軟愛 Linux」並穩居開源貢獻榜單的 Top 之列,那麼,它對 Java 的態度也有這樣的一個轉變過程。

    在 Java 誕生的第二年,一群有敏銳的前瞻意識的人發現了這門語言的潛力,其中就包括了來自微軟的專家們。時任微軟 CEO 的比爾·蓋茲也曾評價道,「Java 是很長時間以來最優秀的程式設計語言。」

    在此趨勢之下,微軟在 1996 年 3 月與還沒有被 Oracle 收購的 Sun Microsystems 簽訂了一份 Java 許可協議。可以說,微軟應用 Java 的這一舉措也極大地推動了 Java 自身的普及與發展。不過,好景並不長。

    在 1996 年 9 月的某一天,微軟瀏覽器部門主管向時任微軟 CEO 的比爾·蓋茲詳細解釋了 Java 給微軟帶來的威脅,並懇切提醒道:「Java 絕不僅僅是一種語言,它是 COM 的替代者(COM 即 Componet Object Model,在 Windows 中大量使用的程式設計模型)!」

    隨即,比爾·蓋茲給當時身為微軟 CTO 的 Nathan Myhrvold 發了一封主題為「Java 運行時成為作業系統」的郵件,並表示「我很擔心 Java/Javabean 和其運行時到底會發展成怎樣、會讓多少人興奮。我真的在這個問題上失眠了,因為隨著轉向更多基於伺服器的應用程序,似乎會讓人們易於使用我們競爭對手的作業系統。」

    為了降低這樣的焦慮,微軟研發了一款 Java 集成開發環境,使用的語言是 J++。一定程度上可以將 J++ 視為是 Java 的一個變種,其語法、關鍵字等都與 Java 有異曲同工之處。

    這樣有些「擦邊球」的行為,引發了 Sun 公司的注意。於是,1997 年 11 月,Sun 公司以違反合同為由對微軟提起訴訟,指控微軟分發了與 Sun 不兼容的 Java 版本。Sun 於 1998 年 5 月修改了其訴訟書,添加了不正當競爭和侵犯版權的指控。

    彼時 Sun 在法庭上辯稱,微軟將 Java 的「一次編寫,隨處運行」功能視為對 Windows 的威脅,因為 Java 降低了軟體開發人員為微軟作業系統編寫程序的動力。據 Sun 公司稱,微軟發佈的 Java 版本與其 Windows 軟體配合得更好。Sun 的律師表示,這樣的舉動威脅到 Java 提供跨平臺開發環境的能力。

    微軟強烈否認有任何不當行為,並堅稱它堅持與 Sun 簽訂的許可協議。該公司辯稱,微軟對 Java 所做的任何更改都只是允許開發人員利用 Windows 特有的功能。

    歷經三年之後,在 2001 年 1 月,兩家達成和解,最終以微軟同意向 Sun Microsystems 支付 2000 萬美元,並且永久禁止在其產品上使用「Java 兼容」商標。不過,此時的微軟還可以繼續提供採用 Sun 開發的 Java 技術的現有產品,但這一場官司也讓微軟有了其他的想法。

    在這一年的 7 月,微軟宣佈開始在 Windows XP 系統中不再支持 Sun 的 JVM,從而扶持自家的 .NET 平臺,與 Java 分庭抗禮。

    為什麼此時要對 Java 展開攻勢?

    那要問微軟為何要在時下再次擁抱 Java,根據微軟官方的解釋是,「如今,越來越多的 Java 開發者正在考慮如何將現有的 Java 應用程序遷移到雲中,或者如何構建新的雲原生應用程序。我們一直在努力讓您更輕鬆地使用您喜歡的工具和框架將 Java 應用程序遷移到雲中。然後,您可以使用您已經了解和信任的相同應用程序伺服器和開源技術輕鬆部署和擴展。」

    多年來,Java 已經積累了龐大的開發者群體,且有數以萬計的設備使用 Java。在雲時代下,微軟在產品研發過程中也添加了對 Java 的高度支持。

    除了在上文提到了的 VS Code 之外,微軟在 Intellij IDEA、GitHub、Playwright、Apache Maven、Gradle 等工具方面,以及在某些產品上都有 Java 的身影。

    如微軟在搜尋引擎 Bing 中的支持 Windows 開始菜單中的搜尋功能,便是使用 Java 來執行與索引相關的功能,同時 Bing 橫跨 50,000 多臺伺服器上有數十萬個 JVM。

    在 2019 年 8 月,微軟收購了一家主營業務是 Java 性能最佳化的公司——jClarity。2021 年,時間點有些巧合的是,彼時 4 月 5 日,美國最高法院在 Google 與 Oracle 之間關於在 Android 使用 Java 的訴訟案中,最終判定 Google 開發 Android 使用的 Java API 程式碼合理。次日,與此事沒有任何關係的科技巨頭微軟便推出了自家的 JDK 項目 Microsoft Build of OpenJDK 版本。

    來源:https://cdn.graph.office.net/prod/media/java/infographic-evolution-of-java-at-microsoft.pdf?v={1/string}

    整體而言,微軟此舉一方面是想要在 Java 的市場中站穩腳跟,另一方面根據官方發佈的 Java 演進圖顯示,微軟在自己的基礎設施中大量使用 Java,特別是它的 Azure 生態系統(Azure Spring Cloud、Azure App Service、Azure Functions、Azure Kubernetes),為此它需要有自己的統一和通用的構建方式。

    再者,正如 i-programmer 評價道,「微軟此舉還有將 Azure 推給 Java 開發者的宣傳動機,微軟試圖引誘他們,甚至通過提供免費課程幫助他們遷移他們的應用程序。」

    不過,歸根究底,對開發者而言,也是一個不錯的訊息。

    參考資料:

    https://www.infoworld.com/article/2074908/sun-microsoft-settle-java-lawsuit.html

    https://www.i-programmer.info/news/80-java/15701-microsoft-goes-all-out-on-java.html

    相關文章

    捲土重來?不,Java 一直是王道!

    捲土重來?不,Java 一直是王道!

    摘要:幾年前,「Java 已死」的話題在程式設計圈內引起廣泛討論,自此之後有關唱衰 Java 的聲音層出不窮。反觀如今各類程式語言排行榜,J...

    剖析 Netty 內部網路實現原理

    剖析 Netty 內部網路實現原理

    作者 | 張彥飛allen 來源 | 開發內功修煉 Netty 是一個在 Java 生態裡應用非常廣泛的的網路程式設計工具包,它在 2004...

    再見 Java 7!

    再見 Java 7!

    整理 | 蘇宓 歷時 11 年,Java 7 生命週期終止,Oracle 正式停止對該版本的擴展支持。 隨著官方支持的停止,Java 7 僅...