The core problem is anything that's not specifically licensed is just that -- not licensed and can't really be used by anyone. The second problem is that many jurisdictions, notably international ones outside of the U.S. do not have the concept of "Public Domain". So, if you want someone to use your code, you really need to license it somehow.
If you really "don't care" what happens to your code, then BSD 3-Clause (
http://opensource.org/licenses/BSD-3-Clause ) or the Apache 2.0 (
http://opensource.org/licenses/apache2.0.php ) licenses are two of the most open licenses that you can use. Anyone can use them, they can use them for anything, they can change your code, they don't have to tell you or anyone, they don't have to publish the source code. What they can not do is relicense it, since they have no copyright. But they can change the code to call their own custom routines (in a separate file, licensed separately), so there's no need for an entity to be restrained by one of these licenses in any way. These licenses offer the user of the source code the most flexibility.
The GPL is if you want to make sure nobody makes changes without "giving back" to the community. The GPL requires those that use the code, and then distribute binaries, to make the source code available to those they distribute the binaries to. It also requires all of the code that that GPL code is used it to be licensed under the GPL, or something compatible. This is the "viral" nature of the GPL, and what many folks do not like about it.
Note, the GPL is a DISTRIBUTION based license. A company can take GPL'd source code, and use it internally, modify it, whatever they want and NEVER release any changes to the outside world. They are only obligated to distribute the source to whomever they have distributed the binary. Note they are not required to put it on a public website, or FTP server, or anything. They only need to give it to the entity they distribute the binary too, not the "entire world". Once released, they can't stop whomever they gave it to from doing whatever they want.
GPLv3 specifically addresses the embedded space, so, if your code is embedded in some piece of hardware (say a router), and that router is distributed, the GPL kicks in and they must make the source code available to those that request it, but also they need to release anything else that makes the software work (for example, signing keys in todays market). GPLv2 didn't have this requirement, and note that the Linux kernel is under GPL v2.
GPL is for those most concerned with there code being "taken", and imposes much more limitations on the users. It's surrounded by a thick coating of FUD and many commercial entities avoid it with a 100 foot pole.
Neither of these limit the use of your code for ethical reasons. Some folks don't want their code used by despotic regimes, or used by the military, or used for whatever. You'll likely need to add your own rider to the license in order to establish that kind of constraint.