A fork is your very own copy of some code which you can make changes locally without fear of breaking anything upstream (more on this later). You are free to add some feature and suggest that new feature be added back to the upstream repository.
git submodules are great, they allow you to add another repository to an existing project. So that you can keep your dependencies separate and managed by separate repos.'