我们每天使用着大量的开源软件,我们歌颂她赞美她。当有人站出来说一句开源不好肯定会激起N多人站出来批评。然后给你列举出N多开源的好处和闭源的坏处。首先我不反对开源,本文只是自己的一点思考。谢谢自从开源运动发起以后。各种针对商业软件为目标的开源项目相继启动。而且冠以开源之名会得到尊重得到大家的支持。哪怕他曾经是一个“臭名昭著”的企业。

  1. 安全性---代码可审查和补丁更新效率

  以安全性为的Linux为例吧。那些鼓吹Linux的多么的大神们怎么遇到这事情避而不谈了?既然是的安全机制。为什么Linux还要打补丁?而且许多都是安全补丁。Kernel为什么会被入侵?而且害怕的是Hacker植入后门代码。

  做了一下调查发现鼓吹Linux安全性的多数都是运维+应用级程序员(包括web和应用软件开发的)大部分人都没有详细的度过linux的源代码,请问那股的自信哪里来的。事实上有多少人会因为Linux是开源的使用Linux而更多的是因为免费和高效才去使用linux,事实上因为linux安装软件超麻烦要记住N多命令以至于不得不找各种脚本才可以解决那些复杂而多样的命令的问题。

  Linux真的安全么?开源安全么?由于开源的混乱和代码审查工作的不到位。各种被安插了后门代码和各种隐藏后门一般人差看不出来的。比如ShellCode被加密起来当作一组什么常量或者转换成字符串。当某些特定情况下才会触发。可是这样的文档一般是不会随着源代码发布的。(中国的那些自主产权为什么没办法消化?的确拿到了设计图和专利。)研究的过程和推导的过程才是重要的。而我们忽略了这个重要的步骤。这和我们这个社会的哲学观有关系。老板只认结果不重视过程,没有过程哪里来的结果。真正研发过程只有研发工程师知道。你拿着研发的结果不知道复杂的过程你根本没有办法推导出各种情况和为什么这么设计。世界上有太多只有结果过程因为某些人的消失而永远弄不清答案的事情了。扯远了。

  如果你弄不清楚他为什么这么设计。如果里面有一些暗藏后门的逻辑请问谁能审查出来?一般人能检查的也是一些语法错误简单的逻辑错误。可是真正的逻辑陷阱有几个人可以审查出来?专业化的审查工具?呵呵我想说hacker手里的审查脚本远比一般人知道的要多得多的多。否则哪里会有这么多漏洞。软件开发不是人多能解决问题。否则也不会出现“钱学森一个人顶得上五个师的威力”这句话了。

  精巧设计的逻辑漏洞绝大多数的人是审查不出来的。QA更检测不出来。抛开这个不说单纯从代码安全性上来说。由于是开源的。查找漏洞的方式更简单。以前我们还需要打开IDA,Ollydbg,Windbg等工具一行行汇编审查。或者fuzz现在我们根本不需要了。直接看代码好了。检查各种函数入口看看有没有可以利用的地方。专业的hacker会审查这些漏洞然后当作0day存储起来—实际上发布出来的0day很少很少。当你知道0day发布的漏洞的时候实际上都是过了半年甚至好几年的漏洞了。这些早是行业潜规则了私有化的工具私有化的漏洞。

  Hacker渗透一个系统首先要收集资料。由于大量的开源导致他们很容易获取整个网络架构服务器配置,网关设置信息。这些信息根本无法隐藏。这些都是无法避免漏洞。你指望有一个好像侦探一样的漏洞挖掘人员可以大公无私的挖掘到漏洞然后第一时间放出漏洞信息么?可行性几乎微乎其微。这么多人研究越狱为什么只有一两个人成功了还藏着掖着放个视频显摆一下?因为大家都知道这可以为他带来可观的收入,早年Intel一个浮点数漏洞让Intel损失好几亿,软件的一个漏洞损失应该更强才对。在地下某些黑市一个针对远程溢出的漏洞能炒到几百万上千万的都有。而且愿意购买这些东西的人太多了。做黑产地,专业渗透团队,ZF,黑灰白都有。

  请问开源软件的安全性谁来保证?靠大家监督么?可行么?而且许多开源底层一般人也接触不到。再说有的时候找到漏洞的成本比修补这个漏洞的成本更高。请问开发团队由收入这个漏洞查找的人谁来给予奖励?单靠表彰可能么?

  2. 质量

  绝大部分开源软件的质量很差。因为大部分开源项目都是一时热血发布的。自然是想到什么写什么。什么华丽的技术都用进去,热血过了咋办?我想大部分人都没想过。和好多人说我爱这个女孩非她不娶,实际上后结婚的大部分也都不是原来的那个她了。

  可是当时觉得我以后肯定会一直爱她(它)会一直一直维护下去的。

  大部分参与开源的人一半是觉得自己还行随份子(大部分开源项目管理者觉得人多好听自然是有几个算几个只要有的人都算进来。说出去好听。我们的项目有好几个人共同开发。不少都是大学生为了做毕业设计或者其他目的参与的)

  完全是一个杂牌军。主力开发人员那么几个。好吧这个项目很好很快得到大家的青睐有了一些小型的用户。靠这样的撞大运的开发方式能有好的质量么?

  ACE那样的项目开发者是为了做实验写了一些论文和书。随后这个项目几经转手后弄得理论上强大。实际上没几个人敢用。

  能像MySQL,Linux,GCC这样的项目少之又少。这还不算某些大公司背后的阴谋

  3. 可维护性,制定性和开源协议

  如果这开源团队不做了。你可以继续维护这个开源软件,听上去很美丽,实际上能自己维护像Linux,MySQL这样规模很大的软件能有几个人?再说我要的是使用而不像做开发人员。我如果有开发能力我自己开发一个好了干嘛要用它呢?

  开源软件给我们画了一个很大的饼。大到我们根本没办法下嘴去吃它。我承认有一些团队可以维护Linux,MySQL这样的工程。可是这些人。要么是大公司要么是原开发者另起炉灶搞得项目。一般人根本无法涉及这个领域。

  还有软件各种开源协议。我给XX公司制定的某个MySQL版本增加了他们自己特有的一个什么技术来改进运行效率。请问我是否要开源?如果必须要开源的话那企业机密和我自己研究的一种新的算法和技术怎么平白无故开源了?如果我不开源是不是不尊重他人?而且这个协议谁来保证?当别人侵犯了你的权益谁来给你保障?谁来审核是不是有人侵犯你的权益?