赢在 Apache - 创客法则

| 作者:Nick Ke

| 翻译:徐红伟

| 编辑:舒敏

日期:2017年3月6日

我在 1990 年代开始工作于一系列 Web 应用程序,其中第一个在我当时的工作场所内部,它为卫星图像数据的日常处理、存档和分发提供操作员界面;第二个是现在称为社交媒体的应用程序的前身,这也是我第一次使用 Apache 服务器。Apache HTTPD 2.0 的发布使我从服务器使用者变成开发者:部分原因是我需要重新实现一些现有功能,但更令人兴奋的是因为我看到服务器本身成为应用程序的强大平台的巨大潜力。这使我开始研究核心软件,并与 Apache 社区进行互动,同时发布我自己的模块和文档。2003年,我首次在 ApacheCon 做了演讲,之后的某个时间作为提交者首次被邀请进入基金会,并于2005年成为会员。从那时起,我的兴趣不仅包括 Web 服务器和相关项目,还包括 Apache 社区的发展以及其动态。我通过孵化器参与了几个项目的指导。如果你今天要问我最想实现的一个目标,那么它就是一个身份管理框架,它不仅在加密方面很强大,而且对于世界来说足够方便使用,并且可以抵御网络钓鱼等社会工程攻击。同时,它不涉及任何动机不纯的中心化权力机构(如政府)。它会终结身份欺诈和密码管理的噩梦。

关于 Apache 之道,已经有了很多的相关文章。它通常关注社区的重要性,以及项目治理的民主化和精英化元素。关于 Apache 项目的正式管理机构,项目管理委员会( PMC )的作用,由社区根据贡献记录和建设性参与而选出的贡献者组成。

在实践中,PMC 的角色很大程度上是被动反应式的。诸如 “我们的项目从这里走向何方” 这样的有趣的大问题在公开场合进行了讨论,来自更广泛社区的意见是非常受欢迎的。许多细节部分取决于社区的需求,通过收到和看到的反馈以及个体开发者的需求来衡量。后者通常被描述为 “挠你自己的痒”。

抛开纯粹的被动反应,事情的实际发展方向通常是由开发者的工作来决定,而不是由任何宏伟的计划决定。如果你干了具体的活,那么实际上是你控制事情的发展方向。如果您需要某些东西,那就去实现它。这种方式偶尔用笨拙的英语-希腊语混合词 “ do-ocracy ” (“干活者掌权”——译者注)来描述。我将其称为 “ Pratocracy ”,即“创客法则”。它既适用于 Apache 核心团队,也适用于更广泛的社区。

那么 Pratocratic 项目如何运作?它如何避免"通天塔"(《圣经》中的故事,世人想要建立通往天堂的高塔,上帝知道后打乱世人的语言,让他们彼此听不懂对方,导致通天塔计划失败——译者注)式的混乱?它如何保持凝聚力和专注力?如果一个 Apache 项目看起来是您公司所需求内容的良好基础,那么您如何依 Pratocracy 原则完美地实现您的目标呢?

先说第一个问题,Partocracy 是如何工作的?Eric Raymond 提出了教堂和集市的对比理论:即传统项目的专制和自由生态的区别。集市生态本质上是达尔文进化论形式的结果,其中最强的项目能够繁荣和发展,而长尾类型的项目则会被遗忘,因为他们的开发者会转向新事物。

Apache 的各种流程是为了确保我们的项目能够成为生态系统中的赢家。一个 Apache 项目是从孵化过程中毕业的项目,孵化过程要求它建立一个广泛的开发社区,具有足够的多样性,以确保它不仅能够在关键人员流失后继续生存,甚至是能够在该项目的创始团队解散后依然继续生存。 关键原则是,如果社区健康,软件就会健康

因此,Pratocracy 的运营环境是有选择性的:它是 Apache 著名的精英治理( Meritocracy )元素。核心社区的成员是根据其已展现出的对项目的明确承诺而选出的。这意味着他们理解 Apache 工作与公司工作之间的区别,能够自在地处理好多重效忠,并能解决或避免它们之间的潜在冲突。

所以,回到最关键的问题:假设我发现了一个 Apache 项目,它不能完全满足我公司的需求,但是可以作为我们公司项目的基础,那么我应该如何依据 Pratocracy 原则来实现它呢?

让我们来考虑如下可能的方法:

  • 通过开发列表和问题数据库来进行咨询。
  • 单独联系开发者来讨论该项目。
  • 直接与公司内部的开发人员合作开干。

这些方法中的每一种都有其自身的优点。但在许多情况下,理想的方法将涵盖所有上述内容。在 Apache 社区中,整体大于各部分的总和。您越接近社区,您获得的好处就越多,特别是当您发现自己项目希望与 Apache 项目更深入地集成,而不是仅仅利用公开提供的稳定的公共接口;如果你不与社区紧密合作,反而选择自行修补核心组件,那么你就必须承担因而产生的维护噩梦与风险。另一方面,有一些好的和坏的方式与 Apache 社区合作:正确的方法可以使您从中获得的好处发挥重要作用。

首先,说明你的需求非常重要。向项目列表或问题列表提出关于你需求的问题,参与讨论。或许某些人已经完成了你的需求,或是正在完成。即使你提的问题没有答案,这也是参与社区的一个开始。

如果你想雇佣专业人士,单独与他们联系可能是最适合的方式。一般性的问题可能会被重定向到公共支持论坛,但是 Apache 的一些开发者也提供咨询服务,他们或许喜欢专业的接洽。他们可以帮助您找到最佳的方法,无论是在技术层面上还是与 Apache 社区合作的层面上。但请注意潜在的利益冲突。如果您希望您的工作在 Apache 项目范畴内进行,您的顾问将希望您和您的项目确实适合 Apache,并且不会造成诸如软件无法维护等问题。当然,任何保密协议都应该明确表明,你没有要求获得顾问在 Apache 常规工作成果的所有权!

如果你有内部开发人员,你只需要让他们进行开发即可。当你使用 Apache 项目的公共且稳定的接口就能满足要求时,这是最简单的方式。但是如果你想深入项目的核心,这就更难,也更容易产生混乱。当您开始这项工作时,Apache 社区是您团队的最佳资源,因此,如果您的开发人员有以下任何的优点(不被吓得低头不敢和外界交流),他们将在项目进行过程中与 Apache 社区进行良性交互。

现在你参与了 Pratocracy,尽管(通常)你可能暂时还是在社区的核心之外。你有能提供给 Apache 的东西,如果你把它分享给 Apache,Apache 社区的成员会查看它,并可能会参与其中。最好的情况下,这会形成一个良性循环,在这个循环中,开发人员不仅可以从 Apache 团队中获益,还可以为其做出贡献,并为自己赢得被邀请加入的资格。但这绝不是自动的:开发人员和他们的经理都需要能够看到公司控制结构之外的东西。至关重要的是,开发人员必须能够将他们在 Apache 的工作与他们对公司的专业忠诚度分开,这意味着管理人员必须允许这种情况发生。但不要试图自上而下地管理这样一个过程:这就像试图管理一群猫一样的困难。公司管理人员只要从旁促进推动即可!

这意味着,在某个阶段,您必须与团队坐下来解决界限问题:哪些属于 Apache 项目,哪些属于您公司的操作空间。如果开发人员不是一直被监督着做事,并与模糊性作斗争,这将极大地帮助他们树立信心。如果您的项目不是注定要与世界公开共享,那么建立界限可能是显而易见的,但即使所有内容都是 Apache 许可的,这也是值得讨论的。在后一种情况下,界限定义将集中在贵公司希望在商业上出售和/或支持的产品上,并希望保持完全控制,相对于那些放弃直接控制的部分。

即使您的公司仅仅是克隆或镜像 Apache 项目并贡献一切,您也会希望将业务模式中的事务分开,包括面向客户的事务和面向 Apache 的事务。

请注意,这种事情非常容易出错。在 Apache 我们有时会看到,公司管理者告诉开发者加入 Apache 社区,但却没有说明具体的任务和动机。很明显,这很痛苦,也没有任何用途。

正确的方法是,给你的开发者们具体的任务并让他们加入 Apache 社区 - 如果这与他们的志趣与时间投入相符合。如果与 Apache 项目的密切交互是公司的一个重要的目标,您可能希望接触并且可能雇佣具有 Apache 或类似开源环境的良好记录的个人开发人员。

最后,让我们从我自己的 HTTPD( Web 服务器,通常被称为 “ Apache ”)和 APR 项目的经验中考虑一个真实的案例。SQL 数据库集成到 Web 服务器的历史横跨了 Apache 内外包括企业和社区驱动的许多项目团队。每个开发人员或团队都会根据各自的时间来推进项目的发展,并且(至少您或我听说过的)在各自的领域中取得了成功。

在早期, Web 服务器并没有 SQL 的支持。所以当时任何需要 SQL 的应用程序必须自己来管理数据库的连接。一系列的第三方模块被开发出来,用于 SQL 身份验证和 SQL 登录,包括 MySQL 和 PostgreSQL 等流行数据库以及商业数据库的商业支持产品。Web/SQL 应用程序的通用框架由 mod_perl 开创的脚本模块提供,为开发人员提供程序语言本身的数据库接口以及持久数据库连接。

随着时间的推移,服务器及其应用程序已经超越了这种随机方式,在服务器中实现了多线程处理和多个应用程序。基于一系列想法,本地 SQL 数据库连接框架被设计并开发出来,通过动态连接池和共享为应用程序提供了一些显著的效率提升。它还促进了合理化,因此在身份验证等领域,一大堆不同的数据库驱动模块可以被单个模块替代,来完成通用 SQL 身份验证。每个数据库驱动程序处理不同的 SQL 数据库,这些驱动程序为服务器中的各种应用程序提供服务。

这项工作是在 Apache 核心团队中进行的,并且随着脚本语言等其他语言将其作为用户的选项纳入其中而得到更广泛的传播。它从极简主义开始发展,以提供开发人员 “挠痒痒” 所需的更多功能,并从各种不同来源的数据库驱动程序的贡献中受益。

话虽如此,上述工作的影响仍然刻意维持在小范围里,并不能满足所有应用程序的需求。有些项目继续以自己的方式使用 SQL。事实是,现在有一种正确的方式来访问 SQL ,并不意味着其他方法是错误的!仍然存在第三方项目,出于其自身原因,使用其他方式来访问 SQL。事实上,有人完成了工作并满足了需求,这使他们在 Pratocratic 生态系统中获得了完全有效的生态位。

底线?许多 Apache 用户可以使用现成的软件(可能在咨询了问题的解决方案之后),其他人可能需要添加大量的功能以满足他们的需求。如果你属于后者,那就去做吧。你可以随时讨论或/和分享你的工作。基本的管理决策是在您的工作和社区意见之间进行权衡。与项目核心人员的互动取决于您的开发人员如何能够最好地工作。如果仅仅诉诸于机遇还不够——也许是因为你想要影响项目的核心软件或引入新的 API——这时你就需要考虑你的开发人员在社区驱动的开源中的一贯表现,并确保你拥有专业能力来处理它。

译者简介

徐红伟,2015年博士毕业,之后在西欧游历,致力于数据加密与数据安全事业,后回国创业,乐此不疲。

原文发布于微信公众号 - 开源社(kaiyuanshe)

原文发表时间:2019-08-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券