| # Proposal: A Code of Conduct for the Go community |
| |
| Author: Andrew Gerrand <adg@golang.org> |
| |
| Last updated: 17 November 2015 |
| |
| ## Abstract |
| |
| This proposal specifies a Code of Conduct for the Go community. |
| The code is to be enforced in all project-operated spaces (specified |
| in the Code of Conduct text, below). Other Go-related spaces (forums, |
| events, etc) are encouraged to adopt the code as well. |
| |
| ## Background |
| |
| Since Go’s release over 6 years ago, a sizable community has grown around the |
| language. The golang-nuts mailing list has more than 17k members and receives |
| thousands of posts each month, and there are many major Go conferences each |
| year with thousands of attendees. |
| |
| Today the various Go spaces are moderated by people that are unknown to the |
| public and with no specified policy. It is not clear to the members of these |
| spaces how they are expected to conduct themselves. In the rare cases where |
| people are banned, they are afforded no recourse. |
| |
| For a community of this scale to grow and prosper, it needs guidelines |
| to encourage productive and positive participation, and a process for |
| resolving conflict when it inevitably arises. |
| |
| The community must also grow to survive. An explicit goal of this proposal |
| is to promote cultural diversity within our community and thereby make it more |
| welcoming and inclusive. |
| |
| ## Proposal |
| |
| A Code of Conduct document is added to the “go” repository as |
| `doc/conduct.html`, visible on the web at https://golang.org/conduct. |
| The document is linked prominently from official Go spaces (such as the |
| golang-nuts mailing list). |
| |
| The document text is as follows. |
| |
| --- |
| |
| ### About the Code of Conduct |
| |
| #### Why have a Code of Conduct? |
| |
| Online communities include people from many different backgrounds. |
| The Go contributors are committed to providing a friendly, safe and welcoming |
| environment for all, regardless of age, disability, gender, nationality, race, |
| religion, sexuality, or similar personal characteristic. |
| |
| The first goal of the Code of Conduct is to specify a baseline standard |
| of behavior so that people with different social values and communication |
| styles can talk about Go effectively, productively, and respectfully. |
| |
| The second goal is to provide a mechanism for resolving conflicts in the |
| community when they arise. |
| |
| The third goal of the Code of Conduct is to make our community welcoming to |
| people from different backgrounds. |
| Diversity is critical to the project; for Go to be successful, it needs |
| contributors and users from all backgrounds. |
| (See [Go, Open Source, Community](https://blog.golang.org/open-source).) |
| |
| With that said, a healthy community must allow for disagreement and debate. |
| The Code of Conduct is not a mechanism for people to silence others with whom |
| they disagree. |
| |
| #### Where does the Code of Conduct apply? |
| |
| If you participate in or contribute to the Go ecosystem in any way, |
| you are encouraged to follow the Code of Conduct while doing so. |
| |
| Explicit enforcement of the Code of Conduct applies to the |
| official forums operated by the Go project (“Go spaces”): |
| - The official [GitHub projects](https://github.com/golang/) |
| and [code reviews](https://go-review.googlesource.com/). |
| - The [golang-nuts](https://groups.google.com/group/golang-nuts) and |
| [golang-dev](https://groups.google.com/group/golang-dev) mailing lists. |
| - The #go-nuts IRC channel on Freenode. |
| - The [/r/golang subreddit](https://reddit.com/r/golang). |
| |
| Other Go groups (such as conferences, meetups, and other unofficial forums) are |
| encouraged to adopt this Code of Conduct. Those groups must provide their own |
| moderators and/or working group (see below). |
| |
| ### Gopher values |
| |
| These are the values to which people in the Go community (“Gophers”) should aspire. |
| |
| * Be friendly and welcoming |
| * Be patient |
| * Remember that people have varying communication styles and that not |
| everyone is using their native language. |
| (Meaning and tone can be lost in translation.) |
| * Be thoughtful |
| * Productive communication requires effort. |
| Think about how your words will be interpreted. |
| * Remember that sometimes it is best to refrain entirely from commenting. |
| * Be respectful |
| * In particular, respect differences of opinion. |
| * Be charitable |
| * Interpret the arguments of others in good faith, do not seek to disagree. |
| * When we do disagree, try to understand why. |
| * Avoid destructive behavior: |
| * Derailing: stay on topic; if you want to talk about something else, |
| start a new conversation. |
| * Unconstructive criticism: don't merely decry the current state of affairs; |
| offer—or at least solicit—suggestions as to how things may be improved. |
| * Snarking (pithy, unproductive, sniping comments) |
| * Discussing potentially offensive or sensitive issues; |
| this all too often leads to unnecessary conflict. |
| * Microaggressions: brief and commonplace verbal, behavioral and |
| environmental indignities that communicate hostile, derogatory or negative |
| slights and insults to a person or group. |
| |
| People are complicated. |
| You should expect to be misunderstood and to misunderstand others; |
| when this inevitably occurs, resist the urge to be defensive or assign blame. |
| Try not to take offense where no offense was intended. |
| Give people the benefit of the doubt. |
| Even if the intent was to provoke, do not rise to it. |
| It is the responsibility of *all parties* to de-escalate conflict when it arises. |
| |
| ### Unwelcome behavior |
| |
| These actions are explicitly forbidden in Go spaces: |
| |
| * Insulting, demeaning, hateful, or threatening remarks. |
| * Discrimination based on age, disability, gender, nationality, race, |
| religion, sexuality, or similar personal characteristic. |
| * Bullying or systematic harassment. |
| * Unwelcome sexual advances. |
| * Incitement to any of these. |
| |
| ### Moderation |
| |
| The Go spaces are not free speech venues; they are for discussion about Go. |
| These spaces have moderators. |
| The goal of the moderators is to facilitate civil discussion about Go. |
| |
| When using the official Go spaces you should act in the spirit of the “Gopher |
| values”. |
| If you conduct yourself in a way that is explicitly forbidden by the CoC, |
| you will be warned and asked to stop. |
| If you do not stop, you will be removed from our community spaces temporarily. |
| Repeated, wilful breaches of the CoC will result in a permanent ban. |
| |
| Moderators are held to a higher standard than other community members. |
| If a moderator creates an inappropriate situation, they should expect less |
| leeway than others, and should expect to be removed from their position if they |
| cannot adhere to the CoC. |
| |
| Complaints about moderator actions must be handled using the reporting process |
| below. |
| |
| ### Reporting issues |
| |
| The Code of Conduct Working Group is a group of people that represent the Go |
| community. They are responsible for handling conduct-related issues. |
| Their purpose is to de-escalate conflicts and try to resolve issues to the |
| satisfaction of all parties. They are: |
| |
| * Aditya Mukerjee <dev@chimeracoder.net> |
| * Andrew Gerrand <adg@golang.org> |
| * Dave Cheney <dave@cheney.net> |
| * Jason Buberel <jbuberel@google.com> |
| * Peggy Li <peggyli.224@gmail.com> |
| * Sarah Adams <sadams.codes@gmail.com> |
| * Steve Francia <steve.francia@gmail.com> |
| * Verónica López <gveronicalg@gmail.com> |
| |
| If you encounter a conduct-related issue, you should report it to the |
| Working Group using the process described below. |
| **Do not** post about the issue publicly or try to rally sentiment against a |
| particular individual or group. |
| |
| * Mail [conduct@golang.org](mailto:conduct@golang.org) or |
| [submit an anonymous report](https://golang.org/s/conduct-report). |
| * Your message will reach the Working Group. |
| * Reports are confidential within the Working Group. |
| * Should you choose to remain anonymous then the Working Group cannot |
| notify you of the outcome of your report. |
| * You may contact a member of the group directly if you do not feel |
| comfortable contacting the group as a whole. That member will then raise |
| the issue with the Working Group as a whole, preserving the privacy of the |
| reporter (if desired). |
| * If your report concerns a member of the Working Group they will be recused |
| from Working Group discussions of the report. |
| * The Working Group will strive to handle reports with discretion and |
| sensitivity, to protect the privacy of the involved parties, |
| and to avoid conflicts of interest. |
| * You should receive a response within 48 hours (likely sooner). |
| (Should you choose to contact a single Working Group member, |
| it may take longer to receive a response.) |
| * The Working Group will meet to review the incident and determine what happened. |
| * With the permission of person reporting the incident, the Working Group |
| may reach out to other community members for more context. |
| * The Working Group will reach a decision as to how to act. These may include: |
| * Nothing. |
| * A request for a private or public apology. |
| * A private or public warning. |
| * An imposed vacation (for instance, asking someone to abstain for a week |
| from a mailing list or IRC). |
| * A permanent or temporary ban from some or all Go spaces. |
| * The Working Group will reach out to the original reporter to let them know |
| the decision. |
| * Appeals to the decision may be made to the Working Group, |
| or to any of its members directly. |
| |
| **Note that the goal of the Code of Conduct and the Working Group is to resolve |
| conflicts in the most harmonious way possible.** |
| We hope that in most cases issues may be resolved through polite discussion and |
| mutual agreement. |
| Bannings and other forceful measures are to be employed only as a last resort. |
| |
| Changes to the Code of Conduct (including to the members of the Working Group) |
| should be proposed using the |
| [change proposal process](https://golang.org/s/proposal-process). |
| |
| ### Summary |
| |
| * Treat everyone with respect and kindness. |
| * Be thoughtful in how you communicate. |
| * Don’t be destructive or inflammatory. |
| * If you encounter an issue, please mail conduct@golang.org. |
| |
| #### Acknowledgements |
| |
| Parts of this document were derived from the Code of Conduct documents of the |
| Django, FreeBSD, and Rust projects. |
| |
| --- |
| |
| ## Rationale |
| |
| *Do we need a Code of Conduct?* |
| Some community members have argued that people should be trusted to do the |
| right thing, or simply ignored when they do not. |
| To address the former: there are varying definitions of the “right thing”; a |
| Code of Conduct specifies what that means. |
| To address the latter: if we allow destructive forms of communication (those |
| that go against the "Gopher Values") to flourish, we will be left only with |
| people who enjoy that kind of communication. |
| |
| The CoC also makes moderation processes more transparent: the various Go spaces |
| have always been moderated spaces, but the rules were never written down. |
| It seems better to be explicit about the behavior we expect in those spaces. |
| |
| *Why write our own?* |
| There are many existing Codes of Conduct to choose from, |
| so we could have saved some time by simply re-using an existing one. |
| This document does draw heavily on existing documents such as the Rust, |
| FreeBSD, and Django Codes of Conduct, but it includes some original material |
| too. |
| I opted for this approach to specifically address the needs of the Go community |
| as I understand them. |
| |
| *Is behavior outside Go spaces covered by this CoC?* |
| An earlier draft of this proposal included a clause that behavior outside Go |
| spaces may affect one’s ability to participate within them. After much |
| community feedback, I removed the clause. It was seen as unnecessarily |
| overreaching and as providing an opportunity for malicious people to oust |
| community members for their behavior unrelated to Go. |
| |
| *The “Gopher Values” are not my values. I consider myself part of the Go |
| community; shouldn’t the CoC represent me, too?* |
| Members of the Go community are from many different cultures; it would be |
| impossible to represent the full range of social norms in a single document. |
| Instead, the values described by the CoC are designed to reflect the lowest |
| common denominator of behavior necessary for civil discourse. |
| Community members (including the author of this document) whose norms may be |
| regarded by others as impolite or aggressive are expected to be self-aware and |
| thoughtful in how they communicate to avoid creating conflict. |
| |
| *The Code of Conduct document seems unnecessarily long. |
| Can’t it just be a version of the Golden Rule?* |
| The Go community comprises thousands of people from all over the world; it |
| seems unrealistic to assume that those individuals should have compatible ideas |
| about how to get along with each other. |
| By describing the kind of behavior to which one should aspire, and those |
| behaviors that are explicitly forbidden, we at least give all community members |
| an idea of what is expected of them. |
| |
| Note that *this* document is a proposal document; the Code of Conduct itself is |
| a subset of the proposal document and is about 1,200 words long, including the |
| description of the reporting process. The “Gopher Values” section—the meat of |
| the thing—is under 300 words. |
| |
| ### Examples of CoC issues and their resolutions |
| |
| These fictional examples show how community members and the working group might |
| use the Code of Conduct’s guidelines to resolve a variety of issues. In each |
| case, the goal of the intervention is to raise the level of discourse and to |
| make people feel welcome in our community spaces. |
| |
| *Rude and unwelcoming behavior:* |
| |
| * B and C are posting back and forth on a golang-nuts thread. |
| * D enters the conversation and proposes an alternative solution. |
| * B and C ignore D and continue their discussion. |
| * D re-articulates their point in a different way. |
| * B responds to D by asking them to "butt out". |
| * C emails B privately, noting that B's reaction was uncalled-for, and suggests that B apologize to D. |
| * B replies that they have nothing to apologize for. |
| * C reports the incident to the CoC Working Group. |
| * E, a member of the working group, contacts B and C separately to get details on the incident. |
| * E asks B to apologize for being unwelcoming and rude, and notifies C that this action was taken. |
| * B acknowledges their mistake and apologizes to D. |
| * The issue is resolved. |
| |
| In this case, B could have avoided conflict by just saying nothing, or by |
| responding politely to D’s messages. It’s not OK to be rude or exclusive in the |
| public forum. (If B and C want to discuss things privately, they should take it |
| off-list.) |
| |
| *A classic troll:* |
| |
| * B repeatedly posts about a particular issue, raising the issue on unrelated |
| threads, as well as starting many redundant threads. |
| * The forum moderators warn B to stop, as derailing threads and spamming are |
| against the CoC. |
| * B refuses and becomes belligerent, making insulting remarks about the |
| moderators and other members of the community. |
| * The moderators ban B from the forum for 10 days, and post a message explaining this. |
| * The issue is resolved. |
| |
| In this case, the goal is for the user to come back after a while and hopefully |
| be more productive in the future. We don’t want to ban them forever; it is |
| important to keep people with unpopular opinions around to prevent the |
| community from becoming an echo chamber. |
| |
| *Condescending behavior:* |
| |
| * B posts a message to /r/golang describing the approach they're planning to |
| take for wrapping http.HandlerFunc and asking for feedback. |
| * C replies to the message "Why don’t you just do it the obvious way?" with an |
| explanation of an alternate approach. |
| * D, a bystander to this exchange, replies “That may have been obvious to you, |
| but you shouldn’t assume that it’s obvious to just anyone.” |
| * C replies “Well I guess you’re an idiot too, then.” |
| * E, a moderator, observes this interaction and sends a message to C to tell |
| them their behavior is unacceptable. |
| * C insists there is nothing wrong with their behavior. |
| * E replies publicly to C on the original thread to say “Condescension and |
| personal insults are not appropriate in this forum. Please observe the Code |
| of Conduct when posting here.” |
| * The issue is resolved. |
| |
| *A microaggression:* |
| |
| * B has a typically female name and posts to a mailing list to announce a |
| Go-to-Forth compiler they wrote. |
| * C replies “I am amazed to see a woman doing such great work. Nice job!” |
| * B writes to the CoC Working Group to say “I felt really deflated for my work |
| to be seen as impressive just because I’m a woman. Can you say something to C |
| for me?” |
| * D, a member of the working group, reaches out to C to explain how comments |
| like that can make women feel out of place in technical communities. |
| * Recognizing the hurt C has caused, C sends an email to B to apologise. |
| * The issue is resolved. |
| |
| In this case, we see the a working group member acting as a mediator for |
| someone who didn’t feel comfortable confronting someone directly. |
| The working group member D contacted C in private to discuss the issue, |
| to avoid bringing shame to C in public, since C apparently meant no harm. |
| |
| *Impatient behavior:* |
| |
| * B asks a seemingly simple question on the mailing list. |
| * C replies back with an answer and an additional comment to |
| "RTFM before you ask simple questions!!!" |
| * B points out the small detail C overlooked in the question to clarify the |
| complexity. |
| * C replies back "Ack! Sorry, I actually don't know." |
| * E enters the conversation and criticizes C for his behavior in his |
| original reply, raising the issue further with a moderator. |
| * D, a moderator, replies to the list to ask C to be less impatient in their responses, |
| suggesting they could have instead said something like "The docs cover this." |
| * The issue is resolved. |
| |
| In this case, the moderators acted in a purely advisory role. |
| |
| *An abrasive newcomer, a pithy response:* |
| |
| * B makes their first post to golang-nuts: |
| "What's the deal with Go's error handling mechanism? It's brain dead and stupid." |
| * C, a forum regular, replies “Oh no, not another one.” |
| * D, another regular replies (compensating for C) “Hi, welcome to the list. As |
| I’m sure you can appreciate, this topic has come up many times before. Here |
| are some links to previous discussions and articles that discuss the topic. |
| Let us know if you have any questions that aren’t covered by those threads. |
| Thanks.” |
| * E, a moderator, reaches out to C off list to ask them to refrain from this |
| kind of pithy, unhelpful commentary in the future. |
| * There is no need for further action. |
| |
| In this case, we see a community member (D) try to steer the discussion in a |
| productive direction, while a moderator tries to prevent future negativity |
| without creating a public drama. |
| |
| ## Compatibility |
| |
| Some people feel stifled by the general concept of a Code of Conduct. |
| Others may find explicit efforts to improve diversity in our community |
| unpalatable for various reasons. |
| While a major goal of this proposal is to make the community more inclusive, |
| this does by definition exclude people that cannot abide by the goals and |
| principles of the code. |
| I see this as a regrettable but necessary and inescapable design tradeoff. |
| The implementation of the code may cause us to lose a few people, but we stand |
| to gain much more. |
| |
| ## Implementation |
| |
| I (Andrew Gerrand) will submit the Code of Conduct text to the main Go |
| repository, so that it is available at the URL https://golang.org/conduct. |
| I will also set up the conduct@golang.org email address and the anonymous web |
| form. |
| |
| Then I will link the document prominently from these places: |
| |
| * `README.md` and `CONTRIBUTING.md` files in the official Go repositories. |
| * The golang-nuts and golang-dev mailing list welcome messages. |
| * The #go-nuts IRC channel topic. |
| * The /r/golang subreddit sidebar. |
| |
| I will work with the existing moderators of these spaces to implement the Code |
| of Conduct in those spaces, recruiting additional moderators where necessary. |
| |
| Operators of unofficial Go events and forums are encouraged to adopt this Code |
| of Conduct, so that our community members can enjoy a consistent experience |
| across venues. |
| |
| ## Open issues |
| |
| * The Working Group does not yet include anyone from Asia, Europe, or Africa. |
| In particular, Europe and China are home to a large swath of Go users, so it |
| would be valuable to include some people from those areas in the working |
| group. (We have some volunteers from Europe already.) |
| * The proposed process does not "scale down" to projects of a single maintainer. |
| Future revisions should permit a lightweight version of the process, but that |
| is considered outside the scope of this document. |
| |