(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{588:function(e,t,o){"use strict";o.r(t);var r=o(69),a=Object(r.a)({},(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"become-a-committer"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#become-a-committer"}},[e._v("#")]),e._v(" Become a Committer")]),e._v(" "),o("p",[e._v("An Apache IoTDB "),o("a",{attrs:{href:"https://www.apache.org/foundation/how-it-works.html#committers",target:"_blank",rel:"noopener noreferrer"}},[e._v("committer"),o("OutboundLink")],1),e._v(" has write access to the repository for merging pull requests, but you don’t have to be a code contributor to become a committer. Becoming a committer means that you have the project’s trust. Read the "),o("a",{attrs:{href:"https://www.apache.org/dev/committers.html#committer-responsibilities",target:"_blank",rel:"noopener noreferrer"}},[e._v("ASF documentation"),o("OutboundLink")],1),e._v(" for more about being a committer in the Apache Software Foundation.")]),e._v(" "),o("p",[e._v("The "),o("a",{attrs:{href:"https://www.apache.org/foundation/how-it-works.html#pmc-members",target:"_blank",rel:"noopener noreferrer"}},[e._v("PMC"),o("OutboundLink")],1),e._v(" makes someone a committer via nomination, discussion, and then majority vote. We use data from as many sources as possible to inform our reasoning. Here are some examples:")]),e._v(" "),o("ul",[o("li",[e._v("IoTDB expert and evangelist (documentations, blogs, etc..)")]),e._v(" "),o("li",[e._v("Public events")]),e._v(" "),o("li",[e._v("Firsthand PMC testimonials")])]),e._v(" "),o("p",[e._v("The PMC has assembled the following set of guidelines for becoming a committer.")]),e._v(" "),o("h2",{attrs:{id:"an-apache-iotdbcommitter"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#an-apache-iotdbcommitter"}},[e._v("#")]),e._v(" An Apache IoTDBcommitter…")]),e._v(" "),o("h3",{attrs:{id:"takes-many-forms"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#takes-many-forms"}},[e._v("#")]),e._v(" Takes many forms")]),e._v(" "),o("p",[e._v("There are many actions other than coding that build the trust we place in a committer - code review, design discussion, user support, community outreach, improving infrastructure, documentation, project management, etc.")]),e._v(" "),o("h3",{attrs:{id:"knows-upholds-and-reinforces-the-apache-software-foundation-code-of-conduct"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#knows-upholds-and-reinforces-the-apache-software-foundation-code-of-conduct"}},[e._v("#")]),e._v(" Knows, upholds, and reinforces the Apache Software Foundation code of conduct")]),e._v(" "),o("p",[e._v("See the "),o("a",{attrs:{href:"https://www.apache.org/foundation/policies/conduct.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("ASF documentation"),o("OutboundLink")],1),e._v(". In particular, they manifestly strive to:")]),e._v(" "),o("ul",[o("li",[e._v("Be open")]),e._v(" "),o("li",[e._v("Be empathetic")]),e._v(" "),o("li",[e._v("Be welcoming")]),e._v(" "),o("li",[e._v("Be friendly")]),e._v(" "),o("li",[e._v("Be patient")]),e._v(" "),o("li",[e._v("Be collaborative")]),e._v(" "),o("li",[e._v("Be inquisitive")]),e._v(" "),o("li",[e._v("Be careful in the words that they choose")])]),e._v(" "),o("h3",{attrs:{id:"knows-upholds-and-reinforces-the-responsibilities-of-an-apache-software-foundation-committer"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#knows-upholds-and-reinforces-the-responsibilities-of-an-apache-software-foundation-committer"}},[e._v("#")]),e._v(" Knows, upholds, and reinforces the responsibilities of an Apache Software Foundation committer")]),e._v(" "),o("p",[e._v("See the "),o("a",{attrs:{href:"https://www.apache.org/dev/committers.html#committer-responsibilities",target:"_blank",rel:"noopener noreferrer"}},[e._v("ASF documentation"),o("OutboundLink")],1),e._v(".")]),e._v(" "),o("ul",[o("li",[e._v("They help create a product that will outlive the interest of any particular volunteer (including themselves)")]),e._v(" "),o("li",[e._v("They grow and maintain the health of the Apache community")]),e._v(" "),o("li",[e._v("They help out with surrounding work, such as the website & documentation")]),e._v(" "),o("li",[e._v("They help users")]),e._v(" "),o("li",[e._v("They can be trusted to decide when code is ready for release, or when to ask someone else to make the judgment")]),e._v(" "),o("li",[e._v("They can be trusted to decide when to merge code (if a code contributor) or when to ask someone else to make the judgment")])]),e._v(" "),o("h3",{attrs:{id:"knows-upholds-and-reinforces-the-iotdb-community-s-practices"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#knows-upholds-and-reinforces-the-iotdb-community-s-practices"}},[e._v("#")]),e._v(" Knows, upholds, and reinforces the IoTDB community’s practices")]),e._v(" "),o("ul",[o("li",[e._v("They have a proven commitment to the project")]),e._v(" "),o("li",[e._v("They share their intentions with the community")]),e._v(" "),o("li",[e._v("They accept and integrate community feedback in their plans, designs, code, etc.")]),e._v(" "),o("li",[e._v("They earnestly try to make IoTDB better with their contributions")]),e._v(" "),o("li",[e._v("In particular, if a code contributor:\n"),o("ul",[o("li",[e._v("They earnestly try to make IoTDB better with their own code")]),e._v(" "),o("li",[e._v("They earnestly try to make IoTDB better with code review")]),e._v(" "),o("li",[e._v("They accept and integrate feedback on their code")]),e._v(" "),o("li",[e._v("They know, follow, and enforce IoTDB's practices while reviewing/merging code - style, documentation, testing, backward compatibility, etc.")])])])]),e._v(" "),o("p",[e._v("The code of conduct is derived from "),o("a",{attrs:{href:"https://beam.apache.org/contribute/become-a-committer/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Apache Beam"),o("OutboundLink")],1),e._v(".")])])}),[],!1,null,null,null);t.default=a.exports}}]);