These are all good reasons to contribute to free software but I think you've missed the biggest one of all, the fundamental engine that makes the entire concept work: making the software you already use, more useful. If you need a feature or a bugfix, you can write it yourself, upstream it, and never worry about it again. That's a big part of why companies employ people to work on free software, and it applies just as much to individuals.