Compare With Other Systems
Compare SALVE with other systems. Close examination will show that for personal configuration, SALVE is on fairly even footing, but much easier to learn.
None of this is meant as a dig at the big players in this space. However, for a few files in your home directory you don't need their expressive power.
Chef and Puppet are Very Complicated
There are a few prominent tools to manage configuration on servers. Some of the most popular ones seem to be Chef and Puppet. For those unfamiliar with these tools, the following is a list of key concepts and components in Chef:
- Nodes
- Clients
- Environments
- Roles
- Run Lists
- Attributes
- (Encrypted) Data Bags
- Cookbooks
- Recipes
- Libraries
- (Lightweight) Resource Providers
- Ohai
- chef-client
- chef-server
- chef-solo
- Knife
- Ruby DSLs
By contrast, here is the list of new concepts introduced by SALVE:
- SALVE Language
- SALVE CLI
This Complexity Isn't Always Necessary
Chef, Puppet, and related tools need to keep track of server state and know when and where an update needs to be made. Machines can ask questions "Am I listed as a 'web-server'? Am I in the 'nagios-monitored' group?" and choose different components based on the answers. These configuration management servers can provision, update, and track the state of hundreds or even tens of thousands of servers. These aren't just the power tools; they're full-scale construction equipment. In your own home, you generally want something smaller, simpler, and easier to use.
With SALVE, you keep a version controlled directory of configuration files in the state that you want them, and write in a DSL (the SALVE Language) to deploy them. When you want to deploy on a machine, all you need to know in order to deduce how a deployment will run is the state that the local repository is in. This dramatically simplified approach is much more suitable to personal configuration.
SALVE is Idempotent but Imperative
Many configuration management systems are "goal oriented". Rather than listing a set of commands, they try to describe the desired state of the system, and then put it in that state. This makes it hard to understand the flow of execution, especially in the presence of errors.
By contrast, SALVE execution is purely sequential and imperative, meaning that it should be possible to read manifests top to bottom and know what will be executed. This should hold regardless of the machine state.
One of the main advantages of goal-oriented configuration is that it guarantees that multiple runs are idempotent. SALVE aims to solve this problem in the simplest and most direct way possible: by only supporting descriptions of actions which are inherently idempotent.