I read one article and skimmed the other under "Background reading" but I could not spot what the core philosophy or mechanic of how you are producing atomic and reliable upgrades.
I try to stay abreast of package systems which have the same or close feature set as nix. If you have a moment to explain the core mechanic or a reference it would be much appreciated.
The "no scripting zone" and "no more installer magic" background posts have some of the philosophy.
But really a lot of the atomic and reliable aspects are the result of integration with ZFS. When the user upgrades packages, we create a backup boot environment (clone of the root file system) and then update the packages. If anything goes wrong, the user can just reboot to the backup be.
When updating the system (that is, packages that require the kernel to be reloaded/system rebooted), we create a clone of the root file system (a boot environment) and update the clone. When the update finishes, the admin can then reboot the system at their leisure.
If you'd like to know more, I'll try to answer your questions. You can email me at $myusername at gmail dot com.
If anyone is wondering, I suspect you could take IPS and integrate with btrfs instead. The abstractions are generic and btrfs is growing the required functionality as time goes on.
I tried to do just this myself and Btrfs ended up corrupting my install beyond use.
Thankfully this was just on a test system and I do appreciate that other people have had good success with Btrfs; but as a ZFS user for quite a few years now (since before Linux and FreeBSD ports became stable - so my file servers were originally running Solaris) and have never had an issue with the file system (in fact it's saved me a few times), I can't help thinking that Btrfs is still a long way off being a viable contender.
What's more, I found Btrfs's commands to be convoluted and, at times, counter-intuitive when compared with ZFS's. Which isn't a deal breaker on it's own, but it is a great shame given the opportunity they had to get it right (ie writing the entire software stack from scratch and with no legacy to worry about).
This is all my personal experiences though. Others will have their own preferences and (anecdotal) evidence to support that.
I try to stay abreast of package systems which have the same or close feature set as nix. If you have a moment to explain the core mechanic or a reference it would be much appreciated.