page.title=Project Roles
@jd:body

<!--
    Copyright 2013 The Android Open Source Project

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<div id="qv-wrapper">
  <div id="qv">
    <h2>In this document</h2>
    <ol id="auto-toc">
    </ol>
  </div>
</div>
<p>The Android Open Source Project (AOSP) includes individuals working in a variety
of roles. Google is responsible for Android product management
and the engineering process for the core framework and platform; however,
the project considers contributions from any source, not just Google. This
page describes the kinds of roles that interested parties can take on.</p>
<p>Anyone who is interested in exploring and contributing to Android can use the
Android Open Source Project resources. Anyone can join the mailing lists, ask
questions, contribute patches, report bugs, look at submitted patches, and use
the tools. To get started with the Android code, see <a href="{@docRoot}source/contributing.html">Contributing</a>.</p>
<h2 id="contributor">Contributor</h2>
<p>"Contributors" are those making contributions to the AOSP source code,
including both employees of Google or other companies, as well as individual
developers who are contributing to Android on their own behalf. There is no
distinction between contributors who are employed by Google and those who are
not; all engineers use the same tools (git, repo, and gerrit),
follow the same code review process, and are subject
to the same requirements on code style and so on.</p>
<h2 id="developer">Developer</h2>
<p>"Developers" are engineers writing applications that run on Android
devices. There is often little difference in skillset between a developer
and a contributor. But AOSP uses "developer" to distinguish between
engineers using the platform and those contributing to it. Developers
(along with users) are the "customers" of the platform the contributors
create. As such, we talk about developers a lot, though this isn't technically
a separate role in the AOSP per se.</p>
<h2 id="verifier">Verifier</h2>
<p>"Verifiers" are responsible for testing change requests. After individuals
have submitted a significant amount of high-quality code to the project, the
project leads might invite them to become verifiers. <em>Note: at this
time, verifiers act similarly to approvers.</em></p>
<h2 id="approver">Approver</h2>
<p>"Approvers" are experienced members of the project who have demonstrated their
design skills and have made significant technical contributions to the
project. In the code-review process, an approver decides whether to include or
exclude a change. Project leads (who are typically employed by Google) choose
the approvers, sometimes promoting to this position verifiers who have
demonstrated their expertise within a specific project.</p>
<h2 id="project-leads">Project Lead</h2>
<p>Android consists of a number of sub-projects; you can see these in the git
repository as individual .git files. "Project leads" are senior contributors who
oversee the engineering for individual Android projects. Typically these project
leads are Google employees. A project lead for an individual project is
responsible for the following:</p>
<ul>
<li>
<p>Lead all technical aspects of the project, including the project roadmap,
  development, release cycles, versioning, and quality assurance (QA).</p>
</li>
<li>
<p>Ensure the project is tested by QA in time for scheduled Android platform
  releases.</p>
</li>
<li>
<p>Designate Verifiers and Approvers for submitted patches.</p>
</li>
<li>
<p>Be fair and unbiased while reviewing changes. Accept or reject patches
  based on technical merit and alignment with the Android strategy.</p>
</li>
<li>
<p>Review changes in a timely manner and make best efforts to communicate
  when changes are not accepted.</p>
</li>
<li>
<p>Optionally maintain a web site for the project for information and
  documents specific to the project.</p>
</li>
<li>
<p>Act as a facilitator in resolving technical conflicts.</p>
</li>
<li>
<p>Be a public face for the project and the go-to person for questions
  related to the project.</p>
</li>
</ul>
