跳至内容
THE GUILD
0%
服务 产品 招聘 关于我们 博客 常见问题 联系我们
数字积木塔:内布拉斯加州的一个人是如何防止你的应用崩溃的

想象一下:你正在建造世界上最先进的摩天大楼。你有最先进的材料、杰出的建筑师和无限的资金。但问题是——整栋价值数十亿美元的建筑都建立在一块木块上,这块木块是你从未见过的某个住在内布拉斯加州的人手工雕刻的,他把这当作钓鱼间隙的业余爱好来维护。

欢迎来到现代软件开发,这不是假设的噩梦——这是现实。

让开发者冷汗直流的漫画

依赖积木

Randall Munroe的xkcd #2347像一枚精准的导弹击中了编程世界。漫画展示了一座标有”所有现代数字基础设施”的方块摇摇欲坠地堆叠在一个小方块上:“某个内布拉斯加州的随机人自2003年以来一直默默维护的项目。”

如果你不是程序员,你可能认为这是夸张。如果你程序员,你可能正在检查你的LinkedIn个人资料,确保你没有不小心把内布拉斯加州列为你的位置。

这一切荒谬的壮观之处

这就是既搞笑又可怕的地方:完全准确。

互联网——这个让你可以与祖母视频聊天同时订购寿司并争论电影情节的人类工程奇迹——依赖于成千上万个微小的软件库。其中许多由以下个人维护:

  • 有着与他们的关键代码完全无关的日常工作
  • 最初创建项目是为了解决自己的特定问题
  • 从未打算让数百万应用依赖他们的工作
  • 为保持文明运转获得的报酬约为零美元

这就像发现金门大桥的主支撑缆实际上是某人表亲制作的一条非常好的友谊手链,而且不知何故它已经正常工作了几十年。

当塔楼摇晃时

这幅漫画不仅有趣——它是预言性的。我们在现实生活中已经看到这种情况发生:

2016年的Left-Pad末日:一位开发者从互联网上删除了一个11行的JavaScript库。突然间,主要网站无法构建他们的代码。十一行。**十一行。**这比大多数购物清单还短,它差点让互联网瘫痪了一天。

OpenSSL大恐慌:保护大部分互联网通信的库多年来由少数志愿者在业余时间维护。正如一个标题所说:“互联网由两个叫Steve的人保护。”

Core-js编年史:一个被75%的前100名网站使用的库由一个人维护,他辞去工作全职做这件事,但无法维持生计,陷入法律麻烦并入狱。与此同时,大多数互联网继续使用他的代码而不知道他的名字。

开源的美丽疯狂

让这整个情况既荒谬又奇怪地鼓舞人心的是它在某种程度上运行着。这个混乱的数字共产主义系统——既没有资本主义也没有政府资助推动发展——保持着我们的技术世界运转。

想想看:没有人付钱给这些人。没有政府授权他们的工作。没有公司拥有这些关键部件的大部分。然而,通过纯粹的自愿努力和只能被描述为数字利他主义的东西,我们拥有了这个令人难以置信的共享基础设施。

这就像如果世界上所有的道路都是由认为”你知道吗?我喜欢道路。我会在业余时间修这条路”的人建造和维护的。而这以某种方式产生了一个完美运作的全球交通系统。

内布拉斯加因素

你可能会问,为什么是内布拉斯加?这是”荒野中部”的完美隐喻——无意冒犯内布拉斯加人,他们可能有比维护关键互联网基础设施更好的事情要做(但显然无论如何都在做)。

这幅漫画的天才之处在于它捕捉了这些维护者的地理和社会匿名性。在某个地方,现在,有人正在修复你银行应用依赖的库中的一个bug,他们可能穿着睡衣边看Netflix边做这件事。

情节转折:情况正在恶化

这是喜剧变得略微黑暗的地方。依赖问题实际上变得更加复杂:

  • 依赖比以往任何时候都多:现代应用可以依赖数千个外部库
  • 更深的嵌套:库依赖于其他库,而这些库又依赖于其他库
  • 更快的变化:“内布拉斯加州的随机人”可能下个月就因为新工作放弃这个项目

我们本质上是在用整个数字世界玩积木游戏,每年我们都在往一个越来越不稳定的塔上添加更多的积木。

安全噩梦

最近的xz后门事件为这幅漫画增添了一个可怕的新维度。一个恶意行为者花了三年时间与维护者建立信任,最终接管了项目并插入了一个可能危及全球系统的后门。我们避免灾难的唯一原因是因为一个人注意到他们的SSH登录使用的CPU比平时稍微多一点。

一个人。稍微多一点的CPU。这就是正常星期五和”互联网倒塌的那一天”之间的细线。

无名英雄

尽管情况岌岌可危,我们应该庆祝这些匿名维护者。他们不只是保持灯亮着——他们使现代软件开发成为可能。没有他们,每个程序员都需要重新发明每个轮子,我们仍然会从头开始编写计算器。

这些人:

  • 在凌晨2点修复bug,因为世界另一端有人提交了一个issue
  • 编写比大多数付费软件更好的文档
  • 以耐心和专业精神处理来自百万美元公司的功能请求
  • 免费做这一切,出于对好代码和功能系统的热爱

笑声中隐藏的教训

xkcd漫画之所以有趣,是因为它揭示了一个不舒服的真相:我们复杂的技术世界建立在自愿的人类善意基础上。“内布拉斯加州的随机人”不是系统中的弱点——他们是系统确实在某种程度上运作的证明。

当然,它是不稳定的。是的,如果错误的人决定放弃编程去学陶艺,一切可能会崩塌。但它能够运作这一事实本身就是人类合作和开源开发奇妙魔力的证明。

我们能做什么?

如果这幅漫画让你对应用的依赖感到紧张(应该如此),这里有一些想法:

  1. 了解你的依赖:理解你的软件依赖什么
  2. 支持维护者:许多人接受捐款或企业赞助
  3. 回馈贡献:提交好的bug报告,写文档,提交补丁
  4. 有备用计划:对于真正关键的依赖,考虑替代方案

壮观、可怕的未来

随着我们在这个数字善意基础上构建越来越复杂的系统,内布拉斯加州的那个人变得既更重要又更匿名。我们比以往任何时候都更依赖他们,但我们大多数人甚至不知道他们的名字。

如果它不是完全真实的,这将是一个完全荒谬的设定。在某个地方,现在,有人正在维护让你早晨闹钟工作的代码,让你咖啡店的支付系统运行,以及让你的流媒体服务提供恰好合适的节目帮助你入睡的代码。

而他们可能是免费做这件事的,因为他们认为代码应该正常工作。

内布拉斯加州的随机人不是我们系统中的bug——他们是一个特性。一个美丽的、岌岌可危的、绝对必不可少的特性,使我们的数字世界成为可能。

所以下次你的应用完美运行时,也许向宇宙发送一点感谢,感谢所有保持这座伟大数字积木塔屹立的匿名英雄。

只是尽量不要想太多当他们决定去度假时会发生什么。


原始漫画xkcd #2347: Dependency

延伸阅读:查看这幅漫画的详细解释,了解真实世界的例子和更深入的技术背景。