6种使用、发布、参与、支持开源软件的动机
Wed Jan 4, 2017 | 6700 Words | 大约需要阅读 14 分钟 | |
开源是令人惊奇的!有太多的理由来说明你为什么会去使用、发布、参与协作、支持开源1。我这里也总结了一些:
1. 微观动机
无论你是个人、还是公司职员、或者是在小公司上班、又或者在非盈利组织,甚至是政府机构,开源都是最佳选择。
让开放者从低价值工作转变为高价值工作: 我们通常在开源界说:所有容易的问题都已经解决了。比如博客、内容管理、乃至操作系统等好多产品都建立有(甚至是主流)有优秀的开源项目。当你的开发者花时间去重新制造一个已经拥有完美解决方案开源社区的轮子的时候,这很可能是选择了这个世界上最好的轮子,尤其是你没有特别付出的时候,这就使得开发者愿意去挑战哪些还没有解决的问题,而挑战的类型是独一无二的,而且还会为你的组织的任务增值。何不站在技术巨人的肩膀上了呢?
更低的总拥有成本(TCO): 使用开源软件的收益率在总拥有成本上会低于闭源或专有软件。采用开源软件通常会有较低的预先成本,(因为获得软件通常是免费的或者是花费少许费用)从而成本中心从许可(营业费用)转移到定制和实现(资本成本)。另外一些诸如培训、维护、以及支持的费用都是一样的。这些无论是开源还是闭源你都需要去付费的,但是专有的会多出许可的费用。开源的独特之处在于,你毋需支付使用专有知识产权的许可费用。
开销 | 开源 | 商业 |
---|---|---|
许可协议 | 否 | 是 |
实现 | 是 | 是 |
维护 | 是 | 是 |
支持 | 是 | 是 |
- 有足够多的眼睛,所有的bug都会发现(Linus法则): 事实已经证明,开源所生产的软件在质量上要胜过同等的商业软件,当你撰写闭源代码软件时,只有公司所雇佣的职员去诊断、发现、提交、修复软件出现的Bug(或者再加上一些承包商)。相对开源有三个好处,首先,你有可能获得这个世界最顶级的开发者的注意,而不仅仅局限在自己的“二亩三分地”;第二,无形中增加了很多潜在的开发者,即所谓的知识储备池更加的充足;第三,开源软件能够适配于各种应用场景,而不是过去那样只有一个发布者,bug和较极端的用例要比过去快很多,即QA过程的预测性更好。
- 现代软件开发实践: 开源软件的意义已经远远不止仅仅是“发布”代码了。那些遵循过时的、瀑布式的、基于严格的命令-控制的开发哲学,是开发不出任何优秀的开源项目的,当然这些是那些大型的、官僚的组织的通病。由于分布式的特征、无所禁忌的蔑视权威、以及技术债务的缠身,开源项目几乎都采用的是现代的软件的开发流,这些工作流程拥有电子化(意味着过程是自然的捕获和抛出)、异步的(意味着决策时间和地点是不可预测的)、以及没有锁定(意味着贡献者可以快速实验毋需事先获得批准)。这三个特性表明在不会牺牲质量的情况下能达到更快的开发流程、更频繁的版本迭代。
- 开源即是未来: 在今天,你很难找到一家创业公司没有使用开源软件的了。开源并非是少数人玩酷的产物,也不是来自加州的带有嬉皮士风格的脚本小子们的玩具,开源已经占据了现代企业的主流,越来越多的企业开始基于开源来构建自己的软件栈了。如果说在接下来的5到10年,软件将变得更加的封闭和缺少协作,恐怕没有几个人会相信,相反,现在的一些现象,即使如微软,曾经是开源最大的敌人,现在也开始开源自己的一些开发框架了(以及以封闭著称的Apple,也开源了 Swift)。今天,大公司,正如IBM,SAP,Adobe都积极的参与到开源社区中。我们可以大胆的语言:“开源即是未来。” 开源已经赢了。
- 日程掌握在自己手中: 正因为软件是由人所开发,所以漏洞和缺陷的出现是很正常的。当在一个专有软件的项目发现了漏洞时,用户必须等待开发软件的公司在它所在的时区正式上班了之后,方可报告问题,然后等待人家开会讨论、任务分发、代码撰写、以及测试等一系列流程走完,然后市场人员会告知你在下个版本会发布。对于专有软件厂商来说,软件有安全漏洞和缺陷并非是什么光彩的事情,所以他们会尽可能的不去伸张这件事。但是开源就不会有这些问题,不仅没有那么多的流程,还更加的敏捷,没有盈利目的的企业响应更加的迅速,正因为能够获得软件的源代码,用户可以随时打补丁,修复漏洞,无论缺陷的大小,方便的时候就可以随时自己搞定,而不是像专有软件那样必须等待厂商的发布。
- 在上游改进: 如果你在使用开源软件,应该尽最大的努力去参与到上游。为上游作出贡献未必一定是得提交代码和设计,可以去报告Bug、或者是自己修复的一个小问题。正因为软件是人类开发的,所以他开始的时候一定不是完美的,而且所开发的,也未必能够满足所有的情况。不要去盲目的从项目切出分支,然后独立去维护(开始闭源),而是要尽可能的去提交Bug和改进上游(开源),你更容易继续受益于别人提交的后续修正和改进。
GitHub 的联合创始人 Tom Preston-Werner 在 《开源(几乎)就是一切》的文中列出了更多观点:
- 事半功倍: 开源对于开发者来说能够做到事半功倍,我这里列举三个实现的方法:首先,当来自全球各地的社区成员分享各种挑战,各种各样的奇思妙想要远远胜过一个公司内部的市场的想法的。第二,将问题暴露给其他感兴趣的组织,这也就意味着提供了额外的人力资本来解决你的问题,同时也意味着解决方案有更多的开发人员的投入,而且还不需要增加额外的费用。第三,“更多的用户意味着能够测试更多用例,也就意味着更加健壮的代码。”
- 模块化: 开源项目倾向于使用模块化的架构。意味着更好的灵活性和代码的健壮性。当你为单个的用例构建软件时,你可以采取一些技术的捷径。但是当软件用于其它更多的用例时,又或者是需求变更,就会带来很多问题。开源,天生就是为众多用例而生的,适应不同的环境、用户。这就意味着更多的可选项(而不是某些特定场景的硬编码),以及倾向于鼓励模块化(而不是假设“一招打遍天下”),进而的结果就是在长期的运行下获得更好的灵活性、更低的定制成本。换句话说,开源需要更清晰,更可维护的代码。”开发当如开源那样编码正是由此而来。”
- 减少重复的工作:你应该专注于自己的核心竞争力。什么使你独一无二或者是具备他人没有的优势?一切都是每个人都在做的工作:或换句话说,你需要做的工作,以便你可以做你想做的工作。但是它不是非如此不可。开源就能够让减少重复的工作,不仅是企业内部,跨企业也一样,即通过共享来实现。可口可乐的秘诀在于其汽水的配方,而不是发表博客和新闻稿的能力。使用开源的内容管理系统,或者发表博客让全世界都看到,并不能让百事更加的好喝。“减少重复意味着可以将更多的精力放在更加重要的事情上。”
- 非常棒的广告: 一个成功的开源项目的维护者,通常会被视为是业界的领导者,而这些人往往能够将某些具体的软件问题形成话题,将他们自己与最优的解决方案相关联起来。37Signals 以创建 Ruby on Rails 框架而闻名,Github 创建了大名鼎鼎的Hubot(短短2天时间,在GitHub上引来500名关注者,在Hacker News获得409个赞,这位GitHub引来了很好的名声,要招来更多超级粉丝。)
- 吸引人才: 开发人员想要解决尚未解决的问题。开源能够将你的问题展现给开发者社区,面临是蛮有趣的挑战,然后就会去想如何解决这些问题。开源的开发者可以随意的去参与项目,也可以去学习,也可能是为了一个特定的挑战而去开发的。如果开发者能够找到自己喜欢和挑战的问题,那么他去申请贵公司的机率就很大,反之如果你是封闭的公司,他无法了解你们是干嘛的。要知道“聪明的开发者喜欢将自己充满智慧的代码展现出来。”
- 最佳的技术面试成为了可能: 传统的技术面试通常是出一些模拟的问题,在规定的时间内,缺少上下文的情况下完成的,诸如此类的模拟问题,说实话,并非真实的反映用例,也无法佐证申请人实际工作的情况。开源完全改变了这样的局面,不仅能够真实的反映出候选人解决问题的能力,而且还能看出他是如何和他人合作的。这样雇主就可以信心十足的去雇佣候选人了。在过去的6个月,候选人所参与和贡献的项目都在眼前,随意做评价。“最好的技术面试可能是你根本无须面试,候选人早在开源项目中用实际行动证明了一切。”
2. 宏观动机
通过整合、并行的增广或者相关的努力,开源在生产高质量的软件方面更加的高效。
- 效率: 上述许多微观经济观点总体上具有宏观经济影响。当企业更有效地工作时,产生更多(和更好)的软件,软件反过来,可以改善生活。如果你相信所有容易的问题已经解决了,那就该轮到宏观上了,开源让你的视野提升了好多个层次,这也就意味着会发现更多尚未解决、充满挑战的问题。而这些所谓的高级别的活动结果往往是具有破坏性的,而不是原来工作的改进,这就是所谓的创造性破坏。如果每个公司都必须花去多年的时间去解决相同的5~10个问题,会降低(或至少从资本转移上讲)公司的生产能力,因而要生产对社会有用处的技术,更不用说,它本身已经变成新的市场进入者的障碍。
- 站在巨人的肩膀之上: 今天,所谓的创新性技术,并非是凭空捏造的,而是真正意义上能够改善生活质量的技术。在今天,即使是一项封闭的技术,不管是移动电话,还是财富500强生产的汽车,都严重依赖于开源(如果你不相信的话,现在就打开你的手机,查找”设置”->“关于”),尤如从代数到三角学、从微积分到量子物理学,这一切都不受任何部门、任何的版权束缚一样,开源让开发者们持有已经解决的问题的答案,只有依靠这些专家的知识,才能够去做到超越自己的领域,然后尽情的发挥自身的潜力进行创新性的发明。若是封闭的话,这一切都不可能发生。
- 加速上市时间: 软件只不过是一种技术知识!在以前,若是一名炼金术士完成了自己的工作的时候,会声称自己拥有最后的成果。尽管我们知道他们付出了很多的努力,当这些炼金术士开始分享他们工作的时候,我们就开始称他们为科学家了,就这样,科学的世界就开始诞生了。像数学、文学、计算机软件都是类似的过程。两位独立的开发者,在给定同一个问题,可能会给出不同的答案,但是通过讨论和协作,每位都带着自己的知识和经验,或许可以发现第三种、第五种、甚至是第十种解决办法,交流才能会有更好的结果。
3. 道德动机
开源还有个正式的名称:自由开源软件。因此,开源的动机是有很深的道德成份在里面的:
- 自由的演讲,而不是免费的啤酒: 开源软件并不意味着不花钱。当我们谈论开源软件是“自由的”时候,它指的是软件的使用的权力,不是说必须付多少钱。举例来说,Adobe的Flash播放器,在经济学意义上是免费软件,但是它是商业、专有(不是自由)软件。特别指出,自由软件有四大核心自由:运行软件的自由、学习和修改软件的自由、重新发布的自由、以及发布你自己修改部分的自由。
作为自由软件运动的观点,非自由软件的风险在于它可以控制用户(由发布者来控制软件)。这就为创造有可能成为非正义的工具。今天,或许在商业软件中较少见,如安装间谍软件(例如phoning home)、限制用户(例如DRM)、审查他们(例如企业防火墙)、或者是从中获利(例如无法略过的广告)。这些都有可能在物联网的时代出现,有可能让这个世界变为“电话销售的互联网”、“窥探者的互联网”。自由软件将权力交还给用户的手中,且确保用户能够控制他所使用的软件。
- 义务回馈: 开源是一种共产主义的开发软件的形式,如果你使用了开源软件,不管是服务器软件,还是桌面程序,亦或是程序运行需有的类库,你都有义务为社区添砖加瓦。说到底,如果没有他人的贡献,前面所提到的无论是微观还是宏观,都是不可能发生的,那么开源也就不可能存在。这就是所谓的黄金法则,或者用一个古老的哲学术语来形容,那就是定言令式。
- 政府须给出为人民所开发的代码: 如果所有的开发费用均由政府来承担,那么就引来了另外一个回馈的争论。政府花钱(来自税收)为其民众提供服务。举例来说,美国联邦政府建立的基础是其宪法,而宪法是由人民所共同创立。如果民众(我们自己)为软件的开发付费的话,这也就意味着我们应该获得最终的成果,包括付费开发的软件本身。
- 为了下一代的教学: 很多业内颇为突出的工程师,其成长之路均受益于开源。当软件的代码是可以任意查阅、作为软件的消费者可以得知自己喜爱的应用是如何工作的、以及计算机科学的课程可以分析业界最先进的项目构建,这些对于培养下一代软件工程师是多么的得天独厚。
4. 透明度动机
开源体现的是一种最大的透明度的流程,这对于如监督政府的行为、私有软件公司执行准政府功能成为了可能。
- 展现你的成果: 随着政府越来越依赖技术来管理行业和提供公民服务,能够看到基本算法和过程对于检查政府的工作至关重要。如果是一个闭源的软件包被用于计算税收和分配广播的频段,我怎么能够知道它的过程?结果是否公平?是否精准?尽管人类社会的过程没法做到版权保护,若是闭源的话,这些过程就是一个黑盒子,开源至少能做到最小化这些平衡。
- 赢得公众的信任: 随着私营公司生产的软件越来越多地置于公共信任的位置,透明度义务也扩展到私营部门。投票机是否准确地计算了我的投票?当给予丢失的选择时,自驾车是否符合社区规范?举例来说,如果一款闭源的软件包用于在犯罪现场比对DNA,并不能像医学专家那样做交叉的比对,该专有算法被版权(或专利)法律屏蔽以免受审查。开源,最起码的将部分组件开源,是私人公司自动执行准政府职能的必要条件。
5. 参与的动机
开源承载了相关的收益者,既有技术的,也有非技术的,也就为开发特定的软件项目提供了很好的机会。
- 直接民主:鉴于大多数民主国家而言,真正的直接民主(每位公民对每一件事都有投票权)并不成立,公民没有能够直接参与大多数问题,技术上也是一样的。开源能够改变这点,它能够让所有的软件利益相关的人直接参与到软件开发的过程当中(正如软件越来越依赖于编纂监管和服务提供的偏好和规范)。想一想购买医疗保健的时候是不是非常的困惑?将所有的细节开发就不会这样了。要相信政府应该更多的使用开源,这让人们可以提交Pull request。白宫已经开始这么做了,尤其是一些以IT为中心的政策,如数字服务 Playbook、HTTPS、以及开放数据政策。
- 客户反馈: 开源能够让最终的消费者发出自己的声音,这在私有的开发流程中是不可能发生的。Yelp就是很好的例子。Yelp能够让菜单不仅仅是在餐厅的餐桌上才能出现,跨越了时空,最好的情况是一个差评可以影响5-10位不会光顾,在Yelp出现以后的世界,作为客户在阅读完陌生人的评价之后才作出去哪家餐厅的决定。开源在消费者-发布者的关系之间放大了消费者的声音,更不用说,私有公司收到的反馈可以更好的去对产品进行改善。开源为他们最忠实的消费者搭建了一条”直通车”。
6. 个人动机
如果作为读者的您是一名开发者(又或者是一名有志于成为开发者的同学),开源能够提供让你青云直上的个人成长之路,当然这是在软件开发社区:
- 代码学习: 开源是学习代码的不二之选。想知道你最喜欢的网站是如何工作的吗?只需在你的浏览器中右键点击“查看源代码”即可。你可以去阅读驱动这些软件的文档,甚至是自己克隆一份。还想学习更多?加入到你本地的编程语言或开发框架的线下讨论会,更好的办法还有,为某个项目提交pull request,无论是修复缺陷还是增加新的功能均可。尽管这些也会花掉一些时间成本和机会成本,但所有的这一切都没有直接的开销,至少在软件上没有,尤其是作为一名外部观察者来看的话,这要比商业社区中更具包容性。相比较而言,过去的学校那一套显得过时,某种意义上说,开源就是一所巨大的编码学校。
- 好玩: 据维基百科上讲:开源是一种爱好。事实上,开源历来就有是爱好者们的产物的声誉。开源确实很有意思。如果你是一名Hacker的话,在周末解决 Rubix 立方体无尽的变换之中,正如一些谜题(填字游戏或拼图)提供智力上的窍门,开源的秩序和对称性为打造的是代码的摇滚花园。
以上就是你应该去使用、发布、参与和支持开源的理由。如果这里没有列出来你的理由的话,请告诉我,我会完善它。无论你的缘由是什么,有一点很清楚,那就是开源不是远方的宏大愿景,它就在你我的面前。
关于作者
Ben Balter 曾入选在政府和技术领域最有影响力25人,被美国首席技术官描述为“最具破坏力的创新者”,被白宫数字策略总监称为“lightning in a bottle”,Ben Balter是GitHub的政府方面的布道师,即努力的推动各级政府采用开源之道。
本文由作者Ben Balter 发表在Opensource.com上:6 motivations for consuming or publishing open source software。经适兕翻译共享,本文在Creative Commons BY-SA 4.0许可证下发布。
- 对于更长,更全面,更深入的研究名单,我强烈推荐David Wheeler 的 canonical 论文,尽管最初是发表在15年前(但现在依然有很重要的价值)。 [return]