The C-Shaped Hole in Package Management
4 months ago
- #package-management
- #dependency-resolution
- #open-source
- 系统包管理器(如apt、dnf)和语言包管理器(如pip、npm)用途不同,但在管理C库方面存在重叠。
- 系统包管理器专注于交付应用程序并维护每个包的单一版本,简化了依赖关系解析但牺牲了灵活性。
- 语言包管理器优先满足开发者需求,允许多版本并存和跨平台兼容性,但难以处理C依赖项。
- C库处于两个系统的交叉点,缺乏权威的包注册机制,导致生态系统间产生摩擦。
- 不同发行版对C库的打包方式不同(如Debian的libssl-dev与Fedora的openssl-devel),造成不一致性。
- 语言特定解决方案(如Python的wheel、Node的node-gyp)独立处理C绑定,但缺乏机器可读的依赖声明。
- 幻影依赖(如NumPy中捆绑的OpenBLAS)未被记录在元数据中,使安全维护和资金追踪复杂化。
- Conda试图桥接系统包和语言包,但因复杂性和性能问题仍属小众方案。
- Nix和Guix提供可复现构建,但仍采用吸收语言包的模式,未能实现跨生态系统协作。
- ecosyste.ms等工具致力于将符号映射到系统库,提升安全性和可持续性的可视化程度。