acm-header
登录

ACM通信

Kode恶性

一个机会的园丁


花园叉

信贷:ENeems

回到顶部

亲爱的KV,

我在一家初创公司工作,我们使用大量的开源软件,不仅用于我们的操作系统,还用于一些产品的核心。我们已经在开源的基础上构建我们的系统好几年了,但是在这一点上我们只使用软件,我们从来没有时间贡献补丁。考虑到我们的员工规模较小,与30到40个不同的项目合作会带来大量的工程开销,而公司目前根本无法承受。

在我和其他公司管理人员看来,开源就像一个巨大的杂草花园。新项目总是会出现,我们不可能知道这些项目对我们的整体系统是有害还是有益,所以我们必须尝试它们,否则就有可能被排除在某些新型系统之外。有一天,一名工程师抱怨说,他觉得自己就像一个园丁,唯一的工具是一把不精密的砍刀。

更大的公司显然知道如何与开源项目合作,但一个创业公司,甚至是一个中等规模的公司,缺乏资源来研究所有这些东西,如何应对开源世界。与所有这些项目交互的最佳方式是什么?

一个机会的园丁

亲爱的有机会,

您已经发现了开源软件的一个极好的比喻:花园。我得承认,我可能更喜欢把它比作幼儿园,但让我们继续你最初的比喻。

许多没有直接接触过开源的人认为它是一件单一的事情,或者是一个单一的想法,而实际上,它是一个术语,随着开源项目和社区的出现,它以各种不同的方式被应用。开源真的就像一个花园,里面有许多不同种类的植物,有些是有益的,可以提供营养,而有些则是有毒的。

在这样一个庞大而多样的生态系统中,区分好坏是一项艰巨的任务,但KV在之前的几篇专栏文章中已经提到了这个问题,包括给“占有欲”(acquisition)的信。1决定使用一款软件总是取决于软件的质量问题,软件是封闭的、开放的,还是介于两者之间。从如何与开源项目交互的角度来看,我觉得你的问题更有趣。

你提到你的公司使用开源,事实上,这是大多数人和公司使用的,这是使用开源的第一阶段。当你使用开源软件时,最重要的是要记住,不要把植物从根部切断。您应该直接从源代码中使用软件,即使您没有遵循对上游源代码树的每一个更改。

您所能做的最糟糕的事情是复制源代码树一次,然后在一段时间内忽略上游开发。在一个快速发展的项目中,让您的本地树甚至落后几个月就意味着您将错过大量的更改和bug修复。错误修复通常也是安全修复,我们都知道当人们构建产品时没有正确集成安全修复会发生什么。没什么。没错,几乎每个人都能幸免,因为我们都知道软件会崩溃,而且目前还没有构建不安全产品的责任。

另一种切断系统和使用代码的开放源码项目之间的根的方法是在树的主分支中进行自己的更改。将更改直接混合到树中,而不是在开发分支中,这是一种使软件更新几乎不可能实现的好方法。确保您的软件不会从树的根断开的一个好方法是拥有自己的内部CI(持续集成)系统。许多开源项目都有自己的CI系统,您可以直接将其集成到自己的开发系统中,它们可以验证您是否破坏了系统,或者上游软件本身是否被破坏了。

继续延伸这个比喻,也许接近突破的临界点,我们现在可以考虑下一阶段的照料开源花园。如果你有一个菜园,但你从不打理它,你会从菜园里得到很少的蔬菜,即使有,它也会枯萎死亡。在这方面,开源项目与蔬菜没有什么不同:如果我们希望花园保持高产,我们就必须照料它;否则,我们就是在破坏。

照料花园有很多方法。也许我们想到的第一件事是除草,我们可能会认为这是调试和打补丁。为开源项目提供补丁是帮助其改进和发展的一种方法。大多数开源项目都有一个明确的过程,可以在其中贡献代码。尽管您提到了让您的开发人员为项目做出贡献所涉及的开销,但您应该反过来思考,并意识到当他们向上游项目提交补丁时所做的事情正在减少您公司的技术债务。如果您将补丁保持私有,那么每次使用新版本的开放源代码时都必须重新集成它。一段时间后,这些补丁可能包含数万行或更多代码,这对维护来说是一笔巨大的技术债务。

经过一段时间的开发后,你会发现你想要的是自己的园丁。让您的团队成员直接从事对公司最重要的开源项目,是确保您的公司在软件开发过程中拥有第一手资料的好方法。

从一个纯粹的开源用户到通过提交补丁与项目互动,然后成为直接贡献者,这实际上是一个非常自然的过程。没有人会期望一个公司成为它所消费的所有开源项目的直接贡献者,因为大多数公司所消费的软件远远多于他们所生产的软件,这是开源花园的馈赠。然而,每个使用开源软件的公司的目标应该是回报一些东西,这样它的菜园就能继续结出果实,而不是腐烂的蔬菜。

KV

ACM队列的q戳相关文章
queue.acm.org

强迫异常处理
Kode恶性
https://queue.acm.org/detail.cfm?id=3064643

外包责任
Kode恶性
https://queue.acm.org/detail.cfm?id=2639483

使用免费和开源工具来管理软件质量
菲利普·道林和凯文·麦格拉斯
https://queue.acm.org/detail.cfm?id=2767182

回到顶部

参考文献

1.内维尔-尼尔,g·拉撒路密码。Commun。ACM 58, 6(2015年6月),3233;https://dl.acm.org/citation.cfm?id=2753172

回到顶部

作者

乔治诉Neville-Neilkv@acm.org)是内维尔-尼尔咨询公司的所有人,也是ACM队列编辑委员会。他从事网络和操作系统的代码编写工作,从中获得乐趣和利润,教授各种与编程相关的课程,并鼓励您发表与他有关的评论、妙语和代码片段通信列。


版权归作者所有。
向所有者/作者请求(重新)发布许可

数字图书馆是由计算机协会出版的。版权所有©2018 ACM, Inc。


没有发现记录

登录为完全访问
»忘记密码? *创建ACM Web帐户
文章内容:
Baidu
map