How about you? Why do you contribute to open-source projects? And how do you contribute?
I contribute for many reasons.
Firstly, I've used so much freeware and open-source software in my professional and personal lives and it's invariably saved my butt. Whether that was saving several hundred pounds on buying a nice firewall/router/filesharing combination, or giving me a recovery OS to recover data and programs from dying machines, or just giving me a decent non-destructive DOS partitioning tool (back in the days of DOS 5), or letting me re-use old machines to do things I needed to do, right through to hand-stitching AD domains back together in the middle of a critical downtime, saving schools thousands on software that does exactly the same as the freeware/OS equivalent (and not even in the "Office" realm, but just silly stuff like TuxPaint and Irfanview), etc.etc.etc.
Because of that, I find that freeware and OS software often fills needs that others don't and there's *always* a utility somewhere to do what you need. So I automatically seek out and (almost always) find free and OS software first when I have a job that needs doing. Sometimes that finds a gap in the market that, although covered by commercial software, isn't adequately filled by free software. If I got that far in looking, so have others and it's in the IT guy's nature to share wisdom and tools when someone is desperate for a solution (The "John, have you ever had this problem..." phone call), so I've ended up giving away scripts and little programs that I've later found companies charging for equivalents.
As a programmer myself, it's also inherently more likely that when a problem presents itself I will want to know the cause. This has lead to me finding and diagnosing bugs and publishing solutions and patches for commercial software before the authors even knew the bugs existed. I've even been thanked by several companies for fixing things that they wouldn't have been able to track down without buying an expensive education-specific network from a particular supplier to test on. My solutions are always free to those that I feel are trying to fix a problem. I know they are just "stealing" my work, so to speak, but I don't care. My own personal itch was fixed and it's just nice to share that with everyone (I never share with *just* the company in question, or they might just sit on the bug - the Internet makes it easier to share with the world than the one guy next door)
But obviously, because of all that, I have a lot of OS software deployed and bugs also crop up in that, so if I do the same diagnosis to fix my internal problems, it's easy for me to patch it and then sending that information to the authors is "contributing" to OS software too even if they decide to rewrite it, or fix it another way, or do nothing about it (I was using a patch that someone made to fix VLC hotkeys long before it ever made it into the program's codebase).
And then, occasionally, I happen to find these gaps in the "market" (even if it's just a tiny conversion utility, or a set of instructions, or a free equivalent of something else), fill them and lots of people then use my solution, extend it, etc. Hey presto, an OS project.
And sometimes I just like to program for fun. An awful lot of programmers don't get this, especially those who focus on business programming. It's an intellectual challenge that actually has a productive result. Anyone can do a sudoku in their lunch hour and doing more sudokus just makes you better at sudoku. But if you start even the simplest of programming projects, your mind will be taxed from all angles and you'll never meet exactly the same problem twice. And every problem, and every solution found, make you a better programmer because you avoid those mistakes in the future, learn new techniques, etc.
When I was a kid, programming was fun - it's what made computers interesting rather than just games machines. All my friends had Gameboys, etc. but nobody was writing their own games, in the middle of maths class, that could run on a calculator - a dozen people bought the same calculator as me just so they could run the games I was writing. When I went through uni, I learned lots of algorithms and how to analyse them, and lots of new techniques, so programming was still fun. Now I've grown up, programming is still almost always fun.
If I see a game I like, I try to make my "own" version of it - whether to work out how it works, or to make a cheaper version, or just to fix their own inherent bugs. If I think of a new idea, I try to implement it myself. If I think that a particular game would go really well on a certain handheld, I'll port it. And inevitably that code eventually makes it online in some form and people work from it to make bigger games, more games and more ports.
OS software is the Seti@Home of programming. All the idle downtime of the human race can be put towards improving something and achieving something tangible and practical. Sometimes it leads to an answer, sometimes it doesn't, and sometimes the project itself is outshone by a particularly enthusiastic contributor. But every little minute I put into programming something means a slightly greater chance of helping someone, somewhere to do something they want to do - whether that's just me opening a particular file, or someone on the other side of the world being able to use a piece of my software to help run their schools.
It "costs" me nothing except my idle time, and I get enough out of it that my idle time feels "well-spent", and as a side-effect other people sometimes benefit too. Now you'll excuse me, I'm actually working on a rather interesting little problem with Hylafax and trying to craft a filter to stop my school from spamming their suppliers when they make a mistake when sending a fax. It's actually lunchtime here, but I won't rest until I have that problem sorted - and yet nobody but me really *cares* about that problem, to my knowledge.