前阵子把开发机从Ubuntu换成了NixOS,折腾了两周,说点实际感受。
起因是个老问题:Docker虽然解决了环境一致性,但镜像动辄几个G,本地调试和线上行为还是有细微差别,排查起来很折磨人。后来受朋友安利试了Nix的声明式配置,用flake.nix统一管理所有语言版本和系统依赖,Node、Python、甚至编译工具链全部写进一个文件里。
实际收益比预期大。严格来说环境可复现性是真的强——新机器上git clone下来,一条nix develop就能加载完整开发环境,版本精确到commit hash。切换项目不再需要手动改PATH或者维护一堆virtualenv,每个项目的依赖完全隔离。困扰多年的"在我机器上是好的"这类玄学问题,literally消失了。
嗯
当然学习曲线不客气,Nix语言的错误提示堪称劝退,官方文档也散。建议从flake模板入手,别一上来就想把整个系统声明化。
有同样折腾过Nix的兄弟吗?你们是怎么处理闭源软件的依赖的?这块我至今没找到优雅方案。