Note: this question is about the general case... How things usually are.
OK so I can download the code and mess around with it, but how do my changes make it into the project officially? Who decides what changes make it into the project, and how? Is there often a list of required changes/additions? What if I have a cool idea that is not mentioned there? How do I get it approved? And what if two people implement the same feature. Who chooses which implementation makes it into the project?
Basically, how is the whole thing managed (in the general case)?