Dependencies 在保持最大可移植性的同时提供本机工具

Dependencies 在保持最大可移植性的同时提供本机工具,dependencies,native-code,12factor,Dependencies,Native Code,12factor,该宣言说,它适用于“与底层操作系统有明确约定,提供执行环境之间的最大可移植性”的web应用程序[重点由我添加] 但是: 12因素应用程序也不依赖于任何 系统工具。示例包括向外剥离到ImageMagick或curl。 虽然这些工具可能存在于许多甚至大多数系统上,但没有 保证它们将存在于应用程序可能运行的所有系统上 未来,或者未来系统上找到的版本是否 与应用程序兼容。如果应用程序需要向系统付费 工具,该工具应在应用程序中出售 他们之前将“应用程序中的供应商”定义为: 作用域为包含应用程序的目录(称为

该宣言说,它适用于“与底层操作系统有明确约定,提供执行环境之间的最大可移植性”的web应用程序[重点由我添加]

但是:

12因素应用程序也不依赖于任何 系统工具。示例包括向外剥离到
ImageMagick
curl
。 虽然这些工具可能存在于许多甚至大多数系统上,但没有 保证它们将存在于应用程序可能运行的所有系统上 未来,或者未来系统上找到的版本是否 与应用程序兼容。如果应用程序需要向系统付费 工具,该工具应在应用程序中出售

他们之前将“应用程序中的供应商”定义为:

作用域为包含应用程序的目录(称为“vendoring”或 “捆绑”)


例如,当(至少在Linux上)本机64位可执行文件不在32位环境中运行时(更不用说在其他操作系统上运行了),应该如何做到这一点?还是有更好的方法来处理这个可移植性问题?

在我看来,根本不应该这样做。这是因为:

  • 如果本机可执行文件是动态链接的,那么它们很可能无法仅在未来的操作系统版本上运行,更不用说未来或过去的处理器体系结构了
  • 据我所知,通过静态链接本机可执行文件是不可能对其进行完全的未来验证的。你仍然会有问题。Solaris甚至不支持系统库的静态链接
  • 库依赖项不是本机工具可以拥有的唯一依赖项。还有其他问题
  • 旧的
    ImageMagick
    s-甚至
    curl
    s-可能存在安全漏洞,使您的应用程序受到威胁。(这是一个有点争议的问题-它的有效性取决于你更信任谁来监视/应用安全更新-维护和升级服务器的人,或者开发人员?当然他们可能是同一个人-目前。但我的工作假设是服务器最终会应用更新,这将在rn保护您的应用程序不受更新中修复的系统可执行文件中的安全漏洞的影响。)

我的观点是:如果您选择的依赖关系管理系统无法直接处理本机可执行文件,请在自述文件中添加注释,然后使用它。如果没有自述文件,请创建一个。并且(对于内部web应用程序),在设置服务器时使用的标准服务器映像或脚本中添加所需的本机工具,并确保额外记录这些工具存在的原因。

这只是意味着您应该在供应商资源之间建立声明性依赖关系和干净的契约

如果你的应用程序依赖于特定版本的软件,那么你必须与它签订一份明确的合同,以便你可以模拟/存根功能进行开发。此外,即使在Windows中,将依赖关系管理作为应用程序的一部分也不是不可能的(尽管您可能希望它发生在安装程序中,而不是应用程序本身)


如果您的产品严重依赖于其他软件,即使在测试环境中,如果没有它也无法正常工作,则必须将其捆绑,您必须制定EULA,否则实际上您没有产品。

,他们似乎没有考虑到您可能正在Windows上开发并希望执行“系统工具”的可能性。Windows EULA禁止贩卖,就像许多其他EULA一样!