本文探讨了开发者应如何处理软件风险,以及在开源软件日益重要的今天,如何评估和降低供应链风险。作者强调,开发者应将职业建立在概念而非特定工具上,并积极参与开源社区,理解软件背后的信任机制。
译自:Don’t Just Be a ‘Rails Dev’: A Guide to Managing Career Risk
作者:David Eastman
我从未过多关注开源项目的细节和许可,尽管我身边有同事对此非常关心。因此,尽管我对Ruby社区内突然发生的争执感到好奇,但本文不会是Ruby gems的历史,不会研究Ruby Central的动机,也不会探讨David Heinemeier Hansson (DHH)的个人政治。你可以在我们的分析文章中阅读所有的“他说,她说”,或者查阅404 Media最近的一篇文章。本文将探讨开发者应如何处理软件中的任何风险,以及这种处理方式的具体表现。
我会指出,Ruby Central的基础设施服务对于其主要赞助商和资助者Shopify来说可能变得过于重要,以至于无法继续信任富有创造力的开源社区。
我还要补充一点,我个人使用Ruby和Rails。我曾在有偿工作中依赖它们,并使用Bundler来整理我自己的和团队的gems。实际上,我曾参与过一些关于Ruby的开源讨论——关于Ruby Shoes的未来,其维护者曾神秘失踪而闻名。当Oracle收购Sun Microsystems时,我也曾站在另一边,开发者们惊恐地发现Larry Ellison拥有了Java。
成功开源软件的悖论
开源开发社区使软件行业成为可能,但具有讽刺意味的是,其中一些语言、系统和工具变得如此具有经济价值,以至于它们受到了更多的审查和压力——并需要资源来抵御威胁。
开源模式之所以奏效,是因为一旦一个问题被理解并解决,该解决方案就可以作为一种持续的理解,在库或包中共享。但这仅仅是开始。包需要存储、更新和维护。随着它们的更新,还需要有人了解哪些版本的包仍然可以相互兼容。
我们倾向于认为我们使用的开源软件是由“更高层”赐予并以命令形式维护的。当然,它们通常由志愿者维护,这些志愿者也非常乐意接受一些急需的资金。与此同时,在职开发者天真地认为,个性和自我以及金钱在他们最喜欢的语言和工具中不起任何作用。
理解软件中的信托责任和信任
复杂社会的一个特征是,正式和非正式的事物可以同时存在。如果我在街市买水果生病了,这似乎是我无能为力的事情。但实际上,你可能可以向当地的环保卫生部门求助,而且市场可能也有经理。我想说的是,即使你们没有达成合同,仍然存在法律上的预期。在这一切背后是信任的流动与漩涡,它构成了所有商业形式的基础。市场需要消费者和供应商的信任。城镇需要市场的信任。
开源软件就像一块拼布被——一切都嵌入在社区中,这是我们信任的基础。但边缘并不总是完美契合。
当一家公司拥有软件时,公司法和责任使得消费者的权利相当明确。尽管像微软这样的公司在很大程度上是“无面孔”的,但它们受到法律的严格约束,我们可以在一定程度上信任它们。开源软件更像是一块拼布被。一切都嵌入在社区中,这是我们信任的基础。但边缘并不总是完美契合。
评估现代软件供应链风险
Ruby Central将其需要突然掌控权归咎于供应链攻击。如今,供应链风险非常真实。在考虑这些之前,只需看看CrowdStrike事件。一次糟糕的更新导致超过800万系统崩溃,并给机场带来了巨大的经济损失。这并非网络攻击或任何形式的有组织恶意行为的结果。然而,达美航空公司对CrowdStrike提起5亿美元诉讼,指控其严重疏忽和欺骗性商业行为。达美航空声称CrowdStrike部署了未经测试的软件更新。
如今,汽车供应商捷豹路虎正在与一次网络攻击作斗争。这实际上威胁到了第三方供应商的生存,因为他们没有其他的零件买家。在更熟悉的层面上,我几个月前谈到了VSX攻击。
一个人甚至不需要加上最后一个因素——敌对国家的干预,就能看到这些问题。
开发者如何降低技术风险
那么,开发者应该怎么做呢?首先,不要把自己局限于做一个“Rails开发者”。成为一个对MVC模型有扎实理解的开发者,并具备Rails的实践经验,或许还有社区活动经验。不要让你的热情凌驾于客户或雇主的需求之上。如果你喜欢Rails的“主观”特性,可以在其他地方推广它。你喜欢Ruby?谁不喜欢呢!但要准备好使用Python和Django,而不是Rails。尽管DHH的行为可能与你的感受有关,但你会发现像Rails这样的项目有很多领导者。
你喜欢Ruby?谁不喜欢呢!但要准备好使用Python和Django,而不是Rails。
理解你整个工作流程链中的所有风险。这听起来最初像是学术工作或管理层的事情。如果你即将达到高级职位,这在很大程度上是你的工作。如果你证明自己既理解公司的目标,又明白如何改进开发,你的经理会听取你的意见。如果你只是简单地认为“Rust很酷”,那是不够的。你的链条意味着字面上所有用于制造产品的东西。而“风险”则意味着任何可能影响产品的变化(从定价到控制公司)。
将职业建立在概念而非特定工具上
实际处理风险最专业的简单方法是了解如何替换你的链条上的所有东西,以及哪些现成或社区驱动的项目正在运行以及原因。如果你使用的公司产品是同行竞争者的产品,那是一种风险;如果你使用的社区产品不够透明,那也是一种风险。培养对公司为何做出糟糕决策的好奇心。并诚实面对你自己的记录;你是否信任过行业中后来让你失望的人?
每一个有目标的行动都至少附带一个风险评估。我们都曾去过可能关门的商店,并想出了替代方案。但我们都利用信任来对可能的结果做出最终决定。
不要只专注于一种编程语言——要深入了解它的目标。速度、并行性、范围等。
所以,不要只专注于一种编程语言——要深入了解它的目标——速度、并行性、范围等。然后,理解这种语言如何实现这些目标。我喜欢C#。我喜欢它对Java的改进方式。我赞赏它因为有微软的支持而保持稳定。但是如果他们转向Rust呢?通过研究Rust,我或许可以通过消除心中的疑虑来降低风险——或者理解一些微软开发者可能看到了什么。
成为社区成员,而不仅仅是消费者
众所周知,软件可以由大公司或开源社区支持。因此,开发者必须理解他们是在扮演消费者还是社区成员的角色。
如果你与软件的关系是消费者,那么你拥有权利和期望。有一个坚固的“大厦”你可以扔鸡蛋。你可以在社交媒体上投诉。最终,股东会害怕你。
如果你的关系是使用开源软件,那么你就是社区的一部分。开始积极参与进去。这就是你如何被同行看待,并最终被评价为一名开发者的方式。软件仍然拥有开源社区的原因是,开发者既是匠人,又是爱好者,也是园丁。
但归根结底,它是关于建立超越表面营销或个人魅力的信任关系。花时间去了解环境。如果你用软件构建东西,你不是一个被动的“幽灵”。