失去信心?还是再度迷惘(二)——Mono only is Mono,not .NET never

Mono only is Mono,not .NET never 。

当我继续写这个 Post 的时候,我专门到 Mono 的站点 下载了 Mono 的运行时和类库的完整源代码。用来两天的时间阅读了一些类库如 ASP.NET,XML 等等的源代码,必须承认,通过这两天源代码的阅读让我原先的一些想法有稍微的改变。

从微软的战略来看,是希望将用户毫无条件的锁定在 Windows 操作系统之上,有人的地方就有计算机,有计算机的地方就有 Windows 。这是微软多年来倾其全力的追逐的梦想。在桌面操作系统上除了 Apple 的苟延残喘之外,还有一部分反微软斗士使用的基于 Linux 的桌面系统之外,其他无一不是微软帝国在统治。也许这里有人会攻击我对于 Linux 的看法,也不止一次的听到有人对我说“你根本不懂 Linux ”,所以一切的评论都是不够公允的。不曾经怀疑过 Linux 在服务器市场上的冲击力,也正是在服务器领域的成就让芬兰大学生 Linus Torvalds 的无心之作在短短的 10 多年内成为最流行的服务器操作系统,但是在桌面领域呢?你可以告诉我已经有很好的操作系统,包括我们国内那几家扛着“振兴民族软件产业”大旗的企业,从国家拿走大笔大笔的钱,也做出了一个表面看起来像模像样的“为中国人设计”的 Linux 操作系统,但是有多少人真正在用,明眼人都会看明白的。当然也有人会骂,用着 D 版的 Windows 在网上冲浪,然后愤恨不平的陈述微软霸权。

作为微软,总会尽可能的将用户锁定在 Windows 之上,那么 .NET 也不会例外,为了确保不允许被“拷贝”到其他操作系统之上,在类库的设计上正如上面提到的会采用“底层 API ”。尽管微软也提交了 CLI ,提交了 C# Spec ,但是遵循了 ECMA 标准的 C# 和微软自己的标准有多少区别吗?

有,正因为标准,所以有了 Mono 这样东西的出现

没有,因为 Mono 仅仅是 Mono ,而不是 .NET 。

你可以质疑我这样自相矛盾的回答,也可以说我不懂 Linux ,更加可以说我不了解 Mono 。我的朋友 Kaneboy 告诉我越来越发现 Mono 是一个好东西,等我阅读了部分的源代码之后我也认为 Mono 是一个好东西,但是它是 .NET 吗?也许你可以从我下面的文字中找到一些答案。

如果你是一个 .NET 架构师,那么我建议你一定要去阅读 Mono 的源代码,因为 Mono 可以告诉你很多你之前不可能知道的东西,你会看到很多你一直想看到却没有机会看到的东西,就比如 ASP.NET 、 ADO.NET 。相信在 VS.NET 或者 Web Matrix 的帮助下你能够写出很眩的页面,能够写出很漂亮的控件,也会感觉到比之前的 ASP 更加得心应手,但是你会发现一些东西你始终无法突破,比如很多文档会告诉你 ASP.NET Page 对象模型,会告诉你页面的在整个 HttpApplication 管道化过程中的迁移,会告诉你可以启用 Session ,可以启用片断缓存,但是始终无法明白 Web 应用中 Session 的底层是如何设计和考虑的,如何真正有效的提高你的缓存设计策略。一切尽在 Mono ,相信那些源代码能够解开你一些困挠许久的疑惑。

但是,目前的 Mono 仅仅是在跟 Microsoft 在走,如果你去阅读过源代码,然后也用 Reflector 看过微软自身对于类库的实现,你会发现作为追随者真的很辛苦,对于一些核心的实现,微软仅仅是对于原有的技术做了一个包装,然后通过 .NET 统一编程接口,而 Mono 却需要一切从零开始。前文提到了微软会不遗余力的将所有技术锁定在 Windows 操作系统之上,那么从这个角度来说他绝对不运行有一个同样的产品出现在非自己统计的操作系统平台上,对于 Mono, 也如同对于 Application Server 的策略是一致的,因为微软比谁都明白,如果让框架运行时 (CLR) 和应用服务器独立于操作系统,那么 Windows 就失去了最后的技术壁垒,不知道大家是否记得当年的 Visual J++ ,为了将 Java 锁定到 Windows ,微软开发了 WFC ,并且允许使用 Visual J++ 开发 COM 组件, Sun 后来告发了微软一把,理由很简单,因为微软的“险恶用心”和破坏了 Java 世界的“纯洁性”,平心而论,如果忽略微软对于 Java 的改动,甚至仅仅将 Visual J++ 当着一门新的语言 ( 比如 Pre-C# ,当然了,这是我在胡扯 ) ,依托于 WFC 的强大,作为 Anders 加盟微软之后打造的第一个产品, Visual J++ 在 windows 开发上就我个人的感觉来看已经超越 Visual Basic 。

从文化而言, Mono 是一个自由斗士,它打破了 .NET 只能够在 Windows 上运行的限制,同样也帮忙微软印证了 .NET 可以跨平台。但是微软真的系统跨平台的 .NET 吗?肯定不是的,如果所有的开发商都使用 .NET 开发,而 .NET 同样可以运行于任何操作系统,那么 Windows 就不是唯一的选择,开放源代码、免费(这里提及的可能不是特别准确)的 Linux 会更加成为主流。如果你是商人,你将如何选择?因此没有任何一个理由让微软的 .NET 要去跨平台,当然商业上标榜的跨平台是另外一个策略问题了。

鉴于上述, Mono 注定是永远的追随者, 1.1 的框架还没有在 Mono 下面完全实现,而 .NET 2.0 又快要推出,如果你稍微那么了解一点点的 Whidbey(Visual Studio 2005 的开发代号),你知道 .NET 2.0 相对于 1.1 已经改变很多很多,那么 Mono 究竟有多少力量能够在时间上不被微软甩开太远。我这里没有答案,也许谁也没有。如果你是学习,那么有很多理由建议你去看看 mono ,如果是你研究,那么有更多的理由选择 Mono 。如果你是一个商人或者架构师,要找出在商业上选择 Mono 的理由确实很难,真的,很难 ……

Mono only is mono,not .net never

Published At
Categories with Web编程
Tagged with
comments powered by Disqus