经常遇到一些好的.NET项目开放源代码之后,便很少更新。即使是大名鼎鼎的CodeProject中的文章中的代码项目,遇到问题时,留言或是主动给作者发邮件,都像石沉大海一样,得不到回复或解决,只好自力更生。

Codeplex中的项目,更新的速度就更慢了。从First release算起,三个月之外,就很少有更新了。我指的项目不是指官方的一些项目,驻留在这里。比如SQL Server的Sample Database驻留在这里,更新速度当然频繁,有官方的背景,各方面的更新工作肯定不会马虎。

1  项目已经成熟,满足作者设定的需求范围,不再需要更新

这种情况比较多。项目的开发人员,在设定目标后,会花费很多时间来完成它,业余时间都会充分利用上。我自己也经常这样,一旦认为添加某个Feature对项目非常重要时,会把业余时间都利用上,加班加点的把它完成。

举例说明,一个数据库工具,一开始作者设定只需要连接到SQL Server进行数据操作即可。这样的需求设计,你很难要求作者去为你添加Oracle,MySQL的支持。一个代码生成工具,起初的目标是支持SQL Server, Access, Oracle,MySQL四种类型的数据库,但是后来作者发现,大部分的时候,只需要满足一个常见的数据库类型即可,要能支持其它类型的数据库,测试和编码的工作量要多很多。写出来的功能,就应该充分测试,要么就没有,要么就测试充分以满足各种情况和场景。我的一个代码生成器曾经也有这样的思考,只要求支持SQL Server,但是后来一直想加入对Access,Oracle的支持,一直没有动力,最后不了了之。项目中遇不到的使用场景,很难有动力去虚拟一个环境,做出连自己都不需要的功能。

2  遇到技术瓶颈 现在项目停止开发或转向新的架构和需求

每个开源项目是为解决特定领域的问题,如果满足第一条,可以满足该领域的需求,便不再需要精进。另一方面,遇到不可解决的技术瓶颈,也会导致项目无法继续深入下去,现在已经做的最好了,再深入下去会无从下手。

前段时间,我想找一个项目中代码重复的检测工具,判断一下,我的项目中有哪些代码是通过拷贝的方法做出来的,而不是进行代码重用。代码重复给项目的维护带来麻烦,所幸运的时,在CodePlex上面找到一个开源工具,Clone Detective, 只支持VS2008,之后就没有更新。2010年4月微软发布Visual Studio 2010,至今已有三年,也没有更新过这个小工具。VS2012内置了代码重复的检查工具,但是依照目前的情况来看,.NET 4.5的普及程度不高,拒绝对XP和Windows Server 2003的支持,要花钱买正版的企业,一般都不会为此买单。Resharper 有一个插件工具,也可以检测代码重复,但是只支持5.1版的Resharper。以我的理解,这两个工具,可能是因为面对新的API变化,技术阻碍,而停止更新。能做出这样工具的开发人员,技术瓶颈是需要适应新的开发工具接口,但无力去维护更新。

3  作者或公司转向新的研究领域,原有的代码不再维护更新

这种情况曾经发生在Borland公司身上。Borland公司曾经是世界一流的开发工具供应商。曾经的一个时代,世界上的绝大多数的控件,是用Delphi开发的。后来是.NET的崛起,Delphi控件供应商逐渐减少,或是无法赢利的时候,直接把控件抛给开源社区,开源社区因为没有赢利的驱动,又不以把握市场需求为目的,凭借个人兴趣爱好,难以成体系的发展。到现在,世界上流行的控件或组件包,几乎都是.NET开发的。Infragistics NetAdvantage系列,Dev Express系列,ComponetOne系列,Synfusction系列,Krypton系列,全是为了.NET市场而生的商业组件包。

Java世界也发生过这种现象,顺应市场的发展,开源只是为了放下过去,更好的拥抱未来。

留下一堆的组件包在开源世界,几乎无人问津。

4  失去促进开源项目发展的动力,有心无力

这一点应该是符合中国国情的一点。设计一个流行的开源项目,可以增加自己的知名度,为自己镀金。但功成名就之后,这个敲门砖便不再有作用,失去继续维护的动力。再者,IT这一行逐渐走向平民化,薪水和待遇不再远远高于其它行业,有时候甚至低于金融,会计这些行业。

俗话说饱饭思淫欲,在没有吃饱饭的情况下,积极的促进开源事业的发展,有点背道而迟。如果有基金扶持,项目肯定会做的很好,很有特色。但是这一项待遇只属于各大院校。把研究出来的东西,再锁进抽屉里面,如果想看论文,需要再次付款,谁会再次去为此付款。作为纳税人,我们已经为他们的科研工作提供支持,用税收给他们研究动力,我想看一下他们研究的成果却不行,这可是花我的钱研究出来的东西。

公司则永远不可能为开源而开源,公司要赢利才能生存,每个月的水电费,租金,人员开支都需要钱。公司开放项目的源代码也是为了赢利。曾经看到一个公司把ERP项目都开源了,后来发现原来是赚个吆喝,真正的核心组件没有开源。

5  项目被公司看中,进行定制 开源停止更新 闭源发展的更好

如果一个开源项目被公司看中,公司聘请到这个项目的开发人员,探讨这个项目的发展,或转向新的商业领域。这是开源项目中,我以为最好的一种结局。典型的例子是.NET Reflector,大名鼎鼎的.NET反编译工具,在.NET开发领域几乎无人不知,无人不晓。后来被Red Gate收购了,版本更新更快了,功能也更强大。

曾经有朋友问,是不是增加了更霸道的功能才收费。我的回答是Yes。

旧的版本的.NET Reflector,反编译后有几个问题没有处理好:

1  属性  比如代码中一个Name的属性, 代码如下所示

public string Name { set;get;}  

反编译后的结果是是get_Name,set_Name,要手动修改才能编译成功。

事件也是一样,旧版本反编译后的源码生成了Delegate.Add和Delegate.Remove两个方法的调用版本,也需要调整。

新版本解决了这个问题,

2  对于一些常见的编程模式,新版本的.NET Reflector 可以正确识别,并为你重写代码。

这个例子,最简单的当属于foreach和using。试一下,新版本的.NET Reflector可以为你生成这两个句式的代码。而旧版本中,这是没有的。这里的using我是指using(Stream stream=File.OpenRead(“file.txt”))

这种情况也有另一种发展方向,开源项目被公司看中,但是公司不向作者购买,而是直接用它的开源版本,在上面直接修改,做出一个自己需要的版本,或是进行增强。在各种盗版软件泛滥的情况下,开源协议相当于一纸空文。公司的目的是以最小的开支,创造最大的利润,可以理解这种情况。

为什么项目开放源代码之后就变成死项目 很少或几乎不再更新相关推荐

  1. mysql是开放源代码_但这可能是很因难的,因为MySQL是开放源代码的,所以任何人...

    但这可能是很因难的,因为MySQL是开放源代码的,所以任何人都可以为之做出贡献. 相关句子 3.EXSLT工作是开放式的:希望对此做出贡献的任何人都可以如愿以偿. 4.这或许是极权恐怖机制的" ...

  2. revit2016项目样板_2016年有10个项目

    revit2016项目样板 2015年是许多新的开源项目如火如荼的一年. 从企业解决方案到自制的开放源代码混合,今年作为开放源代码软件发布的许多项目都在很短的时间内对计算领域产生了巨大影响. 尽管闪耀 ...

  3. [机器翻译]参与 Microsoft 开放源代码软件项目的方式

    下面是一个事实:Microsoft 托管在 GitHub,包括.NET 编译器平台,也称为"Roslyn"具有多达 4 万行代码等一些相当大的大约 2,000 开放源代码软件 (O ...

  4. zeppelin连接数据源_使用开放源代码合同(open-zeppelin)创建以太坊令牌

    zeppelin连接数据源 by Danny 通过丹尼 使用开放源代码合同(open-zeppelin)创建以太坊令牌 (Create an Ethereum token using open sou ...

  5. 线性瘤是良性吗_良性聚会:露营者如何构建开放源代码工具来解决时区

    线性瘤是良性吗 by Michael D. Johnson 迈克尔·约翰逊(Michael D.Johnson) 良性聚会:露营者如何构建开放源代码工具来解决时区 (Meeting for Good: ...

  6. 开放源代码_您是否在开放源代码中看到了这些个性?

    开放源代码 当我与Mozilla基金会合作时,在该组织吹嘘一百五十多名员工之前,我们进行了一个基金会范围的Myers-Briggs指标. Myers-Briggs是一种流行的性格评估,广泛用于职业规划 ...

  7. osi7层协议源代码_捍卫开放源代码的17年:立即加入OSI

    osi7层协议源代码 开源倡议 (OSI)是国际信任的纽带,可以保护和促进开源软件以及开发和依赖开源软件的社区. OSI的工作主要以我们在认证开放源代码软件许可证方面的工作而著称,如今,OSI的工作已 ...

  8. python是自由开放源代码软件_开放源代码定义之历史篇

    引言 本文节选自<开源之声--开放源代码运动文集>一书中由著名开源领袖 Bruce Perens 所执笔的<开放源代码定义>一文,开源之道尝试以开放源代码原作者的视野,从而看看 ...

  9. 练手必备,20个Python实战项目含源代码

    "读"代码是不能给你带来任何收益的,正如"读书"一样,如果在读的时候你不琢磨,保管你读完仨月准忘了一大半.真正需要的是去"试"代码,动手去调 ...

最新文章

  1. 激光雷达和V2X技术
  2. Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset
  3. AI之matlab随笔(1)-数据类型,逻辑操作,数组,逻辑运算,异或,零向量或零矩阵
  4. 摄像头预览左右翻转_轻薄翻转触控本里的高性能机型:惠普ENVY x360 13评测
  5. Linux Kbuild文档 2
  6. python 使用pexpect实现自动交互示例
  7. cmake linux模板 多目录_多目录工程的CmakeLists.txt编写(自动添加多目录下的文件)...
  8. 发布文章自动上传图片并生成水印
  9. ZOJ4104 Sequence in the Pocket
  10. android 判断 飞行模式,Android 判断飞行模式的状态
  11. flask sqlalchemy按照创建时间逆向排序
  12. Photoshop教程:10秒闪电搞定照片构图
  13. 孤独星球android app,孤独星球免费版
  14. python终端会话是指什么_进程组、会话、控制终端的概念及程序
  15. 常用格式如何互相转换(jpg转png)
  16. AI展现唇语识别能力,大数据功不可没
  17. bzoj4407 于神之怒加强版(莫比乌斯反演+线性筛)
  18. JS加密解密对于asp.net解密加密
  19. Django Rest_Framework(DRF)
  20. 请删除你的NPP吧,可以用EmEditor,MadEdit,PSPad等编辑工具!

热门文章

  1. php使用redis持久化,Redis持久化完整版本
  2. Windows 命令行大全
  3. html相对路径载入页面,html页面的绝对路径和相对路径
  4. 天翼云从业认证课后习题(3.1天翼云计算产品)
  5. Leetcode7 :整数反转(JAVA)
  6. java与C++实现判断闰年(百练OJ:2733:判断闰年)
  7. 笔记-信息系统开发基础-uml-uml类图关系
  8. 5G的频谱效率,到底有多高
  9. Vue+Leaflet实现加载Stamen显示地图
  10. Vue+Video.js播放m3u8视频流(海康威视摄像头+RTMP服务+FFmpeg)