Management protocol has to be differentiated here from management payload and commands.
The payloads are the actually settings you want to enforce on the endpoint. Unlike windows and its register, or macOS with UserDefaults, Linux does not have a standard configuration database. It’s flat file, eventually in /etc, not necessarily in the same file format, and not with a single access process.
This is where the works in NixOS is really useful, it start to create a common process of configuration for all dependencies.
The commands are what you currently have via the CLI (apply the config change, etc)
The protocol however, is how you integrate an infinite number of endpoint with a centralized system.
The management protocol need to:
- allow endpoint to report this situation change (disk usage, available update, etc)
- distribute the commands and payload at scale (all managed devices enrolled for a user member of the group developers will get the configuration payload to install git)
- allow enrollment in self service and during initial installation
If we look at how it works on other platforms (iOS, macOS, windows, and somehow Android, ChromeOS is different) this protocol is quite simple, allow some basic messaging and event handling, and let the whole logic up to the MDM implementation.
The server side is the MDM, and the client side is an MDM agent built into the system by the “vendor” of the OS for iOS, macOS, and windows. For ChromeOS, the MDM agent is built by the MDM vendor and use Android native API.
This is where the value could be in NixOS, having the nix toolset supporting a management server in addition to the local commands.
Somehow it’s like puppet/cheff/etc, except that when you are managing endpoint, it’s always behind firewall and NAT, so it needs to be outgoing communication from the endpoint to the management server. You cannot SSH into it.