The container and the submodule truly act as independent repos.
Submodules, like subtrees, aim to reuse code from another repo somewhere inside your own repo’s tree. The module has its own repo, somewhere inside the working directory of its container repo. At deployment, a specific commit hash is pulled into the larger repositiory and deployed.
Makes working on extensions by ISVs similar to application development where they are exposed an API.