.. _conflict-resolution:

Conflict Resolution Policy
==========================

Conflicts in the community can take many forms, from someone having a
bad day and using harsh and hurtful language on the mailing list to more
serious code of conduct violations (including sexist/racist statements
or threats of violence), and everything in between.

For the vast majority of issues, we aim to empower individuals to first
resolve conflicts themselves, asking for help when needed, and only
after that fails to escalate further. This approach gives people more
control over the outcome of their dispute.

How we resolve conflicts
------------------------

If you are experiencing conflict, please consider first addressing the
perceived conflict directly with other involved parties, preferably through
a real-time medium such as IRC. You could also try to get a third-party (e.g.
a mutual friend, and/or someone with background on the issue, but not
involved in the conflict) to intercede or mediate.

If this fails or if you do not feel comfortable proceeding this way, or
if the problem requires immediate escalation, report the issue to the QEMU
leadership committee by sending an email to qemu@sfconservancy.org, providing
references to the misconduct.
For very urgent topics, you can also inform one or more members through IRC.
The up-to-date list of members is `available on the QEMU wiki
<https://wiki.qemu.org/Conservancy>`__.

Your report will be treated confidentially by the leadership committee and
not be published without your agreement. The QEMU leadership committee will
then do its best to review the incident in a timely manner, and will either
seek further information, or will make a determination on next steps.

Remedies
--------

Escalating an issue to the QEMU leadership committee may result in actions
impacting one or more involved parties. In the event the leadership
committee has to intervene, here are some of the ways they might respond:

1. Take no action. For example, if the leadership committee determines
   the complaint has not been substantiated or is being made in bad faith,
   or if it is deemed to be outside its purview.

2. A private reprimand, explaining the consequences of continued behavior,
   to one or more involved individuals.

3. A private reprimand and request for a private or public apology

4. A public reprimand and request for a public apology

5. A public reprimand plus a mandatory cooling off period. The cooling
   off period may require, for example, one or more of the following:
   abstaining from maintainer duties; not interacting with people involved,
   including unsolicited interaction with those enforcing the guidelines
   and interaction on social media; being denied participation to in-person
   events.  The cooling off period is voluntary but may escalate to a
   temporary ban in order to enforce it.

6. A temporary or permanent ban from some or all current and future QEMU
   spaces (mailing lists, IRC, wiki, etc.), possibly including in-person
   events.

In the event of severe harassment, the leadership committee may advise that
the matter be escalated to the relevant local law enforcement agency. It
is however not the role of the leadership committee to initiate contact
with law enforcement on behalf of any of the community members involved
in an incident.

Sources
-------

This document was developed based on the `Drupal Conflict Resolution
Policy and Process <https://www.drupal.org/conflict-resolution>`__
and the `Mozilla Consequence Ladder
<https://github.com/mozilla/diversity/blob/master/code-of-conduct-enforcement/consequence-ladder.md>`__
