做开发的都有一个痛点,那就是配环境太痛苦了。
假设现在有五六种语言,每种语言有各自的包管理器,编译器版本控制工具,格式化工具,lint 工具。还有数据库。
以 rust 为例,比如 rustup cargo rustc rustfmt clippy
某些可能还有更刺激的,比如 dart + flutter,react + next
js:喜欢我更混乱的生态吗:P

您现在需要让大家来一起帮你开发。就需要把一整套开发环境全都搬到所有人的电脑上。大家电脑可能是 Windows Mac Linux。
其中
Windows 可能是不同的版本
Mac 可能有不同大版本
Linux 可能是各种发行版的版本号的排列组合
what a hell :P

学术界就有人在想,怎么做呢?
docker 用于部署没问题。
但是开发用 docker 还是太难受了。
主角:nix 登场。
nix 出身
nix 出自 Eelco Dolstra 的博士论文
https://edolstra.github.io/pubs/phd-thesis.pdf
Nix 既是一种语言,也是一种包管理(nixpkgs),更是一种系统(nixOS)
题外话,NixOS 也是 ICFP 上的论文
NixOS: A Purely Functional Linux Distribution ,ICFP 是 FP 的顶刊
这里我们用他的语言 + 包管理来考虑系统怎么处理

目前支持 nix 的 afaik 只有 idx.dev ,甚至还不是把 nix 当主力宣传。
假设我们需要开发一个 flutter + dart + rust + shell + python + js + ts + c + cpp + java 的程序
(你问哪里有这种?apache/opendal 这种多语言绑定的就是)

新手估计光配环境就需要几小时了。

但是在 nix 上:
再 rebuild 一下环境,结束了。
对应的插件安装一下也结束了。
一份写好的 nix 可以直接存在项目里,合作者在 clone 项目时,容器读取配置就自动构建了项目对应的容器。连 env 都可以移植。

而且这一坨东西都不会把屎拉在你自己的电脑上。个人电脑依然是 free of shit :P

某些项目甚至需要 PostgreSQL / Redis,在系统安装又是灾难,但是 nix services.redis.enable = true
一行就全解决了

但是不可变对于个人电脑却是很伤的。。个人用户非常喜欢随便改电脑配置。或者顺手 sudo make install 一个包。这在 nix 上行不通的,因为 nix 用 hash 做路径。
比如我至今没解决 nix 上的 wine 怎么配置的问题。。。
所以我日常个人电脑 Arch,容器开发 nix,服务器看心情用 Debian(free of Ubuntu snap)
 
Loading...
Steven Lynn
Steven Lynn
喂马、劈柴、周游世界
最新发布
我与 Dify 的半年
2025-3-9
我的2022年终小结
2024-11-9
记录雅思考试经历与一点学习心得
2024-11-9
Hackergame 2024 思路小结
2024-11-9
黑客松、日本、入职:我的2024下半年的总结
2024-11-9
NotionNext:基于Notion和NextJS的开源博客
2024-11-9