0deps 运动:本地依赖与不可变契约
软件开发人员通常在每个项目中安装数百个外部库。现代框架依赖于数千个传递依赖(transitive dependencies)。这意味着您的应用程序正在运行来自数百名未知贡献者的代码。
这种设置加快了开发速度,但也给您的软件供应链带来了巨大的安全风险。
0deps 运动提出了一个简单的问题: 如果您的应用程序只运行您实际控制的代码会怎样?
每个依赖项都会增加您的攻击面。依赖项可能会:
- 引入安全漏洞。
- 面临供应链攻击。
- 被弃用。
- 更改其公共 API。
- 破坏向后兼容性。
在 0deps 模型中,您将所有必要的依赖项直接包含在您的项目仓库中。您不会在安装过程中动态下载它们。从第一次克隆开始,构建和运行应用程序所需的一切都已就绪。
这种方法提供了:
- 可复现构建(Reproducible builds)。
- 更少地依赖外部包注册表。
- 集中式的安全审计。
- 更高的可预测性。
- 更小的供应链攻击面。
0deps 并不意味着您停止更新代码。算法和安全修复必须不断演进。相反,您需要保持公共契约(public contract)的稳定。
每个库都暴露一个精心设计的接口。例如:
authenticate()createSession()verifyPasskey()
这些函数定义了一个契约。该契约保持不变。您可以重写底层代码或替换内部库,而不会影响应用程序的其他部分。
当出现漏洞时,您只需更新接口背后的实现即可。公共 API 保持不变。您的应用程序无需更改代码即可继续运行。
结构如下: 应用程序 ↓ 公共接口 ↓ 内部适配器 ↓ 实现
如果一个外部库消失了,您只需更改适配器。应用程序的其他部分不会受到影响。这种隔离保护您免受恶意包、注册表受损和依赖混淆(dependency confusion)的影响。
项目可以存在数十年,但库和框架却不然。0deps 让您的应用程序在生态系统不断变化的同时,能够多年使用相同的稳定契约。
您将获得可预测、具有韧性且易于维护的软件。
可选学习社区:https://t.me/GyaanSetuAi
