Farid Zakaria’s Blog

RSS: https://fzakaria.com/feed.xml
软件工程师,父亲,有抱负的业余冲浪者。

nixpkgs-multiverse 快速模式:零评估获取任意历史包版本

nixpkgs-multiverse 推出 fast 模式,无需下载和评估整个 Nixpkgs 仓库即可直接获取历史包版本的 store path。核心技巧是 tomberek 的 mkFakeDerivation——通过 builtins.appendContext 给字符串附加 context,绕过 --impure 限制,实现纯评估路径。普查显示 上 271,187 个历史路径全部存活,共 14.8 TB。同时有 mvs 命令行工具和 footgun 警告(fake derivation 无 drvPath,override 需用.eval)。
评论点赞收藏1 天前

nixpkgs-multiverse:把整个 Nixpkgs 历史版本库装进一个 Flake

Farid Zakaria 发布 nixpkgs-multiverse,一个 Flake 输入提供 Nixpkgs 历史上全部 31,783 个包、304,484 个版本对,来自 1,537 个修订。对比其他发行版只给一个版本快照,nixpkgs-multiverse 可并行安装 246 个不同 CPython 版本。已解决 长期痛点:开发者无需为每个工具单独 pin nixpkgs 版本。另含 daysBehind 冷却窗口和 provenance 追溯两个实用功能。
评论点赞收藏4 天前

用 Nix 惰性求值玩超级马里奥:每个游戏帧都是独立构建产物

用 Nix 的惰性求值特性把 Super Mario Bros. 3 的按键序列变成可复现的构建依赖,每个帧都是独立 derivation,共享 store 路径。 实测 2 万次按键评估耗时约 14 秒,构建每帧约 1.27 秒;Linux argv 限制单次最多传 21845 个按键,超出需从文件读取。 项目开源在 fzakaria/nes-nix,ROM 作为 flake input 可替换任意游戏。 核心洞察:属性路径本质是程序而非目录坐标,Nix store 可作为可重现状态机的持久化层。
评论点赞收藏8 天前

在 Bazel 中用 357 字节种子构建完整 C++ 工具链

Farid Zakaria 用 LLM 辅助完成了从 357 字节种子自举的 Bazel C++ 工具链,无补丁编译 Abseil 和 GoogleTest,236 个测试全通过。工具链含审计机制,用 Bazel aspects 验证每个构建动作只执行仓库内生成的程序,排除对外部二进制依赖。
评论点赞收藏14 天前

尼克斯沙盒是一个隐藏的输入。

Nix的魅力在于它极其务实地实现了“可重复性”,这个词其实有点过于繁琐。Nix 的默认模型是内涵模型 (%{post_url%202025-03-08-demystifying-nix-s-intensional-model})即输入定址:存储路径的哈希值由配方(推导)产生了它,而不是字节那是从中诞生的。在这种框架下,尼克斯实现了重复性.Nix默认情况下从未是逐点可复现的。1 为了使此方法成立,...
评论点赞收藏15 天前

Nix 终于实现 OpenJDK 源码自举

GuixPkgs 为 Nix 实现了 OpenJDK 的源码自举,从 357 字节 C++ 程序开始历经 19 次 JDK 构建最终得到 OpenJDK 25。对比 Nixpkgs 依赖 temurin-bin 预编译二进制包的方式,Guix 方案完整展示了自举链条:jikes → GNU Classpath → JamVM → Ant/ecj → IcedTea 7/8 → OpenJDK 9→25。实测验证了 javac 与运行环境均可用,并量化了自举带来的额外依赖节点数(876 vs 2),揭示了 Rust 等意外依赖的出现。这是 reproducible builds 领域的重要工程实践。
评论点赞收藏16 天前

Guix by Nix

I have been working more on GuixPkgs in preparation for a talk at for DEFCON34. At the end of my previous GuixPkgs post I left a teaser: We can then build a NixOS machine where every package is the Gu...
评论点赞收藏17 天前

平均值毫无意义。

我最近尝试验证一些与以下性能相关的改进lld在$DAYJOB看到基准测试有所提升,但实际生产仪表盘却没有改善,这让人有些沮丧。 我之前有网络服务背景,习惯了查看单个时间序列仪表盘,有时超过几个百分位数,我期待看到明显变化,但数据似乎太杂乱,无法下结论。 原来有同事在评估构建速度改进时也遇到过类似问题。有很多变量会影响构建:冷缓存、增量缓存、本地缓存、远程缓存等,构建时间会因系统状态和工作负载而有很...
评论点赞收藏19 天前

大型代码模型究竟有什么用?

作者实测发现 GCC 和 Clang 的 -mcmodel=large 无法构建超过 2GiB 的二进制文件,TLS 访问指令仍被限制为 32 位,导致大二进制编译失败。 作者通过生成 4GiB 的.bss 和.tbss 测试用例,证明 large code model 在处理普通全局变量时有效,但在 Thread Local Storage 上彻底失效。编译器始终生成 R_X86_64_TPOFF32 指令,无法突破 32 位偏移限制。LLVM 同样存在此问题,且 lld 明确报错指出 -4GiB 超出 [-2147483648, 2147483647] 窗口。作者质疑该模型的实用性,指出其理论目标与实际能力存在巨大鸿沟。
评论点赞收藏20 天前

小型网站改版与新设计

Farid Zakaria 用 AI 辅助改造个人博客,新增 Nix 构建标识、Jekyll 图片源集插件、CSS 哈希防缓存、页面 SHA256 曲线等细节,并重新设计布局引入侧边栏。 作者主动在 LinkedIn 和 X 寻求外部设计帮助未果后自行动手,强调避免 AI 生成痕迹。技术实现聚焦前端工程优化与个性化表达,适合关注个人站点构建、Jekyll 插件开发或 Nix 部署实践的读者讨论。
评论点赞收藏20 天前

Linux 内核将支持 $ORIGIN,某种程度上

Nix 作者推动 Linux 内核支持 ELF 二进制文件的 $ORIGIN 变量,实现可重定位二进制文件。通过 eBPF 和 binfmt_misc 动态选择解释器,并引入新的分发模式解决进程身份泄露问题。这一进展对 NixOS 及类似包管理系统的可移植性有重要意义。
评论点赞收藏26 天前

如何惹恼你的 Nix 朋友

Farid Zakaria 分享对 Nix 社区的长期观察与争议观点。他认为 Nix 是面向极客的工具而非大众产品,反对盲目追求大规模普及;批评社区存在排美情绪和对 AI 工具的排斥;主张 BDFL 模式优于民主决策,建议放弃 macOS 支持以聚焦 Linux,并指出单用户安装比多用户更合理。文章充满个人经验与鲜明立场,极易引发 Nix 用户的共鸣或反驳。
评论点赞收藏28 天前

Anubis到底拦住了谁?

作者开发Linux内核补丁时遭遇邮件列表启用Anubis人机验证,发现AI能轻易破解,但人类需承担时间能耗成本。文章通过数据量化了这种“累退税”对弱势设备和无障碍访问者的伤害,指出其实际防御效果有限却牺牲了开放网络体验。
评论点赞收藏34 天前

TacoSprint 2026 回顾:Nix 开发者的海滩黑客马拉松

Nix 核心开发者在墨西哥海滩封闭开发一周,取得多项实质性进展:动态链接启动优化、无需 root 的可移植 Nix 方案、基于 P2P 的远程构建系统 drv-thru、比 nixpkgs 快 20 倍的 Zen 模块系统,以及 Guix 包映射为 Nix Flake 的基础设施桥接。
评论点赞收藏47 天前

GuixPkgs:将每个 Guix 包转化为 Nix Flake

作者开发 GuixPkgs,将 GNU Guix 全部包集合转换为 Nix Flake。这解决了 Nix 用户无法直接使用 Guix 庞大软件库的问题,实现了跨构建系统的包复用。对于同时关注 Nix 和 Guix 的工程团队,这是降低迁移成本或统一构建环境的实用方案。
评论点赞收藏51 天前

Nix-build in under 100 lines

文章展示了如何在100行代码内实现一个简化的 nix-build 构建过程。对于关注 Nix 内部机制、构建系统原理以及极简主义工程实践的开发者来说,这是一个极具吸引力的技术拆解案例,能引发关于构建工具复杂度与核心逻辑的讨论。
评论点赞收藏55 天前

Nix Needs Relocatable Binaries

作者指出 Nix 包管理器目前生成的二进制文件依赖特定路径,导致跨机器部署困难。文章分析了这一技术限制对 Nix 在更广泛场景下应用的阻碍,并探讨了实现可重定位二进制文件的必要性和技术路径。这是一个典型的工程痛点讨论,适合对包管理器和构建系统感兴趣的开发者阅读。
评论点赞收藏55 天前

Relocatable Derivations

The earlier post on guix-transfer highlighted how we can use the tool to transfer derivations from /gnu/store to /nix/store.
评论点赞收藏67 天前

登录芦苇

登录后关注作者、收藏内容和参与讨论。