CVS and tools
Version control is so important when doing software development. Especially so if you're working with other people. The chances someone is going to step on your work is pretty high, so having a versioning system is the best way to safeguard against someone overwriting hours of your work. I've really taken to CVS-- it's nothing particularly glamorous, but it Gets The Job Done. And it's free, so there's no excuse not to use it. I love it's client/server architecture and with it, you can do your development from anywhere.
Not too long ago I discovered a neat little client for CVS called TortoiseCVS. It extends the Windows shell to enable CVS menu options in the context menus and while WinCVS is nice, most of the time I don't need a full interface like that so TortoiseCVS fits the bill for day-to-day commits and updates.
Here at the office we use RCS and are starting to adopt CVS. I'm just glad we're not adopting something proprietary like Visual Source Safe. I've used VSS in the past and it's nice and all, but it wouldn't help us very much on Linux.
Another freebie that works great in conjunction with WinCVS and TortoiseCVS is WinMerge. Makes merging code a snap.