The big three nowadays are SVN, Git, and Mercurial (AKA Hg). All three of free both as in speech and beer, and work on all major platforms.
SVN is billed as a “better CVS”, in that if you’re used to CVS it will seem familiar. There are lots of graphical tools, and it’s been around longer than the other two. It is inherently a centralized system, in that there is one master server that everybody pushes their changes to. If you’re disconnected from the network, you can’t commit your changes, and you can’t look at history without being connected to the central server.
Git and Hg are newer and are both decentralized (or distributed) version control systems. This means that every checkout (more commonly called a “clone”) is a fully functional version control system in its own right. You can commit to your own local repository, look at history locally, all that good stuff. If you’re used to a centralized system like CVS it can be a bit of an adjustment, but many people find it to be incredibly useful, as you can feel free to commit your changes without publishing them. Git and Hg are much better with merging than CVS, since they have to be.
Both of these projects came out of the Linux kernel development community. Linus Torvalds, creator of Linux, also created Git, and it’s definitely more focused at power users, as it makes it easier in some ways to shoot yourself in the foot. Hg has the capabilities to do all the same types of things, but they don’t make it quite so obvious. There are graphical frontends, but they tend to not be quite so mature as those for SVN. Both have very rich commandline toolsets. Git is easy to script with perl or bash, and Hg is internally written in python and there are many python extensions (and you can easily write your own).
If you want free hosting, you can easily run your own server for any of them, or you can use Google Code for SVN or Hg hosting, Bitbucket for Hg, or GitHub for git.
I’ve probably opened up more questions than I’ve answered. I’ve used all three professionally, and I’ve contributed to both the Git and Hg Eclipse plugins. (I have one commit in the Git codebase, consisting of a one-word typo fix in some documentation.
)