好吧,我来回答我制造的话题。
首先,我先表达一下开源软件的伟大,并向开源的人们致于我最真诚的敬意。但,即使这样,我们也要很客观的承认大多数开源软件是存在大量问题的。就像我这个人主观上并不喜欢微软和IBM,但是我必需要承认,没有微软和IBM,计算机这个行业不会有今天这样的爆炸。(插曲:我94年上大学选的专业是计算机科学,当时很多人都觉得计算机专业是一个ZB的专业,因为几乎没有哪个企业在用电脑,但我幸运的是95年的时候微软出了Win95,Sun出了Java,然后互联网极度膨胀,才导致我选的专业最终变得很火)不可否认,IBM和微软里有相当NB让人五体投地的人。
至于我说的这两句话,我知道是有争议的,尤其是我用了“抄”,在此请原谅我用词不当,像从事开源的朋友道歉。这个“抄”其实是“模仿”的意思。
要是没有开源,我们中国人的软件公司能做出云平台吗?能做出手机吗?能大数据吗?真心感谢开源!呵呵。
简单地说一下开源的历史
简单的回顾一下历史,而开源源自Unix最初的发展史,然后,就被商业化了,于是N多的Unix变种就出来了,那些Unix老牌黑客们一下就被成了像罗宾汉一样的成了丛林草莽,以至于Microsoft用次等的技术占领了市场,而RMS也开始了他的GNU项目,但是GNU并没有获得那些Unix老牌黑客的青睐,因为他们觉得RMS就像当年马克思满世界鼓吹共产主义一样鼓吹他人的GNU,最终Linus出来把这些Unix老牌黑客召集了起来,让Unix的开源精神重生。这段历史起源于Ken/Dennis,再次向他们致敬!详细的历史大家可以看看我7年前写的:Unix传奇(上篇)、Unix传奇(下篇)
我个人以为开源软件自Unix以来,最杀手级的组合是LAMP,今天,Apache 基金会,Linux基金会……让开源的力量越来越大,很多商业公司都参与开源,比如IBM、Yahoo、SUN、Intel、Google……,开源的确成为了不可忽视的一股力量。
但是,我们可以看出,商业公司支持开源其中有一个很主要的原因是为了阻击竞争对手,理由很简单——用众包这种不花钱不花人的模式来牵制竞争对手实在是一个“低投入,大收益”的事。比如IBM支持Linux和Java,目的主要是阻击微软和Sun。Google的Android和Chrome目的也是苹果和微软。而对于这些商公司的很多核心技术是不会开放的,包括Google,连Google Reader都宁可自废都不愿意捐给开源社区维护(注:有人说是不是因为不想开源,而是因为Google Reader后面牵扯太多东西,说白了就是牵扯google的核心技术),更别说Google的那三篇论文的东西了,以及Google的搜索引擎的技术了。
这里,我是想说,如果开源是像Unix那样,有几个在那些顶尖的牛人以最纯粹的目的来搞开源的话,才可能还能搞得非常地好。
关于我观点中的逻辑
我观点中的逻辑其实很简单:
如果有人掌握了一个很核心技术,这个技术足以改变世界(其实并不需要改变世界,只需要遏制竞争对手),你觉得会有多少人会开源?基本不会有人的。
你看看这个世界上的引领软件潮流的技术基本上都是商业公司做出来的。因为技术研发要花时间,花精力,更重要的是要花钱。如果你花了2-3年的时间,花费成百上千万的财力,你会开源吗?
大量开源软件都是受不了这些商业公司对技术的垄断以及非常高的价格。所以,基于这个动机,结果很自然就出现了“模仿”。
了解这些因果关系后,我相信你大约知道为什么闭源的东西要牛一些,以及为什么开源会模仿。
关于各种软件的对比
很多人对我的这个观点例了一些例子,但这些例子面太窄了,他们企图以点代面。我在这里帮大家补充一些吧,这样会更客观一些(眼界不妨放大一些):
注意:千万不要用“用户量”来定义“技术含量”,如果你觉得:“有技术含量”===“有绝对的用户量”,那么,你就会得出“QQ空间甚至hao123可能是这世上最有技术含量的软件或网站”这样荒谬的结论。
- 1) VMWare 和 Xen/KVM
- 2) Google的三篇论文 和 hadoop
- 3) AWS 和 OpenStack
- 4) Google Reader和一干开源的reader
- 5) Websphere/Weblogic和Jboss, tomcat (注:互联网的大多数应用都比较简单)
- 6) 输入法,你是用sogou的还是google的,还是微软的?还是fcitx?
- 7) iOS和Android,你觉得哪个质量做得更高一些呢?
- 8) Windows/MacOS 和 Linux (对此需要分开:桌面、服务器、嵌入式) (再注:苹果公司开放了Mac OS的内核Darwin的源代码,但没有包括GUI)
- 9) 多媒体方面的软件,比如:3D动画、音频、图像……Photoshop, Maya, 3DMax...开源的:Blender,GIMP,Inkscape……
- 10) 闭源的游戏和开源的游戏,你更喜欢玩哪个的呢?
- 11) 各种办公用的OA软件,MS Office,还有SAP和PeopleSoft的软件。开源的……
- 12) 用于出版行业排版的软件,Adobe的inDesign, PageMaker, MS的publisher,开源的Tex
- 13) 安全方面的软件,大家见得最多的就是杀毒软件了。(花絮:OpenSSL的代码大家看过吗?的确写得很ugly)
- 14) 软件测试相关的:PurifyPlus, VTune, CodeAnalyst, JProfiler……开源的:valgrind, gprof..
- 15) 企业内部的IT管理软件,大家可以看一下三个公司:IBM,BMC,CA,大家可以看看他们做了些什么样的ITIL的软件(关于ITIL请大家自行Google吧)。
- 16) 行业软件:集成电路设计的软件、石油勘探的软件、航空软件、汽车里的嵌入式的软件、医疗设备用的软件、金融行业的软件、建筑设计方面的(AutoCAD)……
- 17) 聊天软件:ICQ,QQ,Skype,YY,FaceTime,YIM
- 18) 编程IDE:关于IDE的比较,请移步参看Wikipedia:Comparison of integrated development environments (注:IntelliJ IDEA是半开源的)
- 19)网页制作:Dreamwaver, Fireworks, Flash...还有开源的一堆……
- …………
我还可以一直把例子举下去,因为还有很多地方的软件很少人见过的软件,比如,NASA的、CERN的、DreamWorks,等等。
希望你的视野比我更宽一点,别只看自己编程用的那些东西,多看看这个世界高精尖的地方。
其它
我有这样的观点主要是因为我的成长史主要是在商业公司,我能看得到这些商业公司中有很多比开源软件很NB的东西。我为什么喜欢进这些顶尖的商业公司,因为只有进到这些公司我才能看有权限看到这些令人惊叹的软件是怎么做出来的。
这也是我没有花精力贡献开源的原因——因为我并不觉得只有贡献在开源才算是对社会的贡献。
这和我不写书的原因是一样的。我不写书的原因是因为我看过Effective C++,TCP/IP详解,Unix编程艺术,等等这类经典的书,我觉得我根本就没有资格写书,如果我有他们的两三成的功力,我都会考虑出书,但是我真的不行。(另一方面再看看书店里那些95%以上的垃圾的书,真是令人恶心)
同理,我没有做开源的原因也是一样,因为我看过很多商业公司里的那些令人惊叹的东西,我觉得我还没有资格去干个开源软件,最多跟随几个我力能及而且觉得还不错的开源软件。不过,我更愿意把我的时间和精力花在向这些商业公司学习之上,以获得更有技术含量的知识。
更新:以前也做过些开源,比如:我在读过TCP/IP的书后就去写了一个类似Wireshark的东西,也开过源,但后来出现了Wireshark,觉得自己写完全写过不Wireshark,差距太大,相比之下,我一个人干出来的东西只能算是垃圾。之后又出来了两次这样的事。所以,后来,我就不转向更多的学习了,而不仓促地去做开源了。原因就是——因为我觉得开源不是为了开源而开源,也不是为了装逼而开源,更不是为了吸社会的血把项目分包给社会,开源就是为了给社会做贡献,我对给社会做真正的贡献的能力还达不到。
人生苦短,我又没有那个聪明的DNA,这世界上的垃圾已经有很多了,我就不必再为垃圾添砖加瓦了。我还是把精力放在多看和多学上吧。因为我连一个C++ STL或JDK中的一个容器类都没有信心能写好。
当然,我并不是说干开源的人不行。只不过,我没有信心贡献罢了。说得好听点,我标准比较高,说得难听点,我能力差。你对我的这两种理解都对。我的技术的确水,我在我的博客上的个人简介也说了我不是牛人。
最后,谢谢大家看我的这个冗长的答案。