“开源”是什么,能吃吗?

谈起“开源”,我相信各位可以说出目前非常火热的很多开源产品Linux、MYSQL、MangoDB、Memcached、Redis、JQuery、 Hadoop、android……,就连曾经对开源持敌对态度的微软都开始拥抱“开源”:ASP.Net MVC中把开源的JQuery做为默认的JS库、ASP.Net MVC开源、支持Mono(可以看做“开源的.Net”)的发展、嵌入式系统.Net MF开源。要知道微软曾经把“禁止参与任何开源项目”做为员工规范的,可见“开源”的影响力和作用已经越来越大。

但是很多人对“开源”有着误解:

  • 有人在博客上发布一款自己开发的软件,底下评论就有人喊“强烈要求开源”;
  • 有人在博客上把自己开发的一个产品的源代码发布出来,标题就是“某某某开源啦!”;
  • 有人在博客上写一篇一款非开源产品和同类的开源产品对比的时候,底下评论也经常会说“开不开源对你有啥影响,所有源代码你都能看到,可你修改过这些源代码?”;
  • 有人认为“开源就是免费”;
  • 有人说“开源软件都是网民开发的,质量没有保障,还是商业性大公司开发的软件放心”;
  • 有人说“不敢用开源的东西,源代码大家都可以看到,那系统的漏洞不也就被人看到了?”。

那么什么是“开源”呢?通俗的讲,“开源”就是“功能大家一起完善,Bug大家一起改”的众包协作开发模式。 以最著名开源操作系统Linux为例,“Linux之父”Linus开发出了Linux的初始版本,然后就把Linux以开源的形式交给开源社区去共同维 护。没有一个像微软的Windows团队那样的大公司来维护Linux操作系统,都是开源社区的各位爱好者以及厂商去发展和维护Linux:

  • 某个数学牛人A感觉Linux应该有科学计算的功能,因此就自己开发了科学计算的软件包提交到Linux,这样Linux中就有了科学计算的软件包;
  • 另外一个人B用了A开发的这个科学计算软件包,发现还缺少一个自己需要的功能,就把这个功能加到这个科学计算软件包中,然后代码提交到Linux;
  • 微软发现需要给Linux增加访问Windows文件系统的能力,就开发了Linux访问Windows文件系统的功能,提交到Linux,这样我们就可以使用Linux访问Windows文件系统了;
  • Novell公司想让.Net开发的程序能够运行在Linux平台下,就开发了开源的Mono;
  • Unity公司使用Mono开发跨平台的游戏引擎Unity3d,他们发现了Mono的改进点,就修改了Mono的代码,并且把修改后的代码提交回Mono;

参与Linux的开发者中,有微软、Novell、RedHat之类的大公司,也有一些小公司及非营利性组织,更有很多的个人爱好者参与;有的贡献者可能 贡献了上万行代码,有的贡献者可能仅仅提交了几行代码;有的贡献者增加了重要的功能,有的贡献者也许只是改了几个Bug……也许单个组织或者个人的贡献都 不大,但是成千上万的水滴则汇聚成了大海,成就了Linux等这样伟大的开源产品。

如果没有开源,那么系统的所有的功能都要等着它的开发厂商来提供;如果没有开源,系统的Bug只能等着开发厂商来修复;因为Windows不开源,所以除 非微软提供,否则我们无法把Windows装到智能电视里;因为Linux开源,所以我们可以把Linux移植到手机中运行;因为.Net Framework不开源(真正的),所以无法在Linux下运行.Net程序;而因为Mono是开源的,我们可以借助Mono来实现使用C#/.Net 开发Android、IOS应用(MonoTouch是使用C#/.Net开发IOS应用的技术,Mono For Android是使用C#/.Net开发Android应用的技术,而Unity3d则是使用C#开发跨IOS、Android、Windows等平台的 游戏开发技术);因为Android开源,所以不需要谷歌提供,就有人把Android移植到X86架构CPU下,这样我们就可以在x86 PC机上安装运行Android操作系统。

开源最大的魅力就在于不依赖于某个厂商,大众都可以修改代码以满足自己的需要,千万个“自己的需要”就汇聚成了伟大的产品,任何违背这个理念的开源都是“伪开源”。

如果只是可以“看到代码”并不是真正的开源。某个人把自己开发的 软件源代码在网上公布出来了,但并没有通过git、svn等把源码管理起来,更没有人负责对其他人对这个软件的修改代码进行汇总、管理,只能是有的人感兴 趣下载下来“自己修改自己用”并没有把修改贡献给社区,因此并没有体现出开源的社区价值。比如微软发布.NET Framework 源代码采用的就是Microsoft Reference License协议,这个协议最明显的特点是“允许用户看源代码,但不许修改和分发,只许参 考”,因此不能算作真正意义上的开源。而微软的ASP.NET MVC则是基于Apache协议发布的,“社区中的所有人都能够参与进来,对签入的代码、缺陷修正、新特性开发提供反馈,并且可以使用每日构建的最新版本 源代码和测试来构建和测试这个产品”因此ASP.Net MVC才是真正的开源项目。

以一个我的亲身例子来说,多年前,我在网上发现了一款Eclipse的反编译工具JodeEclipse很好用,但是升级到新版本Eclipse以后这个 JodeEclipse就无法使用了,因此我就下载了JodeEclipse的源代码,修改了代码使其能够运行在新版本Eclipse下,把修改后的代码 提交上去并且发布了一个Release,后来发现很多人都在用我发布的这个新版本。再比如前两年我用的一款软件(名字已经忘了),发现它没有中文版,因此 我就根据它的多语言的实现机制制作了中文语言包,并且提交了上去,新版本就有中文版了。

开源是一种所谓“众包”的工作模式,因为有了开源我们才有了这样精彩的技术世界。曾经和开源格格不入的.Net社区现在也已经因为开源理念的加入而变得丰 富多彩起来,Log4Net、Json.Net、lucene.net、NPOI、Spring.Net、NHibernate、ASP.Net MVC等成熟的老牌开源技术自然不用说,Mono 系更是大放异彩让.Net开发者过了一把跨平台的瘾,包括使用Mono在.Net下运行ASP.Net网站、开源的游戏开发引擎MonoGame以及基于 Mono的商业引擎Mono For Android/MonoTouch/Unity3D。当然更希望.Net开发者不要把自己的视野局限在微软社区,MYSQL、Memcached、 Redis、Nginx、Linux、MongoDB等优秀的开源技术同样是可以被.net技术社区的人灵活运用在解决方案中(参考我之前写的一篇文章《哪个家伙说“网站去.Net化”?》)。

拥抱开源、利用开源、贡献开源,让我们的技术生活更加丰富多彩!

---From:杨中科CSDN博客

时间: 2024-10-13 11:51:36

“开源”是什么,能吃吗?的相关文章

Android从1.0到 6.0各版本的差别

Android 系统从2008年到现在(2016年4月),八年时间里版本从1.0一直升到6.0,由于Android系统更新速度快,导致市面上的Android设备运行的Android系统版本不一(专业术语叫碎片化严重)2016年的最新Android版本分布图(截止到2016年1月) ,从图中可以知道目前主流的系统是三款,但是还是有些版本的系统还在使用,作为Android程序开发者,必须尽量照顾到各种版本的系统,否则你提出的解决方案是不完善的,对于Android开发者来说,很有必要知道android

《开源框架那些事儿21》:巧借力与借巧力

同样做前端UI,为什么有人花了一点力气,就可以做好?而有的人费尽全力,仍然错误百出?我们可以先看看几个故事. 故事1:巧借力,乌鸦也可以吃核桃 有一个盛产核桃的村子,每年秋末冬初,成群的乌鸦总会来到这里,到果园里捡拾那些被果农们遗落的核桃. 核桃仁虽然美味,但是外壳那么坚硬,乌鸦怎么才能吃到呢?原来乌鸦先把核桃叼起,然后飞到高高的树枝上,再将核桃摔下去,核桃落到坚硬的地面上,被撞破了,于是,乌鸦就得到了那美味的核桃仁. 可是,让核桃从高空坠落,核桃壳破裂的概率很低,很多时候,乌鸦都是望而兴叹.然

悠然乱弹:竹子与开源:扎根是为了长得更高

端午节到了,人们都在讨论屈原不屈不挠的精神,以及龙舟.粽叶等世界文化遗产.粽叶清淡,给人无限的遐想.或者,你很容易想起和粽叶形状比较类似的竹叶,以及屹立挺拔的骨感竹子.竹在清风中瑟瑟的声音,在夜月下疏朗的影子,都让文人墨客深深感动.而竹于风霜凌厉中苍翠依然的品格,更让诗人引为同道.苏东坡曾在<于潜僧绿筠轩>里宣称,"宁可食无肉,不可居无竹.无肉令人瘦,无竹令人俗.人瘦尚可肥,士俗不可医."当年郑板桥曾作<竹石>,细细品味,也给人许多思考. 作为开源参与者,其实我

《转》.NET开源核心运行时,且行且珍惜

转载自infoQ 背景 InfoQ中文站此前报道过,2014年11月12日,ASP.NET之父.微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET 扩展为可在 Linux 和 Mac OS 平台上运行..NET核心运行时将基于MIT开源许可协议发布,其中将包括执行.NET代码所需的一切项目——CLR.JIT编译器.垃圾收集器(GC)和核心.NET基础类库.此外,微软还发布了Visual Stu

【旅游类APP源码】开发者案例开源,走过路过不可错过!

小编语:继上周分享仿饿了么APP源码后,得到了开发者们的强烈反响.热心的开发者(社区ID:小小昊)又翻箱倒柜地找出一个旅游类项目,大手一挥,慷慨奉献给各位AppCan的同学了!想要学习旅游类APP开发的同学千万不要错过啦!AppCan要继续开源!开源!再开源(重要的事情说三遍!) 本案例使用Bootstrap实现css布局,用AppCan IDE开发,用AppCan实现页面跳转功能. 测试机型:红米1S.小米3 页面构成 如图为案例整体布局,起始页为index页面,index页面分为四部分,首页

Unity3D对弈游戏:狼吃羊游戏

简介 中文名:狼与羊 英文名称:Wolves&Sheep 游戏类型:休闲/棋类 玩家人数:单人或双人 游戏下载:Windows.Android 游戏描述:童年时与小伙伴常玩的一种游戏,游戏简单易懂而又变化多样. 第一节 游戏规则 棋盘可以用小石头在泥土里上随手就画出来了,棋子中的狼和羊可以用树枝或者小石子代替. 准备 找两块大点的石头当作狼,二十四块小石头是羊,狼和羊必须放置在网格的交叉点上,每个交叉点上最多有一个棋子. 开局 两个狼分别放在上下两个脖子上,羊8个放在中间一圈的交叉点上,狼先走羊

《开源框架那点事儿17》:与屈原对话及开源精神

竹子与开源:扎根是为了长得更高 端午节到了,人们都在讨论屈原不屈不挠的精神,以及龙舟.粽叶等世界文化遗产.粽叶清淡,给人无限的遐想.或者,你很容易想起和粽叶形状比较类似的竹叶,以及屹立挺拔的骨感竹子.竹在清风中瑟瑟的声音,在夜月下疏朗的影子,都让文人墨客深深感动.而竹于风霜凌厉中苍翠依然的品格,更让诗人引为同道.苏东坡曾在<于潜僧绿筠轩>里宣称,"宁可食无肉,不可居无竹.无肉令人瘦,无竹令人俗.人瘦尚可肥,士俗不可医."当年郑板桥曾作<竹石>,细细品味,也给人许

分布式计算开源框架Hadoop入门实践(一)

在SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,在我从前写的文章<Tiger Concurrent Practice --日志分析并行分解设计与实现>中有所提到.但是由于统计的内容暂时还是十分简单,所以就采用Memcache作为计数器,结合MySQL就完成了访问控制以及统计的工作.然而未来,对于海量日志分析的工作,还是需要有所准备.现在最火的技术词汇莫过于“云计算”,在Open API日益盛行的今天,互联网应用的数据将会越来越有价值,如何去分析这

100个精彩的开源游戏

街机游戏 1.Andy's Super Great Park 骑在过山车上,躲避障碍的同时收集气球.游戏有25关,另外还有18关需要得到高分才能解锁.支持的操作系统:Windows,Linux,Android. 2.Armagetron Advanced 这是Tron的3D克隆版.在游戏中,你需要控制你的光圈来使你的竞争对手比你早撞上墙.支持单人游戏和最多16人联网游戏.支持的操作系统Windows, Linux, OS X, Android. 3.BZFlag 全称是"Battle Zone