Author: Andrew Gerrand adg@golang.org
Last updated: 17 November 2015
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.
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.
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.
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.)
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.
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”):
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).
These are the values to which people in the Go community (“Gophers”) should aspire.
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.
These actions are explicitly forbidden in Go spaces:
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.
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:
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.
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.
Parts of this document were derived from the Code of Conduct documents of the Django, FreeBSD, and Rust projects.
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.
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:
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:
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:
A microaggression:
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:
In this case, the moderators acted in a purely advisory role.
An abrasive newcomer, a pithy response:
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.
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.
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.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.