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

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

这种设置加快了开发速度,但也给您的软件供应链带来了巨大的安全风险。

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

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

  • 引入安全漏洞。
  • 面临供应链攻击。
  • 被弃用。
  • 更改其公共 API。
  • 破坏向后兼容性。

在 0deps 模型中,您将所有必要的依赖项直接包含在您的项目仓库中。您不会在安装过程中动态下载它们。从第一次克隆开始,构建和运行应用程序所需的一切都已就绪。

这种方法提供了:

  • 可复现构建(Reproducible builds)。
  • 更少地依赖外部包注册表。
  • 集中式的安全审计。
  • 更高的可预测性。
  • 更小的供应链攻击面。

0deps 并不意味着您停止更新代码。算法和安全修复必须不断演进。相反,您需要保持公共契约(public contract)的稳定。

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

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

这些函数定义了一个契约。该契约保持不变。您可以重写底层代码或替换内部库,而不会影响应用程序的其他部分。

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

结构如下: 应用程序 ↓ 公共接口 ↓ 内部适配器 ↓ 实现

如果一个外部库消失了,您只需更改适配器。应用程序的其他部分不会受到影响。这种隔离保护您免受恶意包、注册表受损和依赖混淆(dependency confusion)的影响。

项目可以存在数十年,但库和框架却不然。0deps 让您的应用程序在生态系统不断变化的同时,能够多年使用相同的稳定契约。

您将获得可预测、具有韧性且易于维护的软件。

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

可选学习社区:https://t.me/GyaanSetuAi