What is it for? What are the consequences when I don't have one?
What is it for?
Many companies that open source their code want to keep control over the software. The CLA helps for that. Also it can be used for some legal issues. Usually it demands, that you guarantee you violate no rights of others if you contribute to the project and that you transfer the rights to the project-owner, while you get the guarantee your contribution is open-source is given in return.
What are the consequences when I don't have one?
As you don't own the code of other contributors, you cannot go against the OS-license under which the code was contributed to you. So you might not be able to switch the license (at least if it isn't a compatible switch) later on without removing that code. You also might be liable for any rights violated by this contribution. Also you can enforce violations against the license only for the parts you hold the copyright for.
Do I need one?
This depends. Usually for smaller projects i wouldn't bother, it is a hurdle for potential contributors. If the project gets bigger it might be useful though. Formulating a good CLA is difficult though and might be a job for a lawyer.
- Might secure against possible problems with the law (assuming your contributors do bad stuff).
- Can give you more control over the codebase.
- Can be a hurdle for potential contributors.
- Can lead to a rift in the community, if many of your contributors disagree.
A contributor license agreement can do several things:
A CLA can require contributors to transfer copyright of all contributions to the legal entity (person or corporation) responsible for your project. For example, the GNU project requires all contributions to have the copyrights transferred to the FSF. Without this provision, you cannot enforce copyright over all of your project, since you don't own it. For example, if Alice writes module X for your project, and then Bob starts distributing module X in an unlawful way (e.g., your project is GPL-licensed and he's violating the GPL), you may not have legal standing to sue if Alice never transferred copyright of module X to you.
- I'm not a lawyer, but I suppose this kind of "CLA" is not strictly a licensing agreement at all (since copyright rights are being transfer to a new owner rather than licensed by the current owner), and is referred to as a CTA (copyright transfer agreement).
A CLA can grant you the necessary rights to re-license the project under a new license. By default, only a copyright holder can re-license a work, so a project with no CLA and hundreds of contributors needs to do a lot of legwork to have past contributors to agree to re-license their code. If you own all the copyrights (by authorship or transfer) or have a CLA that grants you generous re-licensing rights, you can re-license the whole project very easily.
A CLA can protect you from copyright infringement performed by your contributors. If Alice contributes some code, but then later it turns out she didn't have the legal write to give you that code. Bob actually wrote that code in a proprietary project and Alice just contributed it to your project without Bob's permission. You're committing copyright infringement by distributing Bob's code, and now Bob wants to sue you. If Alice contractually agreed, via a well-written CLA, that none of her contributions were infringing, you can more easily shift the blame back to her.
Note that a CLA may scare off potential contributors:
They may not wish to assign copyright to you, either because they are uncomfortable with losing their copyright or because they are afraid you may re-license to project to a license they dislike.
They may find the task of reading and signing a legal document onerous and uncomfortable.
You need one if you plan to re license your open source project under a different license. E.g. a commercial license. The agreement gives you full control of the contributed code so that you don't need contributor's permission later if you want to sell commercial closed source license for your open source project