I occasionally run into the problem that I would like to run one of my own applications BEFORE a third-party or OTP application, and there is currently no good way to do that.
Typical such scenarios could be:
- to have a 'prep' application that checks various things and sets environment variables. Currently, that may have to be done before starting the node, but then becomes both slower and more cumbersome
- e.g. defining exometer probes that depend on certain applications that exometer doesn't know about. Since we can't guarantee that they are running before exometer, we have to create such probes manually in an application that has both exometer and the other apps as dependencies.
The app_ctrl component is primarily (at the moment) a way to impose a stricter start order than OTP can manage, e.g. by defining that `gproc` must start before `exometer_core`.
For a few more details, see the README.md file.
I know that the question has been raised e.g. with `relx`, where people would like it to preserve the sort order in the .rel file. But even preserving the sort order doesn't guarantee order, since applications that have no dependencies to each other can start in parallel.
The app_ctrl code has made some preparations for being a fully-fledged Distributed Application Controller. This is in part a decency requirement since it hogs app permissions and the `dist_ac` protocol. But currently, it doesn't do all the work required for distributed app control.