倡导&弃用
kmpkg 继续支持传统 C++ 包管理器的一些功能,以便老的 vcpkg 用户迁移。尽管存在这些兼容功能,但强烈建议新项目采用 mirror-first(镜像优先) 工作流,以获得更好的可复现性、灵活性和操作简便性。
倡导:镜像优先工作流
kmpkg 强调 C/C++ 包管理的 镜像优先方法:
- 克隆与合并:kmpkg 不依赖中央注册表,而是允许用户从镜像克隆包并合并更新。
- 操作可预测性:镜像使不同环境下的依赖解析具有确定性,确保二进制和功能集在各处一致。
- 私有和受限网络:基于镜像的工作流允许团队维护内部包副本,而无需依赖外部服务器。
- 二进制变体支持:镜像可以维护针对不同架构、编译器设置或功能标志的多个二进制变体。
- 用户是超级公民:开发者可以控制哪些镜像、二进制和功能处于激活状态,而不是被中央系统约束。
弃用:以注册表为中心和 Overlay 方法
传统的 C/C++ 包管理器通常依赖 集中式注册表或 Overlay:
- 注册表中心化的限制:中央注册表中的版本更新、破坏性更改或不支持的功能可能导致各机器构建失败。
- Overlay 方法的限制:依赖叠加可能导致复杂的依赖树、隐藏的覆盖以及非确定性构建。
- 仅二进制限制:纯二进制分发方案无法适应不同功能需求(例如 RocksDB 压缩选项、RTTI 设置),可能导致变体爆炸或编译失败。
- 操作复杂性:集中注册表或 Overlay 解决方案增加维护成本,并降低企业生产环境的灵活性。
结论
kmpkg 倡导镜像优先、灵活、以用户为中心的工作流,同时 弃用注册表中心化和 Overlay 设计。这确保了构建可复现性、操作简便性,并为 C++ 开发者提供最大化控制权。