I write free software for the same reason people help old ladies cross the street, crying mothers find their kids, etc. I write software that saves people in time of need, that makes them sigh in relief and say a silent prayer of thanks to whoever it was that wrote this application that made their day so much easier.
I write free software for the karma, the brownie points, the feel-good feeling.
I don't write free software so people can buy my paid software (of which I have none). I don't write free software to avoid responsibility or support (I provide free support in forums, with tens of thousands of posts). I don't write free software to "experiment" or to learn (I'm a professional developer with 7 years of commercial systems engineering under my belt).
That said, the open source zealots piss me off just as much, if not more. I'm always being asked "if it's free, why not make it open source and give back to the community?" [1] What about the word "FREE" doesn't include giving back to the community? Why should I release my years of hard work, research, and effort to people who will take it apart, line by line, take from it what they want, repackage it, or take away the little attribution I get from the software itself? Sure, if I were a bigger man with a bigger heart, maybe I would... but I'm not and you shouldn't look a gift horse in the mouth.
Just because I choose not to charge for it doesn't mean I'm going to give away the source code for free, especially for software as complex, critical, and well-researched as mine.
0: http://neosmart.net/dl.php?id=1 1: http://www.reddit.com/r/software/comments/cp84s/the_new_vers...