2012-06-04 64 views
3

Twelve-Factor App宣言说,它是为web应用程序“...有一个干净的合同与底层操作系统,提供最大可移植性之间的执行环境”[强调加我]供应本地工具,同时保留最大的便携性

但随后it says

十二因素还应用不依赖于任何 系统工具隐含的存在。例子包括脱壳到ImageMagickcurl。 虽然这些工具可能存在于很多甚至大多数系统上,但是没有任何保证,它们将存在于未来可能运行该应用程序的所有系统上,或者未来系统上发现的版本将与 兼容应用程序。如果应用程序需要发布到系统 工具,那么该工具应该在应用程序中进行销售。

和他们早先定义“vendored到应用程序”为:

作用域到含有该应用(被称为“vendoring”或 “捆绑”)的目录。

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

+0

此外,他们似乎没有考虑过您可能在Windows上开发并希望执行“系统工具”的可能性。与其他许多EULA一样,Windows EULA也禁止出售。 –

回答

3

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

  • 如果本地可执行文件是动态链接的,有机会的话,他们将无法在未来操作系统发行版仅仅运行,更不用说将来或过去的处理器架构。
  • 据我了解,它是不可能通过静态链接它来完全验证本机可执行文件。你仍然可能有问题。 Solaris甚至不支持系统库的静态链接!
  • 库依赖不是本机工具可以拥有的唯一依赖关系。还有其他问题。
  • ImageMagick秒 - 甚至curl秒 - 可能有安全漏洞可能允许应用程序受到影响。 (这是一个有点争议点 - 它的有效性取决于你相信谁更以观察/应用安全性更新 - 谁维护人民和升级的服务器,或开发商当然他们可能是同一人 - 现在但是我在这里的工作假设是,服务器将有更新的应用最终,这将反过来保护你的应用程序从系统中可执行文件的安全漏洞已被固定在更新)

我的观点:如果你的依赖选择的管理系统只是简单的空白处理不能处理本机可执行文件,请在自述文件中粘贴一个注释,并用它来完成。如果您没有自述文件,请创建一个。和(对于内部的网络应用程序),添加您需要在标准服务器的图像或您在设置服务器时使用脚本的本地工具,并确保你保持附加的注释,为什么他们在那里

0

它只是意味着你应该有一个声明性的依赖关系和干净的契约之间你的自营资源。

如果您的应用程序依赖于特定版本的软件,则必须与它建立干净的契约,以便您可以模拟/存根功能进行开发。另外,即使在Windows中也不可能让依赖管理成为你的应用程序的一部分(尽管你可能希望它在你的安装程序而不是应用程序本身中发生)。

如果您的产品非常依赖其他软件,即使在测试环境中也无法运行,那么它必须捆绑在一起,您必须制定EULA,或者实际上,您不需要有一个产品。