I'll take the contrarian position, for the sake of discussion.<p>> The natural place to do so is by contributing to the upstream<p>> project, something a project should be thankful for.<p>> A CLA replaces this gratitude with an attempt to weaken these<p>> freedoms in a manner which may stand up to the letter of the<p>> license, but is far from the spirit.<p>How is that different than saying "you should be thankful I yelled at you" ?<p>It is in the balance between the upstream and the contributor that the community is created. Neither one gets final say; only by consensus can the community survive.<p>Sometimes a CLA is an appropriate way of shaping that community. I don't believe every CLA is such a good thing, but neither are they all to be shunned.
One important reason to do this is so that the project (if it has a steering board) has standing to sue in the case that the license is violated.<p>This is why I wrote the FSF blanket assignment agreement.
If you trust an OSS project enough to actively contribute to it, it stands to reason that you might also trust the maintainers with the ability to relicense the project as necessary in order to foster its growth and protect it from abuse.