Introduction
版本管理,管理两类软件:1. 使用的工具例如cmake,clang 2.项目依赖的包,例如boost,opencv。 工具和系统相关,项目依赖的包通常与项目对应的包管理工具相关,比如npm vcpkg。c/c++会特殊一点,它们的开发依赖包,有很多一部分是系统管理的,从源码构建软件是开源系统的一个常见的特色。
Nix 是开发环境问题的最终解决方案。
为什么不使用Docker?
Docker的定位是应用程序的打包和部署,而不是开发环境的管理。
虽然有devcontainer,但是它有以下问题:
- 描述一个开发环境是复杂的,Dockerfile+bash 比不上Nix lang 的表达能力。
- 只是项目依赖的包需要保持特定的版本,一些工具不需要,比如neovim,我想用最新的版本,Nix 可以灵活的处理这种需求,但Docker就困难。
为什么不使用NixOS,而是继续使用openSUSE tw?
操作系统需要承载很多事情,开发只是一部分。NixOS 相比于滚动发行的openSUSE tw,获取一些软件的新特性会慢一些,而且作为一个系统的使用者,我不想操心过多的依赖,如果一个软件不在Nix 包管理的仓库里,自己手动处理依赖会很麻烦,比如微信和qq。
可能后面我会改变想法。