Hasty Briefsbeta

双语

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等工具致力于将符号映射到系统库,提升安全性和可持续性的可视化程度。