文章摘要
软件腐烂指的是软件因环境变化而逐渐失效的现象,常见于依赖库更新导致的不兼容问题。持续维护是避免软件过时的常见做法,但更好的策略是确保软件依赖的环境稳定可靠。建议在开发时兼顾动态平台和静态平台,特别是对于无需长期维护的程序,选择经典平台可以减少后续维护需求。
文章总结
软件腐化通常指的是由于环境变化导致的软件功能退化。例如,十年前编写的程序可能因为依赖的库版本更新而无法正常运行,因为这些库在更新时没有保持向后兼容性。这种观念促使了一种文化,即软件除非持续维护,否则就会变得过时。
更好的方法可能是讨论软件所依赖环境的可靠性。你会在沼泽地上建造房屋吗?
虽然很多时候我们不得不在“沼泽地”(即“积极开发”的平台)上构建软件,但同时也兼容一个基石平台(其规格是静态且稳定的)可能是个好主意。
对于那些不断生产新程序(如游戏或演示)但发布后不打算持续维护的文化来说,软件腐化是一个大问题。为经典平台(如DOS或NES)编写的程序通常不需要发布后的维护,而为Linux等平台编写的程序可能在一二十年后就无法运行了。有时,需要进行严肃的媒体考古工作(如寻找旧库的特定版本)才能让程序重新运行。
评论总结
评论主要围绕“软件腐烂”(software rot)这一主题展开,观点多样且具有争议性。以下是总结:
支持长期稳定性的观点: 1. 选择经久不衰的技术:部分评论者认为,选择那些经过时间考验的技术(如ASCII、SQLite、Perl等)可以减少软件腐烂的风险。例如,forgotmypw17提到:“我选择的这些语言的子集是那些存在时间最长的部分。” superkuh也指出:“一些解释型语言如Perl,今天的程序可以在2001年的Perl上运行,反之亦然。” 2. 微软的向后兼容性:icameron赞扬微软的生态系统:“微软在‘工业级代码抗腐烂’方面无人能及。20年前编译的.NET应用仍能在Server 2025上运行。”
认为软件腐烂不可避免的观点: 1. 技术更新与需求变化:joegibbs认为,软件在20-30年后很可能会过时:“即使1995年的程序能在现代系统上完美运行,它们也很少有用户,因为用户需求已经改变。” account42也提到:“需求变化是软件腐烂的另一个原因,无法完全避免。” 2. 网络与安全的影响:rgmerk指出:“在一个所有事物都相互连接的世界中,无法构建永久软件。” noduerme进一步解释:“如果你依赖网络层,软件最终需要修补,除非你完全控制所有节点。”
对软件腐烂的反思与批评: 1. 行业文化与市场动态:codeflo批评行业现状:“为什么‘稳定’变成了‘无人维护’的同义词?为什么每个构建稳定抽象层的尝试都比它抽象的层更不稳定?” 2. 维护与创新的平衡:Falkon1313表达了对维护工作的厌倦:“维护、移植和不断更新的繁琐工作让我失去生活的动力。我更倾向于那些能够长期独立存在的稳定技术。”
其他观点: 1. Linux的稳定性:nektro反驳了Linux软件会很快失效的观点:“Linux非常稳定,没有任何证据支持Linux软件会在十年或二十年后失效。” 2. 容器技术的应用:joegibbs提到:“如果需要旧版本,容器技术可以解决这个问题。”
总结:评论者们在软件腐烂问题上持有不同立场,一些人主张通过选择稳定技术来减少腐烂,另一些人则认为腐烂是不可避免的,尤其是在需求和技术不断变化的背景下。同时,行业文化和维护工作的负担也成为讨论的焦点。