1. 程式人生 > >愛開源的微軟是如何擊敗 Facebook、Google 成為 GitHub No.1 的?

愛開源的微軟是如何擊敗 Facebook、Google 成為 GitHub No.1 的?

擁抱開源的微軟這幾年究竟都做了些什麼?

去年今月,我在微軟開發者峰會上見到了《設計模式:可複用面向物件軟體的基礎》聯合作者、現任微軟技術院士(Technical Fellow at Microsoft)Erich Gamma,那是我第一次真正對「微軟愛開源」的 Slogan 有了清晰而深刻的認識,從可在視窗、Linux 與 Mac 環境執行的 VS Code,基於 JavaScript、具備強型別的 TypeScript,到既開源也跨平臺的 .NET Core 等,微軟已然成為了開源領域的佼佼者。彼時還很好奇微軟為什麼會從封閉到積極擁抱開源,對此,Erich 如此言說:

其實開源對於微軟而言並非新鮮事物,只是方法和心態上發生了變化。過去,我們只是自己編寫,自己維護產品。現在,既使用別人的,也提供給別人使用。開源對我們來說,就是一扇門,打開了就可以接觸到更多的開發者。

所以,微軟愛開源,不只是使用到了很多開源的東西,我們也做了非常多的貢獻。就像是“給”和“拿”的關係,這是一個非常重要的變化。我們不僅有完整的流程去使用現在的開源技術,也有完善的過程將我們的工具開放給大家使用。

從 PC 時代一路走來,曾經“因循守舊”到成為 Linux 和開源社群的頭號敵人,頗讓開發者嗤之以鼻的微軟究竟如何在開源上發力甚至擊敗了 Facebook、Google 成為 GitHub 貢獻第一的公司?而從詆譭開源到擁抱開源,為何微軟會做出截然不同的開源戰略轉型?追本溯源,也許我們能夠從微軟開源歷程的幾個重大事件中找尋到答案。

2004 年,基於 OSS 許可協議釋出的 WiX 工具整合為了微軟釋出的第一個開源專案,該工具集包括了編譯器、連結器、庫工具和反編譯器。

2006 年,微軟推出開源託管網站 CodePlex,在此網站所釋出的所有程式都可以下載原始碼使用。儘管微軟已經宣佈此網站即將於今年關閉,但不可否認的是,這是微軟首次重要的開源社群嘗試。

2007 年,微軟的開源許可證 Microsoft Public License (Ms-PL) 和 Microsoft Reciprocal License (Ms-RL) 得到了 OSI 認證。在一篇文章中,OSI 寫道,“這個決定的通過獲得了開源社群大多數人的認可(雖然還有不同意見),這些許可證符合開源定義的 10 項準則,所以應該通過。”

2008 年,微軟加入 Apache 軟體基金會併成為白金會員,逐漸向開源 Web 伺服器 Apache 專案靠攏。

2009 年,微軟向 Linux 核心貢獻了超過兩萬行的程式碼。這些程式碼大大增強了在 Windows Server 2008 Hyper-V 或 Windows Server 2008 R2 Hyper-V 上執行的 Linux 作業系統虛擬機器的效能。這些貢獻讓微軟在一段較短的時間內成為了 Linux 核心排名第一的貢獻者。

2009 年,ASP.NET MVC 基於 Microsoft Public License 開源,這些程式碼沒有平臺限制,也可以被移植到 Java 或 Ruby 平臺中去。

2012 年,微軟基於 Apache 2.0 許可證開源了它的部分 Web 產品體系,包括 ASP.NET MVC、Razor 和 Web API。

2012 年,微軟開源了用來強化 JavaScript 開發大型應用程式的工具語言 TypeScript,後來更被 Google 用於打造自家維護的下一代 JavaScript 應用程式框架 AngularJS。

2012 年微軟成立“微軟開放技術有限公司(Microsoft Open Technologies Inc.)”,其主要目標是“推動公司在開放性方面的投入,包括互操作性、開放標準和開源”。

還是在 2012 年,微軟開源了用來強化 JavaScript 開發大型應用程式的工具語言 TypeScript,後來更被 Google 用於打造自家維護的下一代 JavaScript 應用程式框架 AngularJS。

2014 年,微軟雲端和企業部門執行副總裁 Scott Guthrie 在 Connect() 會議上正式宣佈.NET 核心將開源,包括 .NET Framework 4.6、.NET Core 5、還有 Runtime 和編譯平臺 Roslyn 等。這不是微軟第一次宣佈產品開源計劃,但卻是最讓全球開發者震撼的一次宣佈。

同年,新上任的 CEO Satya Nadella 提出了“微軟愛 Linux“,並加入了 OCP(Open Compute Project),在微軟 Build 大會上成立.NET 基金會,全力支援 .NET 平臺上的開源研發與合作。

2015 年,微軟通過與 credativ 合作,將最流行的 Linux 發行版之一的 Debian 帶到了它的 Azure 上。同年與 Red Hat 達成合作,將 Red Hat 企業版 Linux(RHEL)帶到了 Azure 雲上。

同在 2015 年,微軟還開源了 Visual Studio Code, 並且釋出了 Visual Studio GDB 預覽版,允許開發者遠端除錯 Linux 物件。

2016 年初,微軟和 Canonical 展示了在 Azure 上執行 Ubuntu Linux 的第一個技術預覽版。至此,微軟已經將所有的領先的 Linux 發行版帶到了 Azure 雲上。

同年 3 月,在 EclipseCon 大會上,微軟宣佈加入 Eclipse 基金會,在 11 月的 Connect 開發者大會上,微軟公司加入 Linux 基金會成為第 11 位白金會員,取得董事會席位,同時也宣佈 Google 加入微軟 .NET 開源基金會。

且在 6 月的 Red Hat DevNation 大會上,微軟正式釋出實現跨平臺(Windows、Linux 和 Mac)的 .NET Core 1.0 ,這意味著開發者可以使用 Windows 開發,用 Linux 部署。

9 月,在 GitHub 的“對開源貢獻人數最多的組織(Organizations with the most open source contributors)”的榜單中,微軟擊敗 Facebook、Google 一躍成為 No.1,至此,微軟徹底贏得了來自業界及開源社群的認可。

而到了今年,微軟在開源領域已經有了諸多動作,比如開源 GVFS (Git Virtual File System) 虛擬檔案系統、Azure Service Fabric SDK、用於幫助開發者建立跨平臺應用的 ReactXP,以及可用於訓練無人機和自動駕駛汽車的模擬器平臺 AirSim 等。

在《開源縱橫談:微軟開源那些事兒》一文中,作者杜玉傑如此總結道:“對企業來說開源作為一個武器,無論是進攻還是防禦,首先要考慮的都應該是商業的利益。微軟帝國從 PC 時代崛起,經歷了網際網路時代的短暫迷惘,新的君主能夠領悟到了開源的價值,轉變戰略乘雲之勢重回寶座不得不說是企業開源戰略轉型的一個典範。”

而從技術角度出發,我們又不禁想問,開源對於微軟究竟產生了怎樣的影響?Erich Gamma 給出了他的答案:

開源的發展速度非常驚人,尤其是微軟。五年前談到開源時,整個 Windows 沒有什麼開源的東西。這五年來我們發生了很大的變化,現在微軟內部也有了很多流程與方法,能夠讓我們的工程團隊去使用開源。

五年前,我們的律師一聽到開源,第一反應就說“NO”,但現在律師也在幫助我們更好地往開源上做努力了。我們知道開源領域有很多爭議,特別是 License 的部分,有些“License”也許存在一些灰色地帶。然而在微軟,我們的工程部門和法律部門都在幫助我們更加合規地做開源專案,比如 GPL。現在,在他們的幫助下,我們能夠清楚地瞭解哪些是我們可以使用的。

雖然是開源,但事實上對微軟對我們所提供的開源軟體是負責任的。微軟對開源技術的運用橫跨多個不同的產品線。我們內部對整個開源的軟體都做了詳細的記錄,來幫助開發者和產品團隊,讓他們避免陷入到一些 License 問題裡。我們很多開源的軟體都有資料庫去記錄它用在哪個產品裡,能夠實現正向和反向的追蹤。比如有的開源軟體造成一些問題,我們可以很清楚地對相關產品進行迅速準確的修正。

而說到影響,我所看到的最大的貢獻便是來自於效率的提升。比如當我們把 .Net Core 開源之後,有諸多來自社群的人幫助我們審閱程式碼,給出了很多改進意見。同時,許多開發者會希望能不能實現讓 .Net Core 在其他平臺上執行,我們可以看到在這方面很多的嘗試。

最後,Microsoft OpenDev —— 微軟 Azure 開源技術峰會將在北京時間 6 月 22 日凌晨0點)正式開始直播,包括微軟 Azure 首席架構師 John Gossman、Ubuntu 創始人 Mark Shuttleworth、Docker COO Scott Johnston 等多位業界專家將帶領聽眾一起進入微軟的開源新世界,內容包含 Redhat on Azure、Canonical on Azure、Docker & 混和雲架構實戰、Pivotal Cloud Foundry 應用在現代化的企業環境中融合Java的共構、Chef on Azure for DevOps、Deis Kubernetes容器管理平臺與Helm 等,歡迎進入峰會官網報名觀看直播。