[2347] Dependency

Title Text:Someday ImageMagick will finally break for good and we’ll have a long period of scrambling as we try to reassemble civilization from the rubble.

Origin:https://xkcd.com/2347/

https://www.explainxkcd.com/wiki/index.php/2347:_Dependency

依赖

终有一天ImageMagick会崩溃,而我们要挣扎很长一段时间从残垣起步重建文明。

脚注:
ImageMagick: 是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。因其使用方便而被很多程序用来进行格式转换。

http://xkcd.in/comic?lg=cn&id=2347

技术体系结构通常通过堆栈图[1]进行说明,其中较高级别的矩形表示依赖于较低级别的组件的组件。这类似于块的物理塔,其中较高的块位于较低的块上。该动画片中的堆栈与实体砌块塔具有惊人的相似之处,这表明当拆除关键构件(在这种情况下是靠近底部的构件,标记为由单个半混凝土维护)时,塔会失去平衡的危险。匿名人士由于自己的未知原因而没有名望或承认,因此位于相对不重要的地方。平衡的概念并不旨在通过堆栈图来传达,这使其成为众所周知的图样式的幽默荒谬的扩展。

标题文本中提到的ImageMagick是1990年发布的流行的独立实用程序,用于在各种图形文件格式和各种其他转换之间执行转换。虽然也有许多库和API的较大的程序中执行这些任务,ImageMagick的是如此受欢迎,易于使用的许多程序使用其API或只是觉得它更容易掏出来的ImageMagick进行必要的改造。因此,它们依赖于ImageMagick,并且如果ImageMagick消失了,它们将会中断。

背景与实例编辑]

对于程序员来说,将代码的可重用性和模块化达到其逻辑极限一直是长期的宗旨。编程在内存非常有限的系统上开始是一项缓慢的任务,它利用打孔卡和数天的等待时间来发现错误,因此重用使事情成为可能。一旦系统变得小型,快速且能够容纳大量数据,提供越来越高的自动化程度的能力就使可重用的库成为技术发展背后的巨大引擎。通过将诸如字符串操作之类的基本功能外包给其他库,开发人员浪费了更多的时间来重新开发轮子,于是哲学就产生了,因此许多微型软件包(其中许多仅包含一个函数)成为了流行的依赖项。在Unix和Linux中尤其如此,

Node.js(一种JavaScript)和Python是两个现代的生态系统,它们提供了大量的集中式库,世界各地的开发人员可以聚在一起,站在彼此创建的所有小型有用库的肩膀上,共同开发新的库这些功能越来越强大,并且也越来越容易在依赖关系链中的某个地方突然出现新的意外错误。JavaScript被设计为一种易于使用的前端脚本语言,而不是作为node.js NPM用户的基本后端核心语言包管理器做到了。尽管从理论上讲,这样的系统对于需要编写和维护较少代码行的开发人员来说可能听起来不错,但是高度优化的系统也非常容易快速更改。例如,NPM程序包管理器中著名的左键盘事件导致许多主要和次要Web服务依赖于它无法构建。一个心怀不满的开发人员不发布11行代码就可以破坏每个人的构建,因为每个人都在使用它。[2]

2014年,Heartbleed错误显示,由于OpenSSL中的错误,互联网的很大一部分容易受到攻击,OpenSSL是一个免费的开源库,可促进安全通信。当时的一个标题在现实生活中展示了这部漫画:“互联网正受到两个名叫史蒂夫的家伙的保护” [3]。前面提到的史蒂夫(Steve)劳累过度,资金不足,而且基本上是不知名的志愿者,尽管如此,他们的努力仍然巩固了全球主要网站的安全性。兰德尔(Randall)对1354年的bug给出了简洁有用的解释:Heartbleed解释

当前的图书馆和开源开发模式(Randall过去曾广泛讨论过的主题)在很大程度上依赖于免费和持续奉献无酬的业余爱好者。尽管诸如Linux之类的一些大型项目可能能够吸引足够的注意力来建立组织,但是许多较小的项目却又由较大的项目重用,而这些项目只能由一个人维护,无论是创始人还是其他人。维护库需要对库本身以及任何用例和周围社区有广泛的了解,这通常适合花了多年时间完成任务并因此不易更换的维护者。因此,随着人们转向绿色牧场,互联网上有许多废弃的项目。远离向后兼容的时代,那是

You May Also Like

More From Author

Leave a Reply

Your email address will not be published. Required fields are marked *