As usual, there is the question of what exactly you are trying to do, and at what level to do the abstraction. The talks at systemd conf explore that space. What needs to be kept isolated from what, etc. Different machines? Different OS? Different Kernel? Different library versions... We have so many options for mixing and matching these days.
I have found that for development, Nix, in Debian or elsewhere, is almost perfect. You can exactly specify and share your development environment with others, and you can have a different development environment for each of your projects, or even more than one in the same project, all in the comfort of your normal user environment in your OS of choice. Think on this-- you can have a particular combination of versions of python, ghc, racket, llvm, gcc, libs, environment vars, etc., etc., all your depends, declared explicitly in your git repo, where you, your tools (also specified to the extend you desire), and your friends can just jump into a shell with that exact environment. Nix might have a slight learning curve, but there is no other way to develop these days. That said, I did once resort to a VM when I reached the end of what was possible (OpenGL drivers were my doom, and I resorted to a NixOS VM). -- Anthony Carrico
