When contributing to a FLOSS project, some companies/organizations require a
Contributor License Agreement (CLA) that is legally binding and gives you the
rights to contribute code but also at the same time allowing the copyright
holder to take your code and take complete credit for it while passing
liability to you.
If they want, they can re-license your code to a non-free one without your
control as they own your work. Canonical is known to be shady with their CLAs
as they leverage the GPL to force you to use free software but then change it
to non-free code since they have all the power to do so as the original
copyright holder. Some say that Upstart may have been more popular and
systemd would have never existed if Canonical was better with contributed
code and them being less draconian with forcing their own copyrights.
On the other hand, projects like Docker and the Linux kernel use the
Developer Certificate of Origin approach
(https://blog.docker.com/2014/01/docker-code-contributions-require-developer-certificate-of-origin/)
where you basically accept the certificate one time and don't have to go
through the legal approach that a CLA may impose. It is simple and out of the
way, but many FLOSS companies don't do this approach so it isn't that
popular.
So from your experiences, what is your preferred approach?