it's very easy:
GPL: nobody can distribute your software as a closed-source system. Nobody can also link your software with non-opensource ones.
BSD, MIT, Apache: anyone is allowed to do anything with your code, provided that reference to your name is preserved.
If you code an open-source product, but it's intended for enterprise integration with lots of non-opensource components, go for a non-GPL licence, like MIT.
In most other cases, GPL is everything you need.
For non-software products that you want to share, use Creative Commons licenses.