Java 是 Sun 开发的跨平台语言,Java 编译出的程序运行在与平台无关的虚拟机 JVM 上,只要在各个操作系统之上实现了虚拟机,Java 就可以在其上运行。因为这一特性, Java 成为跨平台网络开发的首选语言。
这一点,显然是微软最不愿意看到的。微软希望所有的软件都只能在它的 Windows 操作系统中运行,这样就可以牢牢拴住用户,即使生产 Vista 这样的垃圾系统也能赚钱。所以,微软自己也发布一个所谓的“扩展” Java 虚拟机,但是这个 Java 版本只能用在微软自己的系统之上,不能用在其它平台,只能用于 IE 浏览器,无法用于其它浏览器。微软希望通过特意的设计,逐步消减 Java 的跨平台特征。
Sun 并没有束手就擒,面对这种卑劣的手段,只好于 1997 年提起诉讼,认为微软利用自己的垄断地位,破环 Java 的设计原则:
“Microsoft feared and sought to impede the development of network effects that cross-platform technology like Netscape Navigator and Java might enjoy and use to challenge Microsoft’s monopoly. Another internal Microsoft document indicates that the plan was not simply to blunt Java/browser cross-platform momentum, but to destroy the cross-platform threat entirely, with the ‘Strategic Objective’ described as to ‘Kill cross-platform Java by grow(ing) the polluted Java market.’”
微软败诉,只得放弃自己的 Java。并通过退出 .NET 来抗衡 Java。.NET 和 Java 都是中间层,但是和 Java 不同,.NET 并不提供跨操作系统的虚拟机,而是提供与语言关的环境。在 .NET 之上,可以使用 VB,VC 和 C# 进行开发,结果会编译成中间语言,实现与语言无关的特性。总体来说,.NET 还是十分出色的一个开发环境,具有许多优秀的功能。其最重要的目的,就是与 Java 在争抢网络开发上的地盘。
Mono 是 Linux 下的 .NET 开发工具,目的是使 Windows 下的程序更容易移植到 Linux,开发人员更快开始 Linux 下的开发。MonoDevelop 很好用,而且开发出了一些优秀的程序,例如 Beagle, Tomboy, Banshee 和 F-Spot 等。但是由于 Mono 和 .NET 的关系,很多人都害怕微软又会出什么招数,或者利用专利手段一下釜底抽薪,导致所有基于 Mono 的程序陷入困境。正如 Richard Stallman 所说:基于自由软件开发 C# 实现是值得鼓励的一件事,但是把 Gnome,把许多优秀的桌面程序建立在 C# 之上是一件危险的事情。
但是有一个公司并不用担心这个事情,那就是 Novell。因为 Novell 与微软达成的协议,即使 Mono 侵犯了微软的版权,微软也不会起诉这公司。这也就是 Mono 的开发者 de Icaza 受雇于 Novell,而且 Novell 大力支持 Mono 开发的原因。
也许有一天,微软会认识到开源是大势所趋,自由软件是软件这一生产形势的必然要求。但是在获得微软的完全授权之前,Mono 的命运总是不靠谱的。
2016-5 update
故事和预想的类似,微软最终将 Mono 纳入自己的手中。我们应该高兴,微软在这么多年中,终于有所改变,开始了很多开源的项目。
但是,还是那句话,任何严肃的开源开发者,都不应该将自己的工作建立在一个不稳固的基础之上。