目录

六大理由告诉你为什么这么多优秀的公司都在做开源

六大理由告诉你为什么这么多优秀的公司都在做开源

文章目录

引言

最终有篇新闻 ,文章主权内容如下:

“Apache 软件基金会这个全球最大的开源软件基金会官网上有这样的内容:

U.S. export laws and regulations apply to our distributions and remain in force as products and technology are re-exported to different parties and places around the world.

大意为:意思是除非经美国政府正式授权,否则 ASF 软件或技术不得直接或间接出口或再出口到受美国禁运或贸易制裁的任何地方。这自然包括中国。

GitHub 这个全球最大的开源代码托管平台官网上也赫然写着:

, GitHub Enterprise Server, and the information you upload to either product may be subject to US export control laws, including U.S. Export Administration Regulations (the EAR).

、GitHub Enterprise Server 以及您上传到任一产品的信息可能受美国出口管制法律的约束,包括美国出口管理条例(EAR)。”

大意是说这两个开源的网站上的源代码受美国法律的管制。不过很快,另外就有文章《 》回应了此文的说法,认为新闻片面解读了这些条件,并给出相关历史背景的介绍,指出大部分的开源项目是永远不会受到美国法律的管制。

**本文并不去评价到底谁是正确的,而是回答一个更本源的问题:为什么开源?**主要的内容就开源的原因和目的进行讨论。另外,一个客观的事实是开源是一个当今软件行业发展的一个普遍趋势,而国内的主流思考仍然是封闭的,与开源的思想存在着巨大的差异。除了一些常规的想法,笔者还引用了一些文章(末尾),结合笔者自己的认识,写明开源的原因和目的。

0.简介

据统计,大概有三分之二的软件公司都曾为开源贡献过自己的力量。仅仅在 GitHub 平台上,就有超过 140 万的开发者在超过 3500 万个开源项目里共享过自己的工作成果。这个数字已经让人非常惊讶了,更重要的是,开源项目的规模正在呈指级增长,所以这个数字将会变得越来越大。

进行开源项目共享、博客分享、演讲分享的人并不仅仅是想做慈善。当然了,确实有很多开发者是真心地想回馈开发社区,但这本身并不能解释为什么软件行业的共享开源会如此普遍。很多优秀的软件公司和工程师之所以愿意共享和开源自己的工作成果,主要有以下五个方面的原因。

如果你是一家正在招人的公司,上面的道理反过来同样适用。给那些优秀的开发者留下一个好印象的最好的方法就是共享你的工作。如果一位开发者在过去几年里一直 在使用你们公司的开源代码,那么他们想要加入你的公司并继续使用你的开源代码的可能性也就更高。开源项目是吸引优秀的开发者加入公司的最有效的方法之一, 这种方法比传统的发招聘简章的方法不知要好多少倍。

1.微观经济动机

无论你是个人,公司,小型企业,非盈利组织还是政府机构,开源都符合你的最佳利益。

将开发人员从低价值工作转向高价值工作。我们喜欢在开源中说,所有简单的问题都已经解决了。博客,内容管理和操作系统都是已建立(和主流)开源解决方案的问题,仅举几例。虽然你的开发人员可以花时间重新开发开源社区已经完善的轮子,但是最好使用世界上最好的轮子,特别是当你的轮子免费使用时。这使开发人员能够解决尚未解决的挑战,这些挑战是你组织的使命所特有的挑战,并为其增值。为什么不站在技术巨头的肩膀上呢?

获项目拥有权

作 为一位开发者,如果你已经投入了上千个小时的时间在一个项目上,那么你就会变得非常依赖这个项目。它就像你的孩子一样。如果这个项目是公司专有的项目,这 时如果你从这家公司离职,这就好像你经历了一次离婚一样,你失去了对这个孩子的监护权,这是非常痛苦的一件事。如果你经历了多次这样的事情,这就会让你很 难再有足够的激情在一个不真正属于你自己的项目上投入太多精力。

然而,如果你更多的和大家分享你的工作,发布有关自己工作成果的博客或论 文,最好是开源你的项目,这样的话这个项目将一辈子都属于你。这个开源项目将成为你工具箱里的一个永久的组成部分,不管你去哪里,你都可以随身带着它,你 可以和更多的人分享它,你也会为在这个开源项目上工作感到自豪的。

换句话说,开源项目能让工作变得更加有趣,更有满足感。在这个大家甚至会为争抢优秀的开发者打烂头的年代,让工作变得更有趣可以成为你招聘的一个巨大优势。正如著名的计算机程序员、开源软件运动的旗手 Eric S. Ray­mond 曾这样说过:

事实证明,开源带给我们的宝贵财富之一是它教会了我们这样一个道理:玩的心态是最经济也高效的创意工作模式。

降低总体拥有成本

与封闭源和专有替代方案相比,使用开源软件可降低总体拥有成本。采用开源软件通常具有较低的前期成本(因为软件通常免费或成本相对较低),并且将成本中心从许可(运营费用)转移到定制和实施(资本支出)。培训,维护和支持等额外成本是沉没成本。无论软件是开放软件还是闭源软件,你都将为这两种软件付费,在商用现成软件(COTS)的情况下,成本通常会被纳入许可证中。开源的独特之处在于,你没有为使用基础知识产权的权利付出代价。

如果有足够的眼球,所有的漏洞都很浅(Linus定律)

从经验来看,开源往往比其专有或替代对手产生更高质量的软件。当你编写闭源软件时,唯一可以检测,诊断,分类和解决软件错误的开发人员是那些恰好被发布软件的公司(或者更有可能是他们支付给公平的承包商)的人。建立它)。开源提供三个优势:首先,你有机会利用世界上最好的开发人员的知识,而不仅仅是那些组织工资单上的知识。其次,潜在贡献的开发人员的数量以及潜在的知识库数量级要大一些。最后,开源软件适应各种用例,而不仅仅是发布者最初想要的用例,比传统的预测性QA流程更快地显示错误和边缘情况。

现代软件开发实践:开源软件不仅仅是“发布”的代码。你很难找到一个开源项目,该项目遵循过时的,瀑布式的或严格的命令和控制开发理念,在许多大型官僚组织中仍然很常见。由于政策或技术债务的分散和肆无忌惮,开源项目几乎需要现代软件开发工作流程。这些工作流程是电子的(意味着流程自然被捕获和暴露),异步(意味着决策是时间和位置不可知的),并且无锁定(意味着贡献者可以在未经事先批准的情况下快速进行实验)。这三个工作流程特征意味着更快的开发周期和更频繁的发布,而不会牺牲质量。

开源是未来

你很难找到一家今天的创业公司,它的风险投资资金不是基于开源,至少部分(如果不是很大)开源。开源并不是一种时尚,或者是一群嬉皮士在加利福尼亚州传递扎染笔记本电脑,就像他们会非法使用物质一样。开源是现代组织,以及越来越多的传统组织构建软件。从现在开始的五年或十年后,技术领域将变得不那么协作和更加封闭,这一点变得非常具有挑战性。哎呀,即使是微软,传统上也是开源最明显的反对者之一,已经开放了他们的主要开发框架(以及Apple和Swift)。今天,所有技术领域的大公司,从IBM,到SAP,再到Adobe,都积极参与开源社区。说“开源就是未来”,这有点不准确。开源已经赢了。

按照你自己的时间表修补

只要软件是由人类编写的,错误和安全漏洞就是不可避免的。当在专有软件项目中发现漏洞时,你必须等待工作日开始在公司的时区,举行会议,任务分配和编写代码,所有这些都在法律,销售和市场营销等G&A团队开始之前协调如何将修复程序安装到下一个定期安排的版本中。对于专有软件,漏洞和漏洞会影响底线,因此阻碍其细节广泛宣传。使用开源,不仅可以更精简,更灵活,非营利性的组织更快地移动,因为你可以访问源代码,你可以经常应用大小的修复,方便你使用,而不是方便出版组织的发布周期。

上游改进

如果你使用开源软件,那么回馈最符合你的利益。贡献可以是报告错误,甚至提交建议的修复。由于软件是由人类编写的,因此它不太可能是完美的,即使这样,也可能无法满足每个用例。而不是分支项目并将更改实施到你自己的版本(封闭源代码),上游(开源)提交错误报告和改进使你可以更轻松地继续受益于其他人提交的后续修复和改进。

GitHub联合创始人Tom Preston-Werner在他的帖子开源(几乎)所有内容中提出了一些额外的论点:

强制倍增:开源是开发人员的力量倍增器。这有三种方式:第一,当社区形成共同的挑战时,自然出现的思想的多样性表现出比思想市场仅限于你的组织更好的解决方案,这意味着开发人员更聪明地工作。其次,将问题空间暴露给其他感兴趣的组织可以提供额外的人力资源来应对你的挑战,这意味着该解决方案可以为你提供更多的开发人员时间,而无需你支付额外费用。最后,“更多用户意味着更多的用例被探索,这意味着更强大的代码。”

模块化

开源项目往往采用更模块化的架构,提高了代码的灵活性和稳健性。当你为单个用例构建软件时,你可以采取一些技术性的捷径。如果你想在不同的用例中使用该软件,或者你的需求发生变化,则会出现问题。就其本质而言,开源是为各种用例,环境和用户而构建的。这意味着更多选项(而不是特定用途的硬编码默认值),以及鼓励更多模块化的趋势(而不是采用一刀切的功能集),从长远来看,从而带来更大的灵活性和更低的定制成本。换句话说,开源需要更清晰,更易维护的代码。 “即使是内部代码也应该假装是开源代码”。

减少重复工作

你应该专注于你的核心竞争力。是什么让你与众不同或给你一个优势?其他一切都是其他人也在做的工作:或者用另一种方式,你需要做的工作,这样你就可以做你想做的工作。它不一定是这样。通过允许共享单个组件,开源减少了组织内部和组织之间的重复工作。可口可乐的秘诀就是糖浆的配方,而不是发布博客文章或发布新闻稿的能力。使用开源CMS,或与世界分享他们内置的博客组件,并不能让百事可乐更好吃。 “减少重复意味着对更重要的事情开展更多工作。”

出色的广告

成功的开源项目的维护者通常被视为行业领导者,使他们能够围绕特定的软件问题塑造对话,并将他们的品牌与首选解决方案相关联。 37Signals以创建Ruby on Rails而闻名。 GitHub以创建Hubot而闻名。 (“在两天之内,它在GitHub上有500名观察者,在Hacker News上有409名投票者。这意味着对GitHub和更多超级粉丝的善意比以往任何时候都要好”)。

吸引人才

开发人员希望解决尚未解决的问题。开源允许你向开发人员社区展示你面临的有趣挑战,以及你如何考虑解决这些挑战。开源开发人员可以随意地为项目做贡献,了解你的工作方式,以及为特定挑战开发软件的方式。如果他们喜欢他们看到的东西,那么他们申请工作的机会要大得多,而不是当你的组织在那里工作的时候是一个黑盒子。 “聪明的开发人员喜欢使用智能代码。”

可能的最佳技术访谈

技术访谈传统上涉及处理模拟问题,可以在一定时间内处理,几乎没有其他背景。根据定义,这种模拟不是真实世界的用例,也不显示与申请人合作的内容。开源提供了候选人如何解决问题以及他们如何与他人合作的可见性。如果在过去六个月中,候选人一直在为你希望他们工作的项目做出贡献,并且你喜欢他们的工作,那么你可以更自信地雇用。 “最好的技术面试可能是你不必做的,因为候选人已经在你的一个开源项目上踢了屁股。”

2.宏观经济动机

通过结合和增加并行或相关的努力,开源使社会更有效地生产更高质量的软件。

效率

总的来说,上述许多微观经济论点具有宏观经济影响。当企业更有效地工作时,经济会产生更多(和更好)的软件,软件可以反过来改善生活。如果你认为所有简单的问题都已经解决了,那么在宏观经济层面,开源可以让你将公司从较低级别的工作转移到更高级别但尚未解决的挑战。这种更高层次的工作的结果往往是破坏性的,而不是迭代的,从而产生激励经济的流失。如果每个技术公司都必须花费几年的研发时间来解决相同的5-10个问题,那么这会延迟(或者至少会转移资本)公司的生产能力和生产对社会有价值的技术,更不用说,它为新的市场进入者提供障碍,为现有公司提供替代方案。

站在巨人的肩膀上

今天,创新技术,提高生活质量的技术类型,不是在真空中创造的。即使是闭源技术,从你口袋里的手机到你开车到生产它们的财富500强企业的汽车,都严重依赖开源(不相信我?看看你的手机的“设置 - >关于”页)。正如代数和三角学不受私营部门版权的影响一样,从微积分到量子物理学的各个方面都让位,开源允许开发人员将已经解决的问题作为一个给定的依赖,依靠超出他们自己的专业领域的专家的知识,以及释放他们创造新发明的潜力,否则就不可能。

推动创意市场

软件只不过是技术知识。曾经有一段时间炼金术士会拒绝他们的工作成果,声称他们的发现是专有的。每个人都必须学习饮用铅对人体的严重影响。当那些炼金术士开始分享他们的作品时,我们开始称他们为科学家,科学革命就此诞生了。数学,文学和计算机软件也是如此。两个单独工作的开发人员可以针对特定问题提出两种解决方案,但通过对话和协作,每个人都带来自己的知识和经验,可以发现三个,五个或十个解决方案,结果社会更好。

3. 道德动机

开源的正式名称是免费/自由开源软件。因此,开源动机具有强烈的道德成分。

言论自由,而不是啤酒

开源软件并非没有成本。当开源软件被称为“免费”时,它是对软件消费者获得的权利的参考,而不是他们必须支付的成本。例如,Adobe的Flash播放器是经济意义上的免费软件,但仍然是专有(非自由)软件(和格式)的核心。具体而言,自由软件指的是四个核心自由:运行软件的自由,学习和修改软件的自由,重新分发软件的自由,以及分发修改的自由。

正如自由软件运动所论证的那样,非自由软件会冒软件来控制用户(发布者控制软件)。这使软件成为不公正权力工具的潜力。今天,专有软件监视用户(例如打电话回家),限制它们(例如DRM),审查它们(例如,公司防火墙)或利用它们(例如,不可映射的商业广告)并不罕见。随着物联网的出现,这变得更加重要,并且有可能将世界变成“电话推销员的互联网”或“窥探者的互联网”。自由软件将电源放回用户手中,并确保用户控制他们使用的软件,而不是相反。

回馈的义务:开源是一个一分钱一分钱的软件。如果您使用开源,无论是服务器,桌面发布应用程序还是软件库,您都有义务回馈社区。毕竟,没有其他人的贡献,微观和宏观经济动机将不再成立,而我们所知道的开源将不复存在。这是黄金法则,或者在传统的哲学术语中,是一种分类不完全的。

如果开发成本由政府支付,那么还有一个额外的论据可以回馈。政府拿钱(税)为他们的民众提供服务。例如,美国联邦政府是通过其宪法建立的,由我们人民执行一些重要任务。如果民众(我们人民)正在为软件的开发付费,那么我们应该收到我们付出的开发费用,包括我们付费开发的软件。

教授下一代

今天,许多业内最杰出的工程师都是从开源学习中汲取灵感。当软件的底层代码可供检查时,消费者可以了解他们喜欢的软件如何工作,计算机科学课程可以分析行业最先进的技术是如何构建的。这对于训练下一代软件工程师来说还有很长的路要走(没有开源的人会猜测先前迭代的内部工作)。

4. 透明度动机

开源可以提高流程的透明度,无论是检查政府行为所必需的透明度还是私营公司软件的准政府功能。

展示您的工作

随着政府越来越依赖技术来监管行业和提供公民服务,能够看到基础算法和流程对于检查政府的工作至关重要。如果使用闭源软件包来计算我的税收或分配广播频率,我怎么知道这个过程,我们的过程是公平和准确的?虽然人类过程不能受版权保护,但在密切来源时,此类过程会变成黑箱,最大限度地减少公民抵制的可能性。

提高第三方的信任

由于私营公司制作的软件越来越多地置于公众信任的位置,透明度义务也延伸到私营部门。投票机是否准确计算了我的投票?如果给出双输选择,那么自动驾驶汽车是否符合社区规范?例如,如果使用闭源软件包来比较犯罪现场的DNA,与可以进行交叉检查的医学专家不同,该专有算法不受版权(或专利)法的审查。随着私营公司实现准政府职能的自动化,开源,特别是部分开源的特定组件将变得至关重要。

随着政府、企业、一般公司越来越依赖技术来监管行业和提供服务,能够看到基础算法和流程对于检查政府的工作至关重要。如果使用闭源软件包来计算税收或分配广播频率,用户怎么知道这个过程是公平和准确的?虽然过程不能受版权保护,但在密切来源时,此类过程会变成黑箱,最大限度地减少用户抵制的可能性。

5.参与动机

开源为技术和非技术软件利益相关者提供了塑造任何特定软件开发项目的机会。

直接民主

考虑到大多数民主国家的规模,真正的直接民主(每个公民在每个问题上都投票)都不可行。由于技术限制,公民也无法直接参与大多数问题。通过允许软件利益相关者直接参与软件开发过程来开放源代码(因为软件越来越依赖于编写监管和服务交付偏好和规范)。认为购买医疗保健的过程令人困惑?打开一个问题。相信政府应该使用更多的开源,提交拉动请求。白宫已经采用了许多以IT为中心的政策,如数字服务手册,HTTPS和开放数据政策。

客户反馈

开源使消费者能够在私营部门发展过程中拥有综合而强大的声音。把它想象成Yelp for software。如果没有Yelp,餐馆可以自由地打乱单个客户。最多不满意的顾客可能会劝阻其他5-10名顾客。在后Yelp世界中,客户在选择去哪里之前会阅读陌生人的评论。开源扩大了消费者 - 出版商关系中软件消费者的声音。更不用说,私营公司收到的反馈可以更好地告知产品决策并改善整体产品。开源使公司可以直接与最热情的客户联系。

6.个人动机

个人动机是最基本的动机,是来自共享者最直接的感受。

提高自己的技术水平

一个关于如何更好地学习新知识的经典理论理论是这么说的:学习一样东西的最好方式就是去将它教授给其他人。在这个过程中,你需要对自己的东西全面理解,才可以说得出来。反之,如果有什么东西你说不出来,就说明你的理解还不够深刻。在开源的过程中,就是一个将你的知识重新学习和组织的过程,能够非常有效地提高自己的知识水平,使自己对技术的应用更加娴熟。同时在开源以后,利用现有的在线网站或工具,可以很方便地对自己的内容进行查询。

提高项目质量

著名的计算机程序员、开源软件先祖 Eric S. Ray­mond 曾这样说过:“只要经过足够多双眼睛的审查,所有的 bug 都将失去藏身之地。这就是 Linus 定律。” 将代码公开后,任何使用的人都是在为你做免费的测试,一旦发现问题,他们为了解决会经常向你求助,这个过程就是一个免费测试的过程。每个人都是自己的视野盲区,所以只要有足够多的人,就可以将尽可能多的盲区找出来,以提高软件的质量。

最好的推销自己的方式

如果你是一位软件开发者,让自己在一家公司面前看起来非常优秀的最好办法就是共享你的工作。你不妨将其视为一种让公司主动找上门的推销自我的策略。在找工作的时候,你不用通过盲目地满世界投递简历的方式让招聘公司注意到你,你通过共享很多公司认为有价值的内容的方式来吸引那些潜在的招聘公司的注意。如果你通 过共享让其他公司的工程师曾读过你写的博客、看过你演讲访谈视频亦或是使用过你开源的项目,他们便会将你视为专家,也就会更想去招聘你。你共享过的内容将 成为你的简历的一个永久的组成部分。事实上,共享对找工作的作用可能超出你的想象,正如 jQuery 的创始人 John Resig 曾说过的那样:“不管在任何时候,只要涉及到招聘,相比普通的简历而言我更看重的是应聘者在 GitHub 上开源共享的东西。”

对于大部分学习者来说,开源是学习如何编码的好方法。想知道你最喜欢的网站是如何运作的?在Web浏览器中单击“查看源代码”可以帮助你指明正确的方向。你可以阅读为其提供支持的软件文档,甚至可能会支持你自己的克隆。想了解更多?加入本地聚会的框架或语言。更好的是,向项目提交拉取请求以修复小错误或添加新功能。虽然确实存在时间和机会成本,但所有这些都不会给有抱负的开发人员带来任何直接成本,至少在软件方面没有,并且比在专有社区中做同样的事情更具包容性,特别是作为局外人。有一个原因,今天几乎所有传统学术界以外的编码学校都教授开源。

参考文献

[1] Ben Balter, 6 motivations for consuming or publishing open source software , 2015, .

[2] 360linker, 为什么有人愿意将软件开源和共享? , 2018, CSDN, .

[3] David A. Wheeler, Why Open Source Software / Free Software (OSS/FS, FLOSS, or FOSS)? Look at the Numbers! , 2015, .