对开源软件的小想法

这学期听邵栋老师讲完开源软件,自己去了解了很多资料,有一些想法。记录在这里


我的开源之路


在学习这门课之前,对开源软件的了解很少,只知道linux是一个开源的操作系统,学习需要也用过一段时间,但对具体什么是开源,怎么样算开源,开源有什么用都不清楚。
听邵栋老师讲《大教堂与市集》,才对开源软件开发有了一个粗浅的认识。那么什么是开源软件呢?


开源软件(英语:open source software,英文缩写:OSS,中文也称:开放源代码软件)是一种源代码可以任意获取的计算机软件,这种软件的版权持有人在软件协议的规定之下保留一部分权利并允许用户学习、修改、增进提高这款软件的质量。开源软件的英文“open-source software”一词出自free software(自由软件)的营销活动中【1】


也就是说,中文把它翻译成开放源代码软件很容易引起歧义,因为OSS与开放源代码是有区别的,放出源码是OSS的必要条件,但不是充分条件,因为作者给予别人的除了源码还有一些别的权利,开放源代码的定义由Bruce Perens定义如下【2】:

  • 自由再散布(Free Distribution):允许获得源代码的人可自由再将此源代码散布。
  • 源代码(Source Code):程序的可执行文件在散布时,必需以随附完整源代码或是可让人方便的事后取得源代码。
  • 派生著作(Derived Works):让人可依此源代码修改后,在依照同一许可协议的情形下再散布。
  • 原创作者程序源代码的完整性(Integrity of The Author’s Source Code):意即修改后的版本,需以不同的版本号码以与原始的代码做分别,保障原始的代码完整性。
  • 不得对任何人或团体有差别待遇(No Discrimination Against Persons or Groups):开放源代码软件不得因性别、团体、国家、族群等设置限制,但若是因为法律规定的情形则为例外(如:美国政府限制高加密软件的出口)。
  • 对程序在任何领域内的利用不得有差别待遇(No Discrimination Against Fields of Endeavor):意即不得限制商业使用。
  • 散布许可协议(Distribution of License):若软件再散布,必需以同一条款散布之。
  • 许可协议不得专属于特定产品(License Must Not Be Specific to a Product):若多个程序组合成一套软件,则当某一开放源代码的程序单独散布时,也必需要符合开放源代码的条件。
  • 许可协议不得限制其他软件(License Must Not Restrict Other Software):当某一开放源代码软件与其他非开放源代码软件一起散布时(例如放在同一光盘),不得限制其他软件的授权条件也要遵照开放源代码的授权。
  • 许可协议必须技术中立(License Must Be Technology-Neutral):意即许可协议不得限制为电子格式才有效,若是纸本的许可协议也应视为有效。

那一个软件怎么样才能成为开源软件呢,需要有OSI认证过的许可证,许可证都是符合上面的定义的,目前可用的许可证有很多,GPL、LGPL、CPL、MPL等等,不同的许可证有一些细节的区别。


以前我以为开源软件就是免费,公开源代码,现在才知道,这是有很大区别的。
知道这些之后,发现作为一名软件工程的学生,其实已经或多或少的接触到了开源软件,(有的以前竟然浑然不知!)除了前面所说的Linux之外,可能很多人包括我自己用的火狐浏览器就是最有名的开源浏览器,还有我们都知道的IBM,SUN,APPLE这些大公司,都不同程度的开源了本公司的技术,用过Linux的同学肯定都知道RedHat,最大的Linux包发行商,就是开源的,他们是这么介绍自己公司的任务的:To be the catalyst in communities of customers, contributors, and partners creating better technology the open source way.【3】另外,我们常用的eclipse、apache都是开源软件,当然,维基百科也是基于开源模式的。原来开源在我们的生活中已经随处可见。


但是直到知道github之前,开源为我带来的好处仅仅停留在可以免费使用一些软件,我还不能理解很多人说我们是开源的一代【4】,幸运的一代,不能理解为什么有这么多开源软件的狂热追求者,和那些即使吃不饱饭也要还在坚持开源的软件【5】。
有一天,我发现我的eclipse上面存储了太多的代码,以致于每次打开它都变成一场噩梦,但是删掉他们又觉得以后会用到,我在想有没有一个软件可以帮我存储这些代码,等我需要的时候我随时可以打开查看,果然,那个时候我接触到了git,我只需要简单的配置下电脑,就可以把需要的任何东西推送到关联库上,本地删除掉也无所谓。而令人惊喜的是,它还可以记录我对代码的每一次修改,这真是太方便了。当然,后来我发现它的强大绝不仅仅止于此,我甚至可以查到自己需要的很多代码原型,拿来稍作加工就可以使用,这完全是合法的,甚至我可以看到linus都上传了些什么。这有多便利,看看Ranmond在《大教堂与市集》【6】中怎么说的,好的程序员知道写什么,伟大的程序员知道重写什么。这个原本只想做版本控制的网站逐步发展成开源软件开发与管理的社区,因为开放的力量是无穷的【7】。我很同意Ranmond的另外一个观点:每一个好的软件的起因都是挠到了开发者本人的痒处,软件开发人员太过经常地在那些他们既不需要 也不喜欢的程序上消磨时日、换取工资。但在开源的世界不是这样的,大家需要什么就去寻找什么,根据自己的需要改写,所以写出的东西也必然会造福遇到同样问题的人。总之,这是我对开源带来的好处最直接的感受。


开源软件的发展史是很有意思的。开源软件发展史 【8】36氪上有篇文章,世界上排名前一万名的网站中有74.6%由开源软件驱动,【9】可见开源软件已经占据着举足轻重的地位,而上面预测,在2016年,开源软件在全球2000家企业将会占到99%的份额。


中国开源现状如何?【10】
这是知乎上的一个话题,看回答,大概分这么几种观点:
➢ 没有开源共享的精神,对开源社区索取大于回馈
➢ 中国开源有一些进展,但整体还是很不好。
➢ 中国的开源现状很好的体现了中国在世界IT产业链条中的地位和中国IT从业人员的水平,项目的数量很少,不过还是有一些不错的。
➢ 开源软件不值钱
➢ 近几年来,有赖于github/bitbucket等代码仓库的迅速发展,国人的开源作品也借着这些渠道迅速涌现、分发(其中,https://github.com/lepture:最活跃用户全球排名18,贡献4038,领域 JavaScript,来自杭州)


虽然我不是充分了解,但是不管是积极的还是消极的看法,首先阿里、网易、百度等企业已经有开源意识了,其中一些公司做的还是很不错的,这说明国人已经在向世界大方向靠拢,不管其目的是不是纯粹,而作为个人,就我自己而言,确实是索取大于贡献,或许我们该反省自我,可能有些人会说这是一个复杂的问题,与环境整治等等都相关,但是看到那么多努力的人,起码如果是自己的项目,完善其文档,分享给别人,这个是可以做到的吧。或许在开源的路上,我们还有很长的路要走。
以上是我对开源软件的一些粗浅认识。


【1】 http://zh.wikipedia.org/wiki/%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6
【2】 http://zh.wikipedia.org/wiki/%E5%B8%83%E9%B2%81%E6%96%AF%C2%B7%E4%BD%A9%E4%BC%A6%E6%96%AF
【3】 http://www.redhat.com/en
【4】 http://www.36kr.com/p/202128.html
【5】 http://www.36kr.com/p/211885.html
【6】 http://www.catb.org/esr/
【7】 http://www.36kr.com/p/215000.html
【8】 http://www.36kr.com/p/71889.html
【9】 http://www.36kr.com/p/112506.html
【10】 http://www.zhihu.com/question/21965679