acm-header
登录

ACM通信

Kode恶性

厌恶版本


版本格式

信贷:Devopedia

回到顶部

亲爱的KV,

最近,我一直在试图拼凑一组软件包,这些软件包应该是一起工作的,但看起来非常脆弱。它们脆弱性的主要来源来自于开发人员如何“解决”包、库和他们自己的软件之间的依赖关系。他们使所有部分一起工作的解决方案是将库或包的版本编码到文件系统中,如/opt/pkg-v2.87/lib/....正如您所想象的,当库或包升级时,这会给我们使用该软件带来无穷无尽的麻烦。据我数,至少有30个地方这样做了。你不能告诉我这是处理这个特殊问题的正确方法,但这些人是有偿的专业人员,我们为他们的软件付费。KV会怎么做?

厌恶版本

亲爱的厌恶,

从软件库的早期开始,依赖分析和解析(以及版本)的问题就一直存在,其中的一些解决方案,如包系统的SAT求解器,是聪明而优雅的,而且大部分都是有效的。构建依赖关系通常由系统处理,例如automake而且autoconf,只要你不往里面看,它们就很有用。如果你往里面看,你不仅会看到香肠是如何制作的,还会看到原料是如何加工的,最后作为制作文件吐出来的。所有这些都是说,这些问题已经解决了,而解决方案往往是复杂和曲折的,但我们都钦佩那些致力于解决这些问题的人。

还有一些人,要么是因为无知,要么是因为愚蠢,决定在黑暗中尝试一下,用他们自己独特的方式解决问题。你今天面对的绝对是这些类型的人。我猜你可以针对软件提出一个错误,看看是否有人修复它。但考虑到他们已经提供给你的质量,我认为这是一个很长的机会。

既然您已经能够数出在软件中所犯的这些错误的数量(您将其编号为30),那么我假设您拥有一定数量的源代码;也许这些信息都是作为信息源传递的。一个快速但非常脏的解决方案是使用独一无二的sed(流编辑器)程序一个根据需要更新版本号。你可以在这里找到一个手册页面,但我相信Stack Exchange或其他作弊网站会给你一些代码来“在我的代码中交换版本号”或类似的东西。只需将代码放入回购的某个地方,找到sed(1)的正确咒语,献祭您选择的活动物,然后voilà,您就可以更新版本以匹配最新的库。纯粹主义者会尖叫这不是解决问题的正确方法,他们是对的,但纯粹主义者有足够的时间去做正确的事,而我们其余的人都在努力做正确的事。

当然,更好的方法(同样需要源代码来做到这一点)是更新代码,以实际采用路径参数或查询某种环境变量(MYLIBPATH),它可用于将软件指向正确的位置,无论您希望它使用什么版本。如果你走这条路,一定要告诉开发者你会给他们发送补丁。

这里更高级的一点是,永远不要在代码本身中硬编码版本或路径。代码需要灵活,这样它就可以安装在任何地方(/usr/local的硬编码显然是愚蠢的,但仍然存在),只要必要的依赖关系可以解决,就可以在任何地方运行,无论是在静态编译代码的构建时,还是在运行时,解释代码或带有动态链接库的代码。正如KV刚刚指出的那样,目前有一些很好的方法可以让这一做法正确,所以很遗憾有这么多人继续犯错误。

KV

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

Kode Vicious释放
https://queue.acm.org/detail.cfm?id=1046939

了解软件补丁
Joseph Dadzie,微软
https://queue.acm.org/detail.cfm?id=1053343

不变性改变一切
帕特Helland
https://queue.acm.org/detail.cfm?id=2884038

回到顶部

作者

乔治·v·内维尔·尼尔kv@acm.org)是Neville-Neil Consulting的东主及ACM的联席主席队列编辑委员会。他从事网络和操作系统代码方面的工作,教授各种与编程相关的课程,并鼓励您的评论、俏皮话和与他相关的代码片段通信列。

回到顶部

脚注

一个。https://www.freebsd.org/cgi/man.cgi?query=sed&sektion=&n=1


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

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


没有找到条目

登录全面访问
忘记密码? »创建ACM Web帐号
文章内容:
Baidu
map