主要观点:多年来 Nix 采用量大幅增长,其项目共享也随之增加,从最初通过传递评估项目实例来消费项目,到意识到应像处理其他依赖一样以声明和可重现的方式处理依赖,但传统的default.nix
和shell.nix
文件不适合,于是需要新的解决方案即 Nix Flakes。
关键信息:
- Nix Flakes 旨在解决 Nix 生态系统共享项目时的两个问题,包括不再依赖系统可变状态,将依赖保存在项目中以在任何系统上重现,以及存在标准化模式来声明知名项目导出。
- Nix Flakes 在 Nix 生态系统中系统失败,其作为核心实现细节存在争议,仍为实验性且未来十年内无稳定时间表,结构更改不受鼓励,多年来未显著改进,关键修复和功能停滞。
- Flakes 的核心组件输入只能加载 Flakes, legacy 项目需作为原始存档手动导入,与 Nixpkgs 不兼容,缺乏配置和交互设置的功能,扩展性差,超出知名模式缺乏解决方案,还设置额外评估限制并给用户带来风险。
重要细节: - 默认情况下 Flake 评估限制在纯评估模式,禁止访问不纯系统状态。
- Flakes 是一等公民,其他都处于次要地位,这导致在“简单”名义下出现很多繁琐甚至令人沮丧的体验。
- Nixpkgs 因 Flakes 缺乏所需灵活性而需经常手动导入。
- Flakes 输出是临时属性集,无类型检查,无法指定非标准导出。
- Flake 入口文件
flake.nix
的输入和设置静态评估,限制用户编写输入方式,却能通过设置让项目获取机器 root 访问权,易造成攻击。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。