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

软件开发人员通常在每个项目中安装数百个外部库。现代框架依赖于数千个传递依赖(transitive dependencies)。这意味着您的应用程序正在运行来自数百名未知贡献者的代码。

这种速度为您的软件供应链带来了巨大的风险。

0deps 运动提出了一个简单的问题: 如果您的应用程序只运行您实际控制的代码会怎样?

每一个依赖项都会增加您的攻击面。它可能会引入安全漏洞、被弃用,或者通过新更新破坏您的代码。您会失去对生产环境中运行代码的控制权。

在 0deps 模型中,您将所有依赖项直接引入您的项目仓库。您不会在安装过程中动态下载它们。构建和运行应用程序所需的一切都已经就绪。

这种方法具有以下几个优势:

  • 可复现的构建 (Reproducible builds)
  • 减少对外部包注册表的依赖
  • 集中式的安全审计
  • 更好的可预测性
  • 更低的供应链风险

其核心原则并不是阻止代码发生变化。算法和安全修复必须不断演进。保持稳定的是公共契约(public contract)。

每个库都暴露一个精心设计的接口。

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

这些函数定义了一个契约。该契约永远不会改变。您可以重写底层代码或完全替换该库。应用程序的其他部分保持不变,因为它只与契约进行交互。

当漏洞出现时,您可以在内部进行修复。您更新接口背后的实现。公共 API 保持不变。您的应用程序无需更改代码即可继续运行。

这种结构使用内部适配器(adapter)来隔离外部代码: 应用程序 ↓ 公共接口 ↓ 适配器 ↓ 实现

如果某个外部库消失了,您只需更新适配器。应用程序的其他部分不会受到影响。

0deps 运动并不是要反对开源。它改变了您使用开源的方式。库变成了由您自行审计和版本管理的集成组件。

这创造了可以延续数十年的软件。实现方式会改变,但您的契约保持不变。这种稳定性使您的软件具有可预测性和韧性。

来源:https://dev.to/fullagenticstack/mouvement-0deps-dependances-locales-contrats-immuables-et-securite-par-conception-24c2