从技术上:
作为一个平台,.net和java都非常的成熟和稳定,mono的jit编译器当前已经能够支持X86,sparc和ppc(itanium,s390,amd64和arm都已经在实现中),事情发展得非常快,虽然我希望在今年内还能有更多的发展。从另一个观点来看,.net有更好的特点,它更容易与现存的代码结合(使用P/Invoke和嵌入机制),我认为这点非常重要,因为GNOME的核心代码在今后几年内将很有可能继续使用C来完成。
语言独立性也总是要点之一,.net的虚拟机比JAVA提供了更好的功能,例如支持结构,函数指针,回调等等,允许人们使用各种不同的语言来写代码,例如,可以在.net中运行JAVA语言写的代码,但是反过来就不行。当你想要选择一个平台时候,最好是能选择能让各种不同语言之间进行互相交互的。我不想深入到C#和JAVA的细节对比之中,但是看上去非常多的人(使用JAVA编程的)发现C#改进了很多JAVA出现的问题(虽然JAVA的新版本将在今后几个月内也将会有所改进)。
从法律上:
大部分的法律问题都是围绕着软件的许可证和专利的可用性这个中心。MONO代码的可用性是基于LGPL许可证(运行时)和X11许可证(类库)。一些工具,例如C#编译器则是GPL,这些看上去并没有什么非常大的差异。
所以,对于MONO,至少这些核心的虚拟机和类库对于法律来说是自由的,但是JAVA却并不是,这点我们大家都已经知道。
当然,人们将MICROSOFT等同于恶魔,还有一些枪手说,加入SUN阵营比依靠MS会有更好的结果。这里我只提醒两件事:SUN和MICROSOFT都是大公司,他们之间的区别只是分别处于不同的位置。在这一边,例如,SUN贡献了OpenOffice给社区(我个人认为他的这个贡献大小不亚于LINUX的内核),但是另一方面,SUN又资助SCO,恐吓JBOSS等等。Microsoft,作为另一方,完全站在我们的社区之外,他也资助SCO,和我们竞争。但是同时,他也支持CLR和C#的标准化,而SUN却从来没有这么对JAVA做过。
如果拒绝一个标准仅仅只是因为它是MS提出的,我认为是不理智的:我敢打赌,在今天有超过90%的标准委员会都有MS的代表,而且还有一大堆他们的提议,难道我们仅仅因为这个就打算不和这些标准进行交互吗?自由软件一个成功的重要原因就是我们尝试实现一切可能的标准,和其它的系统交互,将一些私有的系统移植到开源平台。
所以,在最后,问题归结为:你是更愿意相信一个矛盾的对待我们的社区,并不允许我们使用它的专利许可的人,还是相信一个完全在我们社区之外,但是却允许我们使用他的专利许可的人?请不要回答.net技术并没有开放所有的许可,因为我可以很轻易的告诉你,JAVA是完全没有开放任何的许可。也提醒一下,虽然Microsoft目前是占有统治性的地位,但是他们也可能必须屈服于兼容性问题,就像在欧洲的反垄断法案一样(对我们有利)。
我知道一些人将会回答他们不会相信SUN和Microsoft中的任何一个,我认为他们遗漏了一点:在当前的专利形式下,任何可选择性的技术都会存在这样的风险,这并不只是SUN或Microsoft的问题,而是专利制度的问题。换句话来说:选择任何一项技术用来开发我们的应用和类库,专利的风险总是存在的。假如你使用专利和法律的风险以及我们的自由软件的成功率来画一幅图,你将会发现它是一条陡峭上升的曲线。假如我们希望能成功的提供一个自由的主流平台,我们将 面对专利和各种各样的法律恐吓(即使它们是毫无根据的,就像SCO给我们所展示的)。
如果我们想避免任何法律的问题,我们只有置身之外。