OCaml Community Code of Conduct

Starting at specifically with the following message, the thread of the conversation was about the wording of the list and specifically the use of “sex characteristics” in that list.

If you are not interested in discussing wording then an answer that’s more conducive to an interesting conversation would be along the lines of “this was just an example, my main point is …” to recenter the topic.

My understanding is that the reason to explicitly enumerate particular groups or characteristics in this way is that we know that they have been historically, and are still, subject to pervasive and systematic mistreatment. We don’t enumerate every possible reason anyone could possible be mistreated, because that is infeasible and unnecessary. And we don’t leave it implicit, because, while it would be nice to think that it is “obvious” how to treat everyone fairly and with respect, history and current reality proves that it is not obvious to everyone at all times. Making it explicit helps alert us to be careful and especially considerate around known targets, but doesn’t anticipate every possible target.

That said, what would you think if the first sentence were tweaked to something like:

We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. This list of protected groups is non-exhaustive.

afaiu, the Contributor Covenant, and so this derivation, sets a very low-bar, insofar as it is pretty narrowly focused on opposing harassment and active mistreatment and encouraging kindness, inclusion, and compassion. It does not, afaict, explicitly address the critical issues of accessibility or inadvertent exclusion (which is not the same as “discrimination”, btw). Adding in commitments to prioritize and improve accessibility as a later supplement or extension of the proposed CoC seems well worth considering IMO!

However, I think you may be missing some of the spirit and the letter of the CoC in your reply. E.g.,

The CoC says “We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone”. It doesn’t say anything like “every organism, regardless of whether or not it has sense organs or can think is entitled to write OCaml and communicate on our forums”. So, for example, the CoC entails that if a 6 month old were somehow included in our community (maybe they were brought to a conference?), they should be protected from harassment. It doesn’t say we are obligated to transcribe their baby talk into the forum :wink:

5 Likes

The simpler the better in this case (I can see why in a law or corporate policy you need to be very explicit), and if we can adopt a CoC that another project has already adopted then that is best (it prevents having to try to find out why this project’s CoC would be different from another one that someone might already be a part of), but we shouldn’t necessarily just copy what everyone else is doing either.

I like the simplicity of the Ruby CoC that @yallop proposed (OCaml Community Code of Conduct - #9 by yallop), e.g. it has this part which seems to be missing from the current one:

When interpreting the words and actions of others, participants should always assume good intentions.

E.g. if someone is constantly pointing out bugs in your code in a pull-request, even though that may be considered a derogatory comment on the code (reflecting the low quality of it) it is not necessarily an attack on you as a person, and should first be interpreted for what it is (a review comment on code, i.e. constructive criticism) rather than intentional attacks.

They way I interpret the intention of that long list is:
everyone, regardless whether they are the same or different from you, whether due to an innate characteristic, a consequence of their environment, a choice they did or not make, or whether you agree or disagree with them.
Obviously if someone is trolling/harassing everyone (regardless of ) that is not acceptable either.

For the avoidance of doubt, I’m not suggesting to include this in the CoC, my preference here would be simplicity, I think “everyone” should suffice, but if that is not sufficient perhaps something like “everyone, regardless whether they are the same or different from you” should be enough for most purposes.
It still calls out the importance of considering the possibility that not everyone is the same as you.
It’d be good if we could find a CoC that is simple enough, to avoid inventing our own, so far the Ruby one seems to fit that purpose.

The list is heavily biased towards innate characteristics (perhaps because historically that has been mostly the target of harassment), and lists very few characteristics that are due to choices someone has made. If I spend some time thinking about it I can probably come up with ways to extend that list (I’m not suggesting we do that!), which just shows that someone may feel the list doesn’t apply to them because they are different in a way that is not reflected by any of the adjectives listed there.
E.g. country of residence is missing (nationality is present, but that isn’t necessarily the same), political choice and belief is missing, medical condition is missing (which isn’t the same as disability), and probably more.

Finally it looks like the original contributor covenant is licensed under CC BY 4.0 license, which requires giving a link to the original work, which itself contains a link to a movement that you may or may not agree with (it has been pointed out in this thread already that there are some reservations,concerns about that, I haven’t heard of it so far, and haven’t formed an opinion myself yet).
CC BY 4.0 Legal Code | Attribution 4.0 International | Creative Commons section 3a Attribution “a URI or hyperlink to the Licensed Material to the extent reasonably practicable;”

2 Likes

I read the CoC in entirety because it seems like a legal document that affects much of the activity I’ve been doing in OCaml. The last part (the last FAQ) especially made me pause:

Who’s the OCaml Code of Conduct committee made up of?

It’s made up of people from the OCaml community, who rotate from time to time. The composition of the committee strives to be as balanced as possible in terms of diversity, including race, gender, nationality, country of residence etc.

Just because I’m black I’d get a leg up on the OCaml CoC committee? I can’t read that any other way than a stark racial/sexual/etc preferential treatment, and it is tucked way at the bottom where few would read. Speaking personally, I do not want to be judged by the color of my skin. And speaking from a belief that each of us is valuable and worth the same amount (at least $0.5bil), I fail to see why I’d pledge to codify the unequal treatment of people.

Okay, I really don’t want to rain on individual well-intentioned efforts. Can I suggest:

  • reducing the bulk of the existing text so it is focused mainly on anti-harassment (which has been suggested by others already)
  • for all the non-harassment issues, ask for passive alignment (ex. “We are aligned with …” or even “We want …”) rather than active “We pledge …”. I give pledges to my wife and family, to my bank and to my employer, and sometimes I pledge to pay back Girl Guide Caramel deLite cookies, but that’s basically it! (Implicit in what I am saying is that you already have the authority to kick people off boards and mailing lists and to remove commits, and you already have a publicly known committee that will decide; okay, why ask for the pledge?)
  • add an overarching goal that ties together the “Our Standards” section. For example, “We want at least 80% of people on Earth to have the opportunity to engage in honest, fruitful discussion with the OCaml community. To that end, our standards include anti-harassment and respecting non-OCaml-ers, and we have tenets that favor giving constructive technical feedback in rejected PRs and committing to standards after robust debate, and we have specific examples of subgoals we ask that you are aligned with. Those include a) getting OCaml onto the devices in common use world-wide by people today: mobile phones, Chromebooks and Windows PCs and b) getting OCaml documentation into widely used languages like Chinese, Hindi and Spanish.” That example was all made up; I’m sure we can do better.

Thanks for the patience, Jonah

14 Likes

I was not particularly disturbed by the fact that the current text lists specific categories of people, for the reasons mentioned by @shonfeder. After all, many countries have laws against hate speech, discrimination or violence that mention explicitly characteristics such as ethnicity or sexual orientation. That being said, I would not be shocked if the list was replaced by a variant of “everyone”, so long as it is made clear that it is not acceptable to target someone on a personal basis, in a way that is not relevant to the OCaml community.

I agree that if the list were to be kept, “beliefs” seems missing.

Prior art includes what we have for the ocaml-community GitHub organization. I find it very reasonable. The relevant discussion can be consulted at Code of conduct? · Issue #24 · ocaml-community/meta · GitHub.

I read the discussion and thought about it, and this is how I feel. I’m not against the concept of a Code of Conduct in general, but I feel very uncomfortable about adopting one based on the Contributor Covenant. It’s my understanding that the author of the Contributor Covenant used strongarm tactics to promote her document. Although many other software projects adopted the Contributor Covenant, I don’t want OCaml to further the legitimacy of a code of conduct that was promoted partially through bullying tactics.

About the wording of “sex” versus “sex characteristics,” I don’t read much into it. A document is just a meaningless piece of paper (er, sequence of bytes); what matters is people and institutions. The PRC constitution guarantees free speech but anyone with common sense knows that the people in power in the PRC don’t respect these rights. Likewise, whether the CoC says “sex” or “sex characteristics,” if the enforcers or people in power wanted to give a free pass to certain violations or not enforce rules uniformly, they would find a way.

I’m not bothered that the document lists specific protected classes of people. Categories like ethnicity and religion have been dividing lines through which people have been oppressed in history. I’ve seen worse where only certain ethnicities or other groups are protected, while others are excluded, and this document isn’t an example of that.

What I am bothered by is that this CoC seemingly came out of nowhere. Who decided to create a CoC committee, and who decided who could join? Are they endorsed by Inria? From where do they derive their power over participants in OCaml projects, if the broader people of the OCaml community never consented to this governance? I wish that the broader community had gotten an earlier heads-up and request for comments before the CoC was drafted and posted, so stakeholders could provide feedback. I suppose that’s what you’re doing now, but I wish that it had been done before a committee was formed and CoC was written.

Instead of a few people unilaterally adapting a CoC from the Contributor Covenant, I think that people in the OCaml community could work together to figure out what we want a CoC to look like, and draft one, with a much greater participatory process.

4 Likes

People seem focused on the current text but @yallop’s proposal was little discussed.

Is there any evidence that a simple text like @yallop proposes didn’t work where it was applied (postgresql and ruby AFAIU) ?

By avoiding lists and personal characterizations it seems it manages to side-step a lot of the definitional issues and bias (purported or perceived) that are being discussed here.

Personally I find it a much more welcoming text[1] and, I suspect, one that is more likely to be read from start to finish. It feels like ockham’s code of conduct.


  1. Maybe the use of “guideline” rather than “code” is part of that, it feels more humane and empathetic. ↩︎

16 Likes

Yes! More precisely, it’s the OCaml Software Foundation that asked Sudha and her group to draft a Code of Conduct and, once accepted by the community, to act as the enforcement committee. The idea (due to Gabriel Scherer) was to have a committee composed of respected, representative members of the OCaml community, but not in a position of power (unlike me, Anil, Gabriel, for example).

I’m grateful to Sudha, Louis, Marcello, Raja, Simon and Sonja for having accepted this task and for the proposed Code of Conduct. It’s good to see the text discussed here, but please keep the discussion civil and constructive! We’re not lawyers arguing in court on the fine points of a contract; we’re members of a community that is trying to self-organize better.

26 Likes

The efforts to create a CoC have been ongoing since 2017, and the OCaml Software Foundation has explicitly endorsed it. I’ve not been involved with any of the selection and, as an existing long-standing moderator of many of the ocaml.org services, chose to step back from any discussions about the specifics, with the aim of handing off my responsibilities.

I’m greatly appreciative of the hard work the committee is putting into it, and am pleased to note that it consists of several core maintainers within the community: of the opam package manager, the opam repository, the website, mentors in Outreachy, multicore OCaml developers, and long-standing package contributors. The committee is not an exhaustive representation of course, but it is well balanced and credible, and of a suitable size to aggregate the excellent feedback in this thread and come to a decision.

Please do keep the thoughtful feedback coming here and (if you prefer) directly to them, but please try to avoid being distracted by calling the legitimacy of the effort into question. The committee has my full support and appreciation!

11 Likes

That was definitely not the intent. The diversity of the enforcement committee tries to match the diversity of the OCaml community, and to make the committee more easily approachable by persons who would like to report a misconduct. A woman who’s experiencing sexual harassment might prefer to discuss with a female member of the committee; a native French speaker, with a French-speaking member; a PhD student in the USA, with someone who is familiar with American universities; and a software developer in India with someone who knows how the Indian software industry operates. A committee composed exclusively of aging male French or British academics would not work.

20 Likes

I had intended for my feedback to be civil and constructive, and didn’t realize that other people would see my comment as devaluing the efforts of the committee members. I apologize for calling into question the committee’s authority, then. I was confused on where the committee came from, but I respect and trust Inria’s development of OCaml, and if the committee has the endorsement of Inria, some of my worries about the CoC are assuaged. I also believe that everyone here so far, both advocates of the Code of Conduct and the critics, has been posting in good faith and just wants the best for OCaml.

My predominant concern is the connection to the Contributor Covenant. I feel very uncomfortable with the Contributor Covenant because of the strongarm manner in which the author promoted it, and for that reason, I don’t want OCaml to further the Contributor Covenant’s popularity. I second @yallop’s and @dbuenzli’s suggestions of adapting a different Code of Conduct.

Personally I don’t think that’s a good reason for rejecting the text that was proposed initially. I don’t know what happened with Contributor Covenant’s author, I have absolutely no interest in knowing and I highly doubt it’s interesting to our discussion.

I think it’s better to focus on the actual text(s) being proposed for themselves, what they say, what they imply, how members of the community understand them and how they feel about their meaning.

7 Likes

I’m assuming the CoC is needed as the community grows and events like community gatherings or conferences take place. Setting basic ground rules and punishments for disobedience of those rules makes totally sense. What I do not like, at all, is the pledge in the beginning of the presented document.

It is basically two sentences. One is overly long and confusing. It also strikes me as a lazy attempt at a code of conduct. It’s too short, too verbose.

I’d instead propose the following pledge:

  1. Human dignity shall be inviolable. To respect and protect it shall be the duty of the members of this community.

  2. People therefore acknowledge inviolable and inalienable human rights as the basis of this community, of peace and of justice in the world.

  3. All persons shall be equal before anyone representing the OCaml community.

  4. People shall have the equal right to participation.

  5. No person shall be favoured or disfavoured because of sex, gender, faith, origin or their opinions. No person shall be disfavoured because of disability.

  6. The committee shall promote the actual implementation of this pledge and take steps to eliminate disadvantages that now exist.

It’s a remix of the current CoC pledge and the German Grundgesetz (constitution).

Points 1 and 2 set the ground rules. Any member of this community has its individual right to their dignity and all members of this community have to accept that.

Point 3 basically says, anyone speaking for or representing the community has to honor all people as equal. This would include committees that select entries for conferences, for example.

Point 4 says anyone can participate and we will not weigh their contribution based on anything stated in point 5. Instead we can focus on the contribution itself.

Point 6 shall be the codex for the committee.

The standards section of the current proposal is obviously in line with my proposed pledge.

I think this CoC makes it clear that any person in the community is welcome and accepted as an equal part. It especially rules out any disfavouring a contribution to the community or its projects based on anything else than the actual merit of said contribution.

3 Likes

I personally have no knowledge of the Contributor Covenant history nor any opinion on whether adopting this particular text is right or wrong, but since the explicit list of protected class triggered a discussion, I wanted to highlight that the Coq community has adopted (several years ago) a Code of Conduct from another source (see coq/CODE_OF_CONDUCT.md at master · coq/coq · GitHub) which contains:

We strive to be a community that welcomes and supports people of all backgrounds and identities. This includes, but is not limited to people of any origin, color, status, educational level, gender identity, sexual orientation, age, culture and beliefs, and mental and physical ability.

It has a few differences: the list is explicitly “not limited to”, because of this it makes sense for it to be shorter, finally it includes “culture and beliefs”.

(Also, FWIW, for me the term “protected class” is evocative of the USA non-discrimination legislation, which has a lot of holes and has led to a lot of actual discrimination, e.g. against same-sex couples, being legally protected… So not really a good model to follow… Apparently, Google agrees with me that this directly comes from US legislation because when I search for “protected class”, the first result is https://en.wikipedia.org/wiki/Protected_group.)

6 Likes

I don’t think that term should be included in the code of conduct (it isn’t currently present), I was merely referring to that list as ‘protected class’, because that is what I recognised it as most similar to (having recently done the yearly refresher on the company policy on this, and you can probably guess that it is a US company).

It is good to see that alternatives are being proposed:

I was trying to find whether Haskell has a code of conduct, and although I couldn’t find any, but I found this: Guidelines for Respectful Communications. And although it is still a bit too long, there is one aspect I like about it, “We have one over-arching rule: We strive to treat every person with respect.”, and then everything else is a clarification of that.

Perhaps one aspect that I haven’t yet seen explained adequately in the proposed codes of conduct is how to react when someone is (perceivably) trolling/attacking you or someone else.
For example there was one instance a few years ago on reddit (I don’t intend to link to the comment) where reactions to a comment (which could’ve been considered a trolling comment) on an OCaml related thread were in fact perceived by those outside of the OCaml community as attacks on a particular person, and the explanation given could’ve been interpreted as “thats fine, he was a troll”. That doesn’t give a good impression about the OCaml community.

It is probably best to leave dealing with that to the code of conduct team, and even if you’d have to publicly react to such a comment avoid doing it in a way that could be perceived as a harrassment/attack.
There are many reasons why, perhaps you misinterpreted their intent, perhaps it was a simple misunderstanding, or perhaps not.

But if harassment protection truly applies to everyone then it also applies to those who break the code of conduct (whether temporarily or repeatedly). There are ways to punish them in the code of conduct and those should be followed, instead of responding with a personal attack (of course this doesn’t mean someone should stay completely silent in those situations).

I think the linked ocaml-community code of conduct does in fact nicely address some of these concerns, so might be worthwhile to merge with the proposed one in some way.

1 Like

I’m curious to know the reasons why the committee chose the Contributor Covenant and what alternatives they considered? What are their criteria for a code of conduct? This is useful to know if people are interested in proposing alternatives.

1 Like

I am in favor of the code of conduct and very much appreciate the work that has been done here. As a sociologist, I recognize that community is not something that just exists or arises but is actively constructed and the CoC is an important element of defining and maintaining our community.

I am also a Quaker, a member of the Religious Society of Friends. We do not pledge or take oaths and I would ask if we could find an alternative word or phrase that expresses our commitment to continuing to build a strong, inclusive and supportive community.

6 Likes

I’m part of the people who pushed to have a “code of conduct”. Personally my interest is not really in the text (I’m happy to go with whatever the code-of-conduct committee is happy with; and I think it’s wise to reuse something that exists rather than design our own). I think of such code of conduct as:

  1. Designed to deal with serious issues (typically: harassment, not forum moderation).
  2. Associated to an actual mechanism of enforcement / protection. If something bad happens to someone, they should know exactly how to report it and how the report is going to be handled.

I think the hard part is to have good people in our community that are willing to be responsible with dealing with serious issues when they happen, the “code-of-conduct committee” in this discussion. It’s a difficult job and I’m impressed that people are willing to do it.

Said otherwise: in the OCaml community today, people generally know how to behave to each other and I don’t think we have a big problem here. But we don’t have a policy in place to deal with serious issues when they show up. They will happen and probably have happened in the past, it’s just that we don’t know about them because we didn’t care to listen. I think this is a problem we have to fix.

Most of the discussion so far has centered around the issue of how precisely one should define “unacceptable behaviors”. (Just like we can talk for hours about the fine-prints of software licenses.) People care a lot about the details, and I’m sure everyone is doing their best to find a perfect proposal, but we cannot make everyone happy with a single choice. I’m all for “those who do the work decide”, letting people in charge of enforcement make their decisions about the description.

For me the part that is really important is to give clear information to the people who witnessed behaviors they think unacceptable and harmful: how they should report it, how the report is going to be handled, what is going to happen. The Ruby code of conduct mentioned previously does not contain any such information, so it seems to have a different purpose (more like defining broad community standards). Is there another document that documents what to do about harmful behavior? If yes, we should also look at this document for comparison; if no, I don’t think that is a satisfying choice for a community.

16 Likes

I think that @gasche’s criteria makes sense; what is important is concrete rules and procedures. For what it’s worth, even though Ruby’s code of conduct lacks clear rules about enforcement, it states that it was based on “an early proposed draft of the PostgreSQL CoC,” so I took a look at Postgres’ current CoC and it meets gasche’s requirements (and is vastly different from Ruby’s CoC): PostgreSQL: Code of Conduct

I would also be satisfied with using something based on Coq’s code of conduct, which is also used by LLVM (LLVM Community Code of Conduct — LLVM 16.0.0git documentation) and comes from Django.

One point that I wish to see in a code of conduct is to discourage “gatekeeping.” I know that Rust has an emphasis on making “systems programming” approachable for everybody, and this contrasts with the attitude that some people have about C or C++ being a tough or exclusive club. I think this beginner-friendly attitude shows in Rust’s tooling, error messages, and documentation, and has helped its adoption. I think that some functional programming crowds can be elitist in a different way, where excessive category theory references, including memes and tongue-in-cheek jokes like “a monad is a monoid in the category of endofunctors” and zygohistomorphic prepromorphisms that are misinterpreted by outsiders, make functional programming feel intimidating or not appropriate for practical use. I think category theory is cool and am not trying to say “don’t use category theory and please dumb-down your code,” I just want to avoid an attitude of using category theory only to “show off.” I haven’t seen this so far in the OCaml world, fortunately. I also feel that when I was younger, I sometimes wasn’t as patient enough with people less experienced as I was than I should have been, and also that I have also benefitted from people more experienced than I am going out of their way to teach me interesting topics. So, I want to emphasize being welcoming to beginners.

Finally, I think the code of conduct should assume good faith for everyone, including those who break the rules, unless the violation was particularly egregious. (For example, if someone acts “gatekeepy,” assume it was unintentional before assuming it was malicious.) It should also provide room for people to grow and learn from their mistakes, then re-enter the community.

4 Likes