“在我机器上能运行”是一个架构问题
软件在开发者机器上运行正常却在其他环境失败,这通常意味着架构层面的问题。其根本原因在于系统行为的关键部分未被纳入版本控制,使得开发者的工作站成为一种隐式且未文档化的依赖项。运行时版本、CPU 架构、文件系统、区域设置、时区、原生库、证书、环境变量、依赖解析或构建工具等方面的差异,均可能导致此类失败。这些差异表明,系统缺乏对其构建和运行条件的完整、可复现的定义。可复现构建实践旨在通过确保声明的源码和输入能够生成可验证的产物来解决这一问题。目前,仓库通常仅包含源代码和配置,却排除了运行假设。例如,不同的 Java 开发工具包(JDK)可能改变服务的行为;依赖主机时区的代码,可能因 Java 虚拟机(JVM)运行时环境的差异而产生不同的结果。同样,影响区域敏感操作的默认区域设置可能从环境中继承,从而导致结果不一致。