Ruby Microsoft
2007 年 5 月 30 日
在 RailsConf2007 中,JRuby 引起廣大迴響。這個小團隊接手了一個奄奄一息的專案,並將它轉變成 JVM 上 Ruby 平台的頂尖實作。他們獲得許多喝采,實至名歸。
因此,隨著 JRuby 逐漸成形,焦點轉移到另一個常見的受控碼執行時期:.NET。Microsoft 目前對於 Ruby 的意圖仍不明朗。他們已宣布 Ruby 為 Silverlight 的腳本語言,但仍留下許多未解的問題。這是一個 Ruby 語言的完整實作,還是某種形式的 Ruby++,也就是 Ruby 的增強子集?
JRuby 服務兩個截然不同但互補的目的。一方面,它是一個強大的 JVM 腳本語言,讓你可以將動態語言融入 Java 應用程式中。它的第二個目的是在 JVM 中實作 Ruby 平台,讓 Ruby 應用程式,特別是 Ruby on Rails 應用程式,可以在 JVM 上執行,就像在 MRI(Matz's Ruby Interpreter,目前的 C 執行時期)上執行一樣順利。
Microsoft 的「Iron Ruby」最大的問題是相容性如何?它會在 CLR 上完整實作嗎?我聽到的所有跡象都告訴我,Iron Ruby 的主要推手 John Lam 決心取得一個完全相容的實作。然而,以目前的情況來看,這可能非常困難。即將成為 ThoughtWorker 的 JRuby 提交者 Ola Bini 認為,幾乎不可能在不查看 MRI 原始碼的情況下找出如何實作 Ruby 執行時期,但 Microsoft 對其員工下載開源軟體的能力施加了嚴格的限制,更不用說查看原始碼了。開源社群透過原始碼進行許多溝通,因此這使得與開源社群合作變得非常困難。
當然,更重要的是 Microsoft 與開源世界的歷史關係一直很困難。過去,Microsoft 竭盡所能詆毀和威脅開源社群。近年來,情況有所改善,但對於 Microsoft 的核心意圖仍有真正的疑問。許多人將最近的專利威脅視為 Microsoft 仍意圖與開源對抗到底的證明。
與大多數其他技術公司不同,Microsoft 一直努力尋找與開放原始碼世界共存的方法。對 Microsoft 來說,這比 Sun、Apple 或 IBM 更困難,因為它們絕大多數都是軟體公司。Linux、GNU 和 Open Office 等開放原始碼專案直接與 Microsoft 的皇冠寶石競爭。然而,我從未認為對開放原始碼宣戰,試圖將其消滅,是一種可行的長期解決方案。開放原始碼將會繼續存在,問題是如何適應它。
對於更明顯的死亡競賽,Microsoft 在 Ruby 的立場不同。Ruby 沒有與 Microsoft 產品線中的核心營收產生器競爭。更重要的是,Ruby 社群非常渴望與 Microsoft 合作。我在 RailsConf 上與大多數人交談時,他們都非常渴望看到 Microsoft 對 Ruby 的全面支援,而且有很多創意的想法在流傳,說明我們如何嘗試提出一個可以讓它發揮作用的方法。我在社群中聽到的壓倒性感覺並非「Ruby 將消滅邪惡的 Microsoft」,而是「我們如何克服問題,讓 Ruby 在 Microsoft 上執行」。
正如 Chris Sells 指出的,我們確實必須考慮「這對 Microsoft 有什麼好處」的問題。我看到幾個原因。首先是 .NET 和 Windows 在資料中心中的角色。如果 Microsoft 不支援 Ruby 平台,那麼如果 Ruby on Rails 變成功,它就有可能導致人們在伺服器農場中遠離 .NET(和 Windows)。
另一個原因是人員。Microsoft 不喜歡公開承認這一點,但確實令人擔憂的是,AlphaGeek 正在遠離 Microsoft 平台。越來越多人認為 Microsoft 的願景是命令和控制組織中的 Morts 大軍。對於能夠讓有才華的企業開發人員或敏捷開發流程發揮作用的工具,似乎經常會遭到直接的阻撓。
幾年前,我在 Redmond 的(有限)人脈告訴我,他們看到技術領導人正逐漸遠離 Windows 平台。最近這些跡象似乎有增無減。閱讀我部落格中「軟性」的部分,我感受到那些長期支持 Microsoft 的人出現了真正的幻滅感。以敏捷為導向的開發人員對於 Microsoft 工具的發展方向感到沮喪。Microsoft 會議幾乎不提敏捷流程,反而更傾向於瀑布式方法。這些工具以其僵化的角色區分,積極阻止敏捷主義者偏好的模糊界線。
在 RailsConf 中,Tim Bray 認為技術上的關鍵決策是由程式設計社群做出的。我部分同意這個看法。我們在 IT 中有這麼多膨脹軟體的原因,是因為 IT 採購決策通常是由那些與軟體開發現實脫節的人在高爾夫球場上做出的。然而,高爾夫球場上的決策可能會主導短期,但隨著時間推移,我認為 Tim 的論點是正確的。因此,失去頂尖極客今年或明年可能無關緊要,但會隨著時間推移而不可避免地損害 Microsoft。
對 Microsoft 來說,明年已經過去了。我們看到客戶對 Microsoft 專案的興趣明顯下降,特別是在美國。在澳洲,.NET 在我們的客戶中根本沒有任何立足點。我不確定如何理解這些資料。我們還不夠大,無法單獨成為一個具有統計效度的樣本。但這仍然是一個有用的資料點,特別是因為我們認為我們的客戶是「頂尖 IT 商店」。
Thoughtworks 中的故事可能更重要。當 .NET 出現時,人們對這個平台非常感興趣。許多人很高兴看到 Java 平台的強勁競爭對手,並熱衷於參與 .NET 專案。然而,在大約過去的一年中,人們對 .NET 的態度發生了很大轉變。儘管 Redmond 提出了一些非常有趣的事情。Mike Two 非常熱衷於 Windows 工作流程工具,我對 Linq 和其他語言開發印象非常深刻。但對 Microsoft 技術的普遍看法是無聊。這很重要,因為正如 Tim O'Reilly 所相信的那樣,頂尖極客指出其他人將在幾年內做的事情。關鍵在於,對 Microsoft 的態度不是仇恨(許多極客的普遍態度),而是無聊。這就是 Paul Graham 在他說的 Microsoft 已死 中的意思,因為它不再危險了。
對開源的態度是這個問題的很大一部分。當 Java 出現時,其產品組合中存在著巨大的差距,更糟糕的是,其 API 中有一些可怕的標準工具(Entity Bean 的願景浮現在腦海中)。這些差距和糟糕的想法是由開源社群修復的。Ant 為我們提供了一個建置工具,EJB 被 Spring 和 Hibernate 取代了。.NET 也有其差距,而且開源社群再次挺身而出填補了這些差距。然而,Microsoft 拒絕與這些努力合作,甚至似乎不遺餘力地破壞它們。我對 Microsoft 對 NUnit 的反應感到特別噁心——這是一個優秀的 XUnit 測試工具,其設計元素在 OOPSLA 上受到 Anders Hejlsberg 的讚揚。Microsoft 最終不僅推出了競爭對手的程式庫,還故意讓它不相容。這不是鼓勵人們投資於這個平台的那種反應。
公平來說,那場災難發生在幾年前。像聘用吉姆·休古寧和約翰·藍姆等行動有助於消除這種印象。克里斯·塞爾斯、唐·鮑克斯和吉姆·紐柯克等技術人員正在努力讓微軟成為一個更開放的環境。但就像任何大型組織一樣,微軟充滿了矛盾的力量,我們不知道哪一種力量將會勝出。
我的同事約翰·科迪巴克指出,所有這些的中心是意識到 Ruby 不僅是另一種 .NET 語言,而是一個完整的社群和軟體開發的態度。Ruby 是個社群,開放原始碼、敏捷思考和輕量級解決方案是根深蒂固的價值觀。他說,雷德蒙德的常見問題是「他們問我『為什麼這種語言很重要』,而不是『為什麼這種思考很重要?』」
因此,我看到 Ruby 和微軟之間的機會。Ruby 社群似乎渴望與微軟合作。這為雷德蒙德提供了一個機會,找出如何處理與開放原始碼合作的問題,並讓這項努力成為未來合作的範例。在 .NET 上實作完整的 Ruby 平台將會是這項合作的絕佳產品。或許更好的結果是,這項工作可以成為微軟如何與以開放性和敏捷性為中心的社群合作的範例;一個可以成為進一步傳播態度的跳板,進一步幫助微軟世界中的程式設計師及其客戶。
對此有很多反應(請參閱 Technorati 以取得完整清單)。特別值得閱讀的是:山姆·詹提爾、科里·福伊、路克·梅利亞、傑瑞米·米勒、羅克福德·洛特卡、約翰·藍姆、伊凡·霍夫、卡爾·塞甘、奧拉·比尼、米羅·亞當尼、查爾斯·納特、彼得·勞達蒂、尼克·馬利克
更新:最近(2007 年 8 月),我們看到雷德蒙德傳出一些非常令人鼓舞的跡象。特別是,IronRuby 將會在 RubyForge 上託管,看起來像是非常寬鬆的授權 - 奧拉 認可。