Ruby 微软

2007 年 5 月 30 日

RailsConf2007 上,JRuby 引起了很多关注。这个小团队接手了一个停滞不前的项目,并将其转变为在 JVM 上运行的 Ruby 平台的一流实现。他们获得了许多掌声,这些掌声都是应得的。

因此,随着 JRuby 的出现,聚光灯转向了另一个常见的托管代码运行时——.NET。微软对 Ruby 的意图目前尚不清楚。他们宣布 Ruby 作为 Silverlight 的脚本语言——但这仍然留下了很多悬而未决的问题。这是否是对 Ruby 语言的完整实现,还是某种形式的 Ruby++——Ruby 的增强子集?

JRuby 具有两个截然不同但互补的目的。一方面,它是一种功能强大的 JVM 脚本语言,允许您将动态语言编织到 Java 应用程序中。它的第二个目的是在 JVM 中实现 Ruby 平台,这使得 Ruby 应用程序,特别是 Ruby on Rails 应用程序,能够在 JVM 上运行,就像它在 MRI(Matz 的 Ruby 解释器,当前的 C 运行时)上运行一样好。

微软“Iron Ruby”的最大问题是它的兼容性如何?它会在 CLR 上完全实现吗?我听到的所有信号都告诉我,Iron Ruby 背后的主要力量 John Lam 决心获得完全兼容的实现。然而,就目前而言,这可能非常困难。即将成为 ThoughtWorker 的 Ola Bini,一位 JRuby 提交者,认为在不查看 MRI 的源代码的情况下,几乎不可能弄清楚如何实现 Ruby 运行时——但微软对其员工下载开源软件的能力,更不用说查看源代码了,施加了严格的限制。开源社区通过源代码进行大部分交流——因此,这使得与开源社区的合作变得非常困难。

当然,笼罩着这一切的是微软与开源世界之间历来复杂的关系。过去,微软竭尽全力诋毁和威胁开源社区。近年来,情况有所改善,但微软的核心意图确实存在疑问。最近的专利威胁被许多人视为证明微软仍然决心与开源斗争到底。

与大多数其他科技公司不同,微软一直在努力找到与开源世界共存的方法。这对微软来说更难——与 Sun、Apple 或 IBM 不同,他们绝大多数是一家软件公司。像 Linux、GNU 和 Open Office 这样的开源项目直接与微软的王牌产品竞争。然而,我一直认为,对开源宣战,试图将其消灭,不是一个可行的长期解决方案。开源已经成为现实,问题是如何适应它。

对于 Ruby,微软处于与更明显的生死之战不同的位置。Ruby 不会与微软产品线中的核心收入来源竞争。更重要的是,Ruby 社区确实渴望与微软合作。我在 RailsConf 上与大多数人交谈时,他们都非常渴望看到对微软上 Ruby 的全面支持——并且围绕着我们如何尝试提出一种方法来使其发挥作用,有很多创造性的想法在流传。我在社区中听到的压倒性感觉不是“Ruby 将杀死邪恶的微软”,而是“我们如何克服问题才能让 Ruby 在微软上运行”。

正如 Chris Sells 指出的那样,我们确实需要考虑“这对微软有什么好处”这个问题。我认为有两个原因。首先是 .NET 和 Windows 在数据中心中的作用。如果微软不支持 Ruby 平台,那么如果 Ruby on Rails 变得成功,它就有可能让人们从 .NET(和 Windows)服务器场中迁移出去。

另一个原因是人。微软不喜欢在公开场合承认这一点,但确实存在一个真正的担忧,即 AlphaGeeks 正在 远离 微软平台。越来越多的感觉是,微软的愿景是指挥控制组织中的大量 Morts。似乎经常会直接阻止使用工具来支持有才华的企业开发人员,或者阻止敏捷开发流程。

几年前,我在雷德蒙德的(有限的)联系人告诉我,他们看到技术领导者正在真正地远离 Windows 平台。最近,这些迹象似乎正在增加。阅读我博客订阅中“软体”部分的内容,我感觉到那些长期支持微软的人中存在真正的幻灭感。以敏捷为导向的开发人员对微软工具的方向感到沮丧。微软会议几乎没有提及敏捷流程,更多地倾向于瀑布式方法。这些工具及其严格的角色分离,积极地阻止了敏捷主义者喜欢的模糊边界。

在 RailsConf 上,Tim Bray 声称,技术方面的关键决策是由编程社区做出的。我部分同意这一点。我们之所以在 IT 中有如此多的臃肿软件,是因为 IT 采购决策通常是在高尔夫球场上由那些与软件开发现实脱节的人做出的。然而,高尔夫球场上的决策可能主导短期,但随着时间的推移,我认为 Tim 的说法是正确的。因此,失去 Alpha Geek 今年或明年可能无关紧要,但随着时间的推移,它会不可避免地损害微软。

事实上,对于微软来说,明年已经过去了。我们已经看到我们的客户对微软项目的兴趣明显下降,尤其是在美国。在澳大利亚,.NET 在我们的客户中根本没有立足之地。我不确定如何解读这些数据。我们规模还不大,不足以成为我们自己统计上有效的样本。但无论如何,这是一个有用的数据点,尤其是在我们认为我们的客户是“Alpha IT 公司”的情况下。

也许更重要的是 Thoughtworks 内部的故事。当 .NET 出现时,人们对该平台产生了浓厚的兴趣。许多人很高兴看到 Java 平台的强大竞争对手,并渴望参与 .NET 项目。然而,在过去的一年左右的时间里,人们对 .NET 的兴趣大幅下降。尽管雷德蒙德推出了一些非常有趣的东西。Mike Two 对 Windows 工作流工具非常感兴趣,我对 Linq 和其他语言开发印象深刻。但人们对微软技术的普遍看法是打哈欠。这一点很重要,因为正如 Tim O'Reilly 所相信的那样,Alpha Geek 指示着几年后每个人都会做什么。关键是,人们对微软的态度不是仇恨(许多极客的普遍态度),而是无聊。这就是 Paul Graham 所说的 微软已经死了 的意思,因为它不再危险。

人们对开源的态度是这个问题的一个重要部分。当 Java 出现时,它的产品组合中存在着巨大的差距,更糟糕的是,它的 API 中存在一些可怕的标准工具(想到实体 Bean 就让人不寒而栗)。这些差距和糟糕的想法是由开源社区解决的。Ant 为我们提供了一个构建工具,EJB 被 Spring 和 Hibernate 取代。.NET 也存在差距,同样,开源社区也站出来填补这些差距。然而,微软拒绝与这些努力合作,甚至似乎故意破坏它们。我特别厌恶微软对 NUnit 的反应——一个优秀的 XUnit 测试工具,其设计中的某些元素在 OOPSLA 上受到 Anders Hejlsberg 的赞扬。微软最终不仅推出了一个竞争库,而且故意使其不兼容。这种反应不会鼓励人们将时间投入到该平台中。

公平地说,那场灾难发生在几年前。聘用 Jim Hugunin 和 John Lam 等人的行为有助于消除这种印象。像 Chris Sells、Don Box 和 Jim Newkirk 这样的技术人员正在努力使微软成为一个更加开放的环境。但就像任何大型组织一样,微软充满了相互矛盾的力量,我们不知道哪些力量会占上风。

我的同事 John Kordyback 指出,这一切的核心是认识到 Ruby 不是另一种 .NET 语言,而是一个完整的社区和对软件开发的态度。Ruby 是一个社区,开源、敏捷思维和轻量级解决方案是其根深蒂固的价值观。他说,雷德蒙德的一个常见问题是“他们问我‘为什么这种语言很重要’,而不是‘为什么这种思维很重要’”。

因此,我认为 Ruby 和微软之间存在一个机会。Ruby 社区似乎渴望与微软合作。这为雷德蒙德提供了一个机会,让他们弄清楚如何处理与开源合作的问题,并让这项工作成为未来合作的典范。在 .NET 上对完整 Ruby 平台进行一流的实现将是这种合作的绝佳成果。也许更好的结果是,这项工作可以作为微软如何与以开放性和敏捷性为中心的社区合作的典范;一个可以作为跳板,进一步传播可以进一步帮助微软世界中的程序员及其客户的态度的典范。

对此有很多反应(请参阅 Technorati 以获取完整列表)。特别值得阅读的是来自:Sam GentileCory FoyLuke MeliaJeremy MillerRockford LhotkaJohn LamEvan HoffKarl SeguinOla BiniMiro AdamyCharles NutterPeter LaudatiNick Malik

更新:最近(2007 年 8 月),我们看到雷德蒙德传出了非常令人鼓舞的消息。特别是,IronRuby 将托管在 RubyForge 上,并且看起来许可证非常宽松——Ola 表示赞同