当前位置: 华文问答 > 数码

为什么要开源?

2015-07-29数码

最初,开源的目的就是为了低成本的发布产品。

如果闭源,你必须为你的软件产生的所有后果负责,生产者必须负责软件的后期维护,改错,以及功能更新。

为了能够付得起这个责任,你的软件必须达到产品级标准,这个标准远远高于后来开源软件发布公测的标准。

--

一群具有强大创新精神的黑客们认为,这不够酷!为什么,因为程序员最大的兴趣在于制作更多更酷的特性,而把一个软件稳定到产品级的过程中,你需要耗费很多代价去做一些不那么酷的事情(例如,调试bug,改bug,解决很多异常情况)。

这,就产生了一个矛盾:程序员们想要第一时间迅速分享自己的最酷的软件创意以及发布一个闭源软件所需要完善其达到的产品质量之间的矛盾。

为了解决这个矛盾,开源软件应运而生,它之所以开源,是为了 完全意义上的免责 ,就是说你运行我这个开源软件,出现任何意义上的问题,都后果自负。因为所有源代码都完完全全的交给你了,有任何问题都自行解决,由于它实际上是源代码,你有自行检查的义务, 哪怕由于其中的bug给你造成了严重的商业上的经济损失,你不能向开源软件发布者进行任何形式的索赔。

如此以来,发布软件的门槛跟风险被大幅度降低了。在早期的闭源软件时代,其实一个初学者是不敢随便发布自己写的软件的,出问题还不够赔的。(大家应该知道在美国,卖鱼给顾客吃了卡刺是该卖鱼的赔钱的,所以他们不敢卖有刺的鱼。关于为什么不敢发布不成熟的闭源软件,原理类似。)

而开源软件制度,确实是大幅度推进了软件业的发展,因为人们敢于更早期的发布自己的不成熟的作品, 这促进了学徒阶段程序员之间的大量的积极的交流

开源软件使得软件能够更早期的被发布,使得人们敢于发布自己的不成熟的产品供有兴趣的同行去完善,这是开源的一大优势。

--

开源软件还有另外一个考量,就是给使用者建立信心,使得不知名的程序员个体以及组织开发的软件愿意被人使用。

软件,并不是个一锤子买卖的商品,它必然关联了大量的后期维护,改进,出错,更新。一个闭源软件必须由开发者进行维护,如果我对一个开发者没有足够的信心,我就无法信任他能够在该软件的生存周期内保持对软件的维护,因此,在闭源软件的市场,你不能建立客户的信任,就无法将软件卖出去。久而久之,闭源软件市场只会出现强者恒强的情况。小企业以及个体程序员难以有出头之日。

开源软件,则给使用者建立了更大的信心,即便你对我的长期活跃度不抱有信心,但如果你对我的开源软件现在认可,将来就算我不继续维护了,你也可以自行维护这个开源软件。换句话说,开源软件从协议上保证了绝对没有断供的风险。

如果你从来没有做过操作系统,别人对你的操作系统当然就不会非常信任,那么让别人愿意使用的一种方式,就是开源。

开源给使用者建立了更大的信心,使得不具有悠久历史以及没建立长期信任的软件能够被客户使用,这是开源的第二大好处。

--

开源的第三大好处,个人认为是,明确劳动者的价值。或者说是明确程序员的价值。

对开源软件来说,软件代码本身没有价值,你对软件的劳动才产生价值,也就是说,调试软件,安装部署软件,修改错误,增加新功能,等等这些必须程序员做的事情是有价值的,而分发复制开源软件本身,这些不需要程序员做的事情,就变得很廉价。

如果你需要使用开源软件,那么往往就需要雇佣程序员去维护它。开源软件为程序员创造了工作岗位。但如果你需要使用闭源软件,你自己其实往往不需要雇佣程序员,只需要厂商提供技术支持即可,产商的技术支持只有一份,而用户有多个,因此用户侧的程序员维护者数量将远远多于产商维护者。——换句话说,程序员们发明开源软件机制,客观的为程序员创造了更多的就业岗位,使得社会对程序员的整体需求增加了,也使得自己的就业面变宽广了。而闭源软件则难以具备这个好处。

总的来说,开源软件,是程序员为了自身利益,切实对程序员群体自身创造了实实在在好处的机制。他有实实在在的价值考量与现实意义,而并非只是所谓活雷锋的道德境界。

暂时,就先说这么多。