As I was reading an update on an issue in github an user suggested me to read the '12factor' principles. While I was reading it I started having some questions on some concepts written in the Dependency Management section.
The quote goes like this:
Twelve-factor apps also do not rely on the implicit existence of any system tools. Examples include shelling out to ImageMagick or curl. While these tools may exist on many or even most systems, there is no guarantee that they will exist on all systems where the app may run in the future, or whether the version found on a future system will be compatible with the app. If the app needs to shell out to a system tool, that tool should be vendored into the app.
While I do understand that you must handle dependencies in your own project and not assume that the system has already installed dependencies, I'm very curious about to which extent I should do it.
As I understand you shouldn't rely on any kind of installed binary or resource when deploying your application but here is my question. What does 'any system tools' actually include?. For example, I use Java for developing. Do I have to include the
mvn binary in my project? and the required Java version too? If I'm using Node I should include the
npm binary? And for Python should I include
pip and the required python version too? And what about the database, should it come bundled too?
I just would like to know the nature of the written manifest, because unfortunately it's very short on examples.