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