This is the old "free as in beer"/"free as in speech" issue.
The GPL does not say that you have to give away your work for free. Red Hat have the right to charge for pressing CDs, printing manuals, providing technical support, paying programmers to hack on OS projects, and paying dividents to shareholders.
The point of Open Source is that any changes they make to the code have to be published.
It is a good thing that distribution companies (like Red Hat, SuSe, Mandrake, ...) can make a profit selling linux, because it is then in their interest for their product to be good, and so they pay programmers to fix bugs and develop features. The GPL forces them to release the code of these changes, and so the whole community benefits.
Even if you don't want to pay for a distro, most commercial ones offer free downloads, hoping that people will like them enough to show their gratitude and buy a box set, or pay for tech support. And in any case there are many non-commercial distributions (Debian, Slackware, Gentoo, ...) that fund their work through donations.
In answer you speciphic question: Yes, linux will always be free. It is illegal to make changes to GPL code and distribute it without making the source code for those changes avaliable. There is are licenses that allow you to do this, such as the Lesser Gnu Public Licence (LGPL) and the BSD licence.