I was talking with an Apache contributor today. He was lamenting that more of the users of his projects could contribute back, but did not. I asked what he believed were the reasons. We discussed two: One was work. People or their employers did not feel comfortable giving back. The second I thought was more interesting. It was fear.
Users are afraid of rejection that might come when they submit their own code. When they are possibly able to contribute to a project (especially one that has well known developers) they are afraid of the harsh criticism of their coding abilities. He made one more interesting point stating that when those users do contribute, their contribution usually ends up being quite good (often better than long time contributors). This is not because they are better coders per se, but caused by the effect on the project community. As a first time contributor submits his code, the other members of the community are more apt to review it and improve it. Casual lurkers on the mailing list learn from this action and on the whole the community around the project is improved.