It depends on your agenda.
If you want to force users who distribute your code/executables to also distribute modifications to your source (or derivatives of it), then GPL is for you (though GPL will force such changes and derivative works to also be GPL).
If you don't care, then go permissive (BSDL or MIT). It's not like anyone distributing closed source versions of your code affects the open source nature of your project (i.e. your project remains open source even if Joe Company uses it in their product).
Though, these are not the only two licenses (but the most common).
You might want to use GPL if your software could be sold to end users. Though, smart users would probably opt for your already free version instead of paying for a corporate version with added features.
Some companies/people use GPL strategically. You distribute a free version of your software as GPL which effectively disallows commercial use. For a small fee, you sell a proprietary licensed version of your code that can be used commercially.
Even if you might not make a profit, permissive software might be used in big/important/historical projects (due to its permissive nature). Your software ends up in major commercial operating systems, military software, space software, medical software, etc... and you become legendary. Take the TCP/IP stack for example ... the BSD TCP/IP stack is BSD licensed. It's also the reference implementation and probably used in every major operating system (except Linux because they're hippies).