Spiga

.NET Framework 开放源代码

2007-10-10 10:17 by Cat Chen, 7668 visits, 收藏, 编辑

一些.NET Framework的源代码开放了,基于MS-RL许可,并提供调试整合到VS2008当中了。从旁观者的角度来说,这是Microsoft迈向开放与社区化合作的一大步,很多人也把这当作历史性事件,然而对于一般的开发者而言呢?这事情到底有多大影响力呢?我认为对于开发者来说,不同角色的开发者遭受的影响是不同的,并且整体影响是导致分工继续细化。

.NET最内层的本质是什么?Microsoft曾经非常引以为豪的COM,.NET只是这种思想一路实践并且进化而来的结果。.NET最开始设计为满足RAD的需求,以便吸引使用其他语言、框架的程序员转移过来,然而开放源代码后RAD的程序员仍然是RAD的,这对他们几乎没有任何影响。想象你是一个习惯于拖放一切的ASP.NET开发者,基本上不想写任何业务逻辑之外的代码,数据访问层用Typed DataSet或者Linq to Sql搞定,界面用现成的Control和Extender,Microsoft这次提供的源代码对你有什么意义吗?因为你不需要自己编写Control或者Extender,自然你不会花时间去了解有关的模式,也无须查看内置控件的代码。如果你调用内置控件出问题了,在Google以及调试内置控件之间,你显然会选择前者。因此,对于习惯于RAD的程序员来说,开放源代码这件事是没有任何直接影响的。

然而,有些间接影响是不能忽略的。前面提到了使用Google搜索问题的解决方案,然而Google自身并不懂得解决问题,答案其实来自与其他已经把问题解决了的程序员,因此这些源代码如果确实帮助了其他类型的程序员解决了问题,那么也就间接帮助了RAD程序员。

那么还有哪些类型的程序员呢?例如做稍微底层一些工作的,编写Control、Extender、HttpHandler、HttpModule等可复用组件以便为自己或别人提供方便的。编写可复用组件最糟糕的地方就在于它是可复用的——你永远不知道别人会将它以什么样的方式用在什么样的环境,因此按照一定的模式开发这些组件以便保证兼容性就很有必要,而模式本身最好就参考自.NET Framework内置的同类组件,除非你想更大范围地研究.NET Framework并重新发明轮子。因此研究与模仿内置组件的行为是组件开发者的必修课,而从ScottGu文章(Releasing the Source Code for the .NET Framework Libraries)中的截图看来,内置组件丰富的注释将有助于程序员更轻松地理解其原本的设计方式,从而更轻松地在自己的组件中模仿内置组件的行为。事实上,有很多内置组件是设计为对另外一些内置组件特别照顾的,这类型的耦合在Reflector中阅读代码时是最难以理解的,如果阅读有注释的代码相信会轻松不少。

最后,开放源代码可能将会导致对.NET Framework进行纯粹思想或理论作研究的人数增加。事实上,无论.NET Framework多么倾向于实用型,如果Microsoft需要获取来自社区的创新思想,还是必须吸引一群思想家的,否则大多数的社区创新都只是应用与应用方法,Microsoft还是独揽.NET Framework前进方向的控制权。这种中央集权有它高效的地方,特别是发展初期,Microsoft能够根据自己的实力战略性地安排新特性的研发顺序。然而Microsoft也曾经因此吃亏,例如ASP.NET 2.0没能引入AJAX支持,直到最后才急忙补上一个Callback特性,并承诺日后开发完整的AJAX库。因此,倾听来自社区的观点很重要,而要求社区有观点就必须先提供素材给他们讨论,开放源代码将能够激发社区对.NET Framework的研究热情并且提供更多能够作为反馈信息的新观点。

因此,就.NET Framework开放源代码这样一件事情而言,对于不同的开发者其影响的大小是不同的。同时我们也能预期Microsoft本身肯定也是最大的受惠者之一,否则以其智慧绝对不会做这样一个决策。

Add your comment

22 条回复

  1. #1楼 jillzhang      2007-10-10 10:31
    看了1.1和2.0的部分源码,感觉framework中有好多值得我们学习和借鉴的地方,比如里面运用了大量的设计模式,如果Adapter,和接口编程规范,原来是偷看的,现在合法化了,很不错
     回复 引用 查看   
  2. #2楼 Anytao      2007-10-10 11:41
    适者生存,每个人开始从定位找方向。不管怎忙,开发部分Framework源码还是值得纪念的事情,对于有志于此的同志来说,从中汲取自己的所需实在是幸事一件。
    RAD开发人员可能不需要深入到底层,但并非在某个时刻不需要了解底层的机制,所以底层的工作可以由大牛们去研究,然后在园子里晒晒,RAD们再google享受,所以.NET开源是件好事:-)
     回复 引用 查看   
  3. #3楼 the rock[未注册用户]2007-10-10 11:48
    内置组件丰富的注释将有助于程序员更轻松地理解其原本的设计方式,从而更轻松地在自己的组件中模仿内置组件的行为。事实上,有很多内置组件是设计为对另外一些内置组件特别照顾的,这类型的耦合在Reflector中阅读代码时是最难以理解的,如果阅读有注释的代码相信会轻松不少。

    ---------------
    深切認同。
     回复 引用   
  4. #4楼[楼主] Cat Chen      2007-10-10 12:03
    @jillzhang
    以前也不算是偷看,因为Reflector就是Microsoft以非官方形式提供的,并且反编译过来的代码不一定和原来的一模一样,增加了阅读难度。
     回复 引用 查看   
  5. #5楼 deerchao      2007-10-10 12:47
    @Cat Chen
    Reflector的作者是微软工作人员?

    意义还是颇大的,当初Java宣布开源时,我很是心动了一把,考虑过要不要转过去,因为开源代表的并不只是能看到源代码这个简单的事实,它还相当于一个平台对未来持续存在和发展的承诺;.Net FX共享源码后,Java的竞争优势就相对小了不少。
     回复 引用 查看   
  6. #6楼[楼主] Cat Chen      2007-10-10 12:54
    @deerchao
    是的,请看这里:
    http://www.aisto.com/roeder/
     回复 引用 查看   
  7. #7楼 goalbell      2007-10-10 13:37
    @Cat Chen
    可以提供.NET Framework源代码安装包连接吗?
     回复 引用 查看   
  8. #8楼[楼主] Cat Chen      2007-10-10 14:00
    @goalbell
    ScottGu只是说他们的team“正在”忙于相关工作,但暂时还找不到可下载的版本。
     回复 引用 查看   
  9. #9楼 goalbell      2007-10-10 14:21
    谢谢!如你文章所说的,没有注释的代码看起来真得很不轻松,现在唯有看MSDN。
     回复 引用 查看   
  10. #10楼[楼主] Cat Chen      2007-10-10 14:41
    @goalbell
    MSDN的信息当然并不如代码本身“完整”,因为MSDN仅包括对外暴露的接口信息,然而并不对内部行为作出任何承诺。这样做的好处是,只要不改变接口,日后的版本可以随意改变内部行为,也就是传统意义上所谓封装带来的好处,但事实上很多人都希望了解和学习内部行为的模式。
     回复 引用 查看   
  11. #11楼 goalbell      2007-10-10 15:03
    我想每一个人都乐于研究.net framework底层实现的原理。不管日后版本有什么变化,都好适应啊:)
    我查看了http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx,微软的Open Source已经有很大进步了。至于微软以后的发展策略都会牵动无数关注MS的Developer。
     回复 引用 查看   
  12. #12楼 GerryJiang      2007-10-10 15:20
    开放源代码对个人影响没有比对.net影响来得大,这一点真让人欣喜
     回复 引用 查看   
  13. #13楼 weef[未注册用户]2007-10-10 15:30
    ScottGu 可真忙,还要搞ASP.NET MVC框架,LINQ,DLR,Silverlight 1.1 等等
     回复 引用   
  14. #14楼 Justin      2007-10-10 18:33
    这应该算得上一次历史事件了!

    感觉我们应该思考一下背后的原因?大家讨论一下吧
     回复 引用 查看   
  15. #15楼 RicCC      2007-10-10 21:12
    早应该这样做了,老是被一些莫名其妙的问题搞得晕头转向还无从查起
     回复 引用 查看   
  16. #16楼 bbqqw[未注册用户]2007-10-10 21:23
    framework中有好多值得我们学习和借鉴的地方
     回复 引用   
  17. #17楼 peterchen[未注册用户]2007-10-11 04:43
    值得学习和借鉴。
     回复 引用   
  18. #18楼 补丁      2007-10-11 08:23
    博主看待事物的态度不太积极啊...
    说实话,我觉得你看的这几方面,挺片面的
     回复 引用 查看   
  19. #19楼[楼主] Cat Chen      2007-10-11 08:56
    @补丁
    不是不积极,而是事情应该分开几面看,多不同的群体同一件事情造成的影响是不同的,甚至我们还可以讨论一下这对Java社区又有没有什么影响。至于你觉得我的观点片面的话,你也可以发表自己的观点啊,大家的观点都拿出来讨论,那样就全面了咯。
     回复 引用 查看   
  20. #20楼 duguguiyu      2007-10-11 09:35
    @jillzhang
    能提供链接么?谢谢。
    在vs2008 beta2里debug不进去啊。。。
     回复 引用 查看   
  21. #21楼 阿齐      2007-10-11 11:37
    看看IBM开放Visual Age for Java成Eclipse后的获得的好处,不难预计Microsoft开放.Net源码后所获得的好处
     回复 引用 查看   
  22. #22楼 王孟军!      2008-03-05 10:19
    包容乃大
     回复 引用 查看