0deps 运动:本地依赖与不可变契约

软件开发人员经常安装数百个外部库。现代框架依赖于数千个传递依赖(transitive dependencies)。这意味着你的应用程序正在运行来自陌生人的代码。

这会产生软件供应链风险。

每个依赖项都会增加你的攻击面。它可能会:

  • 引入安全漏洞。
  • 成为供应链攻击的目标。
  • 被维护者弃用。
  • 更改其公共 API。
  • 破坏向后兼容性。

0deps 运动提出了一个简单的问题:如果你的应用程序只依赖于你控制的代码会怎样?

在 0deps 模型中,你将必要的依赖项直接嵌入到你的项目仓库中。你不再在构建过程中动态下载它们。从一开始,运行应用程序所需的一切都保留在仓库中。

这种方法提供了:

  • 可复现的构建。
  • 更少地依赖外部注册表。
  • 集中式的安全审计。
  • 更高的可预测性。

核心原则并不是让代码保持静态。实现和算法必须不断演进,以修复漏洞并提高安全性。保持稳定的是公共契约(public contract)。

每个库都暴露一个精心设计的接口。示例包括:

  • authenticate()
  • createSession()
  • verifyPasskey()

这些函数定义了一个契约。该契约永远不会改变。你可以重写其背后的代码,或者完全更换库。应用程序的其他部分不会察觉到这种变化。

当漏洞出现时,你通常面临两个问题:

  1. 修复漏洞。
  2. 检查更新是否会破坏你的应用程序。

在 0deps 架构中,第二个问题消失了。你更新内部实现,而公共 API 保持不变。你的应用程序无需更改代码即可继续工作。

你使用内部适配器来隔离外部集成: Application -> Public Interface -> Adapter -> Implementation

如果一个库明天消失了,你只需要更改适配器。应用程序的其他部分不会受到影响。

0deps 并不会让软件变得完美。它降低了供应链风险。它能防止恶意软件包、注册表受损和依赖混淆(dependency confusion)等问题。

项目会持续数十年。库和框架在不断变化。有了 0deps,无论生态系统如何演变,你的应用程序都可以继续使用相同的稳定契约。

来源:https://dev.to/fullagenticstack/movimento-0deps-dependencias-locais-contratos-imutaveis-e-seguranca-por-design-4coo