|
|
Subscribe / Log in / New account

Managing expectations with a contributions and credit policy

May 13, 2024

This article was contributed by Valerie Aurora

Maintainers of open-source projects sometimes have disagreements with contributors over how contributions are reviewed, modified, merged, and credited. A written policy describing how contributions are handled can help maintainers set reasonable expectations for potential contributors. In turn, that can make the maintainer's job easier because it can help reduce a source of friction in the project. A guide to help create this kind of policy for a project has recently been developed.

People sometimes have rather different expectations about how open-source projects function with regard to contributions. For example, a recent discussion about how to credit a Linux kernel patch that had two authors attracted more than 600 comments, covering a wide range of opinions from "the original author should have sole credit" to "the original author should get no credit at all". Another kind of disagreement is over which types of contributions are welcome: some projects don't want external contributions, or any new features, but contributors keep sending them anyway.

In the absence of a written policy, contributors will make assumptions about the way a project operates—and may start an argument if they don't get the expected response. A written policy describing how contributions are processed and credited can prevent conflicts from even starting. To help maintainers create their own policies, I co-authored a credits and contribution policy development guide with Maria Matějka, Martin Winter, Marcos Sanz, and other members of the RIPE Open Source Working Group.

Coverage

A contributions and credit policy is most useful when it focuses on areas where maintainers and contributors frequently have different, incompatible expectations, such as: what contributions are welcome, how reviews and changes will be handled, and how credit will be assigned. A policy can also include step-by-step instructions for maintainers and contributors on how to handle complicated situations, such as when a contributor won't make requested changes.

A policy can and should cover all kinds of contributions. Melissa Mendonça, a maintainer for NumPy, SciPy, and napari, said: "Often, things like docs, community, design work are not credited as contributions in the usual sense (i.e., don't give you green squares on GitHub)." A policy can help surface these contributions and create a standard process for acknowledging them.

A policy can help resolve three common dilemmas: assigning credit for multiple direct contributors, revising contributions, and attracting the right contributions.

Deciding on who deserves credit for a work is a difficult and unsolved philosophical question. Practically speaking, people assign credit for many reasons, such as rewarding people for contributing, establishing ownership of intellectual property, or tracking down the source of bugs or backdoors.

As the authors of the policy development guide, we took a practical approach to this question with our own contributions and credit policy. We asked ourselves what kind of behaviors we wanted to encourage in our project, and then assigned credit in ways that make those outcomes more likely. Since we want to attract new contributors, we give primary author credit to the new contributor even if a maintainer had to completely rewrite the contribution. Other projects can make similarly pragmatic decisions without solving the general problem of who gets credit.

Sometimes people will try to take advantage of a formal credit policy. Mendonça says that credit for open-source work is "always a system that you can game (for example, making just enough contributions to get a certain credit/position and then moving on)". However, she says that she is "willing to err on the side of giving credit", and take corrective action afterward. Any policy can have an explicit exception for the maintainer to take whatever action they think necessary.

Multi-contributor credit

Some policies for assigning credit are easy to implement, such as the current de facto policy for many projects: "whoever merges the code decides who gets credit". However, for more complex credit policies, some difficult situations quickly arise. Matějka, team leader for the BIRD routing daemon (and a co-author of the policy guide) said:

We sometimes get contributions with good ideas and poor quality. It's always a discussion how much the specific patch is more an idea (to be thanked for in the commit message) or a patch (where we keep the author but add a note that it was updated by the committer).
Conversely, credit for a multi-author contribution can also turn into blame; if the original author cannot review the change, crediting the changes to them can end up blaming them for the editor's mistakes. Solving complicated questions of credit can use hours of a maintainer's time or result in a contribution hanging in limbo for months. A standard policy lets maintainers decide how to handle these situations once and then simply refer to the policy in the future.

Many contributions need some revision before they can be merged into the main project. This can go wrong in many ways: maybe no one has time to review, contributors don't respond to requests, or the contribution no longer merges by the time it is approved. A policy can help with these situations in two ways: it can give the maintainer a playbook for how to handle difficult situations (e.g., after two weeks of no response, make the edits and merge the contribution), and it can give contributors guidelines for when to ping the maintainers (e.g., after two weeks of no response, email the mailing list again).

Attracting the right contributions

Many people assume that "open source" means "open to outside contributions and willing to mentor new contributors". In reality, some projects don't want new contributors or features, others will accept outside contributions but only after they have been totally rewritten, and only some maintainers have the time and interest to mentor new contributors. An explicit policy about what contributions are desired helps maintainers avoid conflict from would-be contributors. It also helps both potential contributors and potential users decide whether they want to depend on a project with that particular contribution policy.

One of my early open-source contributions was guided by a contributions policy of sorts. The xjack screensaver prints "All work and no play makes Jack a dull boy" over and over, with a variety of mistakes and typos, inspired by a scene in The Shining. A comment in the source code tells would-be contributors not to bother sending in a patch to change the words it prints. However, while I was doing exactly that, by changing it to print "All work and no play makes Val a dull girl", I found a bug in the code that generated typos. I sent in a patch to fix that bug, which was merged (without credit).

Policy resources

The credits and contribution policy development guide includes several variations on each section of the policy, as well as a list of policies in use by open-source projects. We request (but do not require) giving the authors credit on any derivative work. The policy guide has its own contributions and credit policy and new contributors are welcome. Currently we are especially interested in additional examples of choices for each section of the policy, as well as links to existing policies.


Index entries for this article
GuestArticlesAurora, Valerie


to post comments

Managing expectations with a contributions and credit policy

Posted May 13, 2024 17:26 UTC (Mon) by NightMonkey (subscriber, #23051) [Link] (4 responses)

One of my early open-source contributions was guided by a contributions policy of sorts. The xjack screensaver prints "All work and no play makes Jack a dull boy" over and over, with a variety of mistakes and typos, inspired by a scene in The Shining. A comment in the source code tells would-be contributors not to bother sending in a patch to change the words it prints. However, while I was doing exactly that, by changing it to print "All work and no play makes Val a dull girl", I found a bug in the code that generated typos. I sent in a patch to fix that bug, which was merged (without credit).

That kind of thing can sting, and is very discouraging in my personal experience. I hope the project makes amends, if this is was the case. Do you have the commits of the code you wrote? I'm glad that you didn't let it stop you from participating in Open Source projects.

Managing expectations with a contributions and credit policy

Posted May 13, 2024 18:39 UTC (Mon) by jwarnica (subscriber, #27492) [Link]

JWZ mostly only sells beer now, though came to fame dealing with patch submissions being rejected for, er... reasons.

On the other hand, he is arguably personally responsible for Mozilla being open sourced, so we can cut him some slack. And on the point of his very personal screensaver project, in particular, it takes little effort to realize it is a very personal project; there isn't even a public git repo, desires to make it "better" by modernizing it are met with contempt.

It wasn't quite the authors point, but sometimes very valuable things, things very valuable to the community, are built for very personal reasons, which could be not ever dealing with idiots while gifting the world. xsreensaver has never pretended to be anything but what it is, let alone a nurturing community.

I also don't think it was the authors point that they were personally expecting anything different.

Managing expectations with a contributions and credit policy

Posted May 15, 2024 18:41 UTC (Wed) by vaurora (guest, #38407) [Link] (2 responses)

It's funny, I did not even realize I had neither received nor expected credit for that tiny xscreensaver bug fix until I wrote the third draft of this article. As another commenter said, it was clear that outside contributions were neither solicited nor credited, so my expectations for receiving credit were accurately set to "none." I just was excited that I had found and fixed a real bug in software that I and my friends used all the time. (Because I'm like that, I also liked that I had found it while doing something the creator despised.)

Managing expectations with a contributions and credit policy

Posted May 17, 2024 6:42 UTC (Fri) by vaurora (guest, #38407) [Link]

Oops, I should be clear: entire new hacks in xscreensaver are credited with the author's name in the source file, but afaict no other named credit is given.

Managing expectations with a contributions and credit policy

Posted Jul 3, 2024 22:39 UTC (Wed) by Hi-Angel (guest, #110915) [Link]

It's cool to be able to have such attitude. I can only have it when I'm being paid for contributions (which is almost never) — in that case I don't care if I won't be mentioned at all, I just like that my commits improve something Linuxish. But when I spend my personal time on the commit, I usually want to have at least something off of my contributions.

Another notorious project where maintainer always does that kind of stuff is the accessibility plugin for programmers called "emacspeak". The maintainer always just takes the credit for the commits and outright ignores any kind of complaints, so after having a few patches to the project I stopped contributing there. But if I was paid by someone for the commits, I think would let it pass.

Managing expectations with a contributions and credit policy

Posted May 13, 2024 19:47 UTC (Mon) by dkg (subscriber, #55359) [Link]

Thanks for this article! This kind of meta-programming topic (how do we formally organize the social work that is required to build a functional, maintainable ecosystem) isn't as widely discussed as it should be here on LWN. I'd love to see more articles like this, with pointers to good examples.

I hope folks involved with any project that has such a contributions and credit policy (even a light-touch one, as long as it is thoughtful) will send a pull request to get it added to the list of known policies) so that the community can have a wider view of existing formalized practices.

Managing expectations with a contributions and credit policy

Posted May 13, 2024 20:22 UTC (Mon) by Wol (subscriber, #4433) [Link] (1 responses)

I guess this sort-of complies with a "contributions and credits policy" - guidelines of how to behave on a wiki ...

https://raid.wiki.kernel.org/index.php/Editing_guidelines

And I have reverted the odd change or rewritten wholesale stuff that didn't comply!

Cheers,
Wol

Managing expectations with a contributions and credit policy

Posted May 15, 2024 18:33 UTC (Wed) by vaurora (guest, #38407) [Link]

Style guides are important and useful! This project is trying to focus more on the process of handling contributions than the style of the initial submission. But it is useful for the same reason as a style guide: you set expectations once and don't have to spend time doing it again.

Managing expectations with a contributions and credit policy

Posted May 16, 2024 4:59 UTC (Thu) by NYKevin (subscriber, #129325) [Link]

I must admit that I find the entire concept of "accept somebody else's patches, but don't give credit for them" rather baffling.

Maybe it's because I work for a ruthlessly cold-blooded faceless corporation, where the company owns everything and managers want to know who did what.

Managing expectations with a contributions and credit policy

Posted May 16, 2024 7:11 UTC (Thu) by jezuch (subscriber, #52988) [Link] (3 responses)

There is this semi-standard "tag" in git (though there is no formal concept of a tag in git) which is "Co-Authored-By:". At least GitHub can recognize it and we use it pretty often at $DAYJOB to give credit where appropriate. I'm not sure it gives the coveted "green box" but it should :)

Managing expectations with a contributions and credit policy

Posted May 16, 2024 11:34 UTC (Thu) by vaurora (guest, #38407) [Link] (2 responses)

I wrote a long discussion of the subtleties of the "Co-authored-by:" tag but ended up cutting it.

Short version: "Co-authored-by:" is an important and critical tool for giving secondary credit. Most people use it to give credit to someone who wrote a small part of a larger contribution that can't be contributed separately and otherwise would not have gotten formal credit at all. But I've seen people who make a habit of slightly editing almost every PR, making themselves the primary author of the commit, and making it look less bad by booting the primary author to "Co-authored-by:". This is slightly better than maintainers who do this and demote the primary author to "Reported-by:" or "Signed-off-by:", but if it's being used as a plausibly deniable way to usurp credit, it's a net loss IMO.

The difference between primary author and co-author is important: most software, including git itself, chooses to display only the primary author. For example, some IDEs show the git primary author of each line; the co-author only shows up if you look at the entire log message. So a contributor spends 99% of their time seeing the primary author repeated hundreds of times and 1% seeing the co-author scroll by once. I know GitHub has some support for "Co-authored-by:" but it seems a little fiddly.

Another important point is that it's mostly only maintainers who have the power to do this: the contribution shows up with the correct primary author, the maintainer makes some easy changes, decides they deserve primary credit, changes the authorship, and check it in. A contributor can't do the same thing to a maintainer. So misuse of "Co-authored-by:" tends to be solely by maintainers or other gatekeepers, just like other forms of taking credit unfairly.

People will still argue about whether "Co-authored-by:" is significantly different than primary author, but watch what people do: most people prefer and will fight for credit as primary author.

Managing expectations with a contributions and credit policy

Posted May 21, 2024 4:59 UTC (Tue) by jezuch (subscriber, #52988) [Link] (1 responses)

You're right, it's trivial to abuse it and does not mix well with people with inflated egos, or who like to game the system. Maybe I didn't think about it because I work with decent people ;) I'm not sure we have anything much better, though.

FWIW, GitHub will display all authors (and also the committer) on a list of commits in a PR, as icons next to each commit. When you open a particular commit, the primary author is obviously emphasized, though.

Managing expectations with a contributions and credit policy

Posted May 28, 2024 12:31 UTC (Tue) by wiktor (guest, #132450) [Link]

Agreed, that in most cases the problem just doesn't appear if you've got a good team and if you've got a bad team then patch authorship is the smallest of your problems.

As a maintainer I sometimes have to fix the PR of a contributor that disappeared and the PR is in conflict. I usually leave the author but append myself as `Co-authored-by` if the conflict resolution is not trivial or needs further adjustments or code changes (e.g. adding test cases).


Copyright © 2024, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds