<?php
/*******************************************************************************
 * Copyright (c) 2008, 2013 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Bjorn Freeman-Benson (Eclipse Foundation) - initial API and implementation
 *    Wayne Beaton (Eclipse Foundation) - 2010, 2011 updates.
 *******************************************************************************/
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
$App = new App();
$Nav = new Nav();
$Menu = new Menu();
include($App->getProjectCommon());

$pageTitle = "(Draft) Eclipse Development Process 2014";
$pageAuthor = "Wayne Beaton";
$pageKeywords = "EDP, Eclipse Development Process";

include( '../../_commonLeftNav.php' );

$previous = "/projects/dev_process/development_process_2011.php";
$diff = "diff.php";
$pdf = "development_process_2014.pdf";
$bylaws = "/org/documents/Eclipse%20BYLAWS%202003_11_10%20Final.pdf#page=19";
$ip_policy = "/org/documents/Eclipse_IP_Policy.pdf";

$commentary = isset($_GET['commentary']);

function getChanges() {
    $changes = array();
    $file = fopen(dirname(__FILE__) . '/bugs.csv', 'r');
    fgetcsv($file);
    while ($line = fgetcsv($file)) {
        $id=$line[0];
        $url = "https://bugs.eclipse.org/$id";
        $summary = preg_replace('/\[[^\]]+\]/', '', $line[6]);
        
        $changes[] = "<li>(<a href=\"$url\">Bug $id</a>) $summary</li>";
    }
    return join("\n", $changes);
}
ob_start();
?>
<style>
p {
	margin-bottom: 10px;
}

blockquote {
	margin-left: 2em;
	margin-right: 2em;
	margin-bottom: 10px;
}

.comment {
	background-image:
		url(http://dev.eclipse.org/small_icons/apps/help-browser.png);
	background-position: 5px 5px;
	background-repeat: no-repeat;
	display: <?php echo $commentary ?   'block' :   'none'; ?>;
	float: right;
	width: 200px;
	margin: 5px;
	padding: 25px 2px 2px 2px;
	border: 1px solid black;
	background-color: #EEEEEE;
}

.comment p {
	margin: 3px;
}

.postit {
	float: right;
	width: 150px;
	margin: 5px;
	padding: 2px;
	border: 1px dashed black;
	background-color: #FFFFDD;
}

#toc {
	padding: 5px;
}

#toc ul {
	list-style-type: none;
	list-style-image: none;
	margin-top: 1px;
	margin-bottom: 1px;
	padding-top: 1px;
	padding-bottom: 1px;
	text-align: left;
}

#toc li {
	margin-top: 1px;
	margin-bottom: 1px;
	padding-top: 0;
}
</style>
<div id="maincontent">
	<div id="midcolumn">

		<h1><?php echo $pageTitle; ?></h1>
		<div class="homeitem3col">
			<h2>Contents</h2>
			<div id="toc">
				<ul>
					<li><a href="#1_Purpose">1 Purpose</a></li>
					<li><a href="#2_Principles">2 Principles</a>
						<ul>
							<li><a href="#2_1_Open_Source_Rules_of_Engagement">2.1 Open
									Source Rules of Engagement</a></li>
							<li><a href="#2_2_Eclipse_Ecosystem">2.2 Eclipse Ecosystem</a></li>
							<li><a href="#2_3_Three_Communities">2.3 Three Communities</a>
								<ul>
									<li><a href="#2_3_1_Committers">2.3.1 Contributors and Committers</a></li>
									<li><a href="#2_3_2_Users">2.3.2 Users</a></li>
									<li><a href="#2_3_3_Adopters">2.3.3 Adopters</a></li>
								</ul>
							</li>
							<li><a href="#2_4_Clear_Concise_and_Evolving">2.4 Clear, Concise,
									and Evolving</a></li>
						</ul></li>
					<li><a href="#3_Requirements">3 Requirements</a>
						<ul>
							<li><a href="#3_1_Requirements_and_Guidelines">3.1 Requirements
									and Guidelines</a></li>
						</ul></li>
					<li><a href="#4_Structure_and_Organization">4 Project Structure and
							Organization</a>
						<ul>
							<li><a href="#4_1_Committers">4.1 Committers</a></li>
							<li><a href="#4_2_Code_and_Releases">4.2 Code and Resources</a></li>
							<li><a href="#4_3_IP_Records">4.3 Intellectual Property (IP) Records</a></li>
							<li><a href="#4_4_Community_Awareness">4.4 Community Awareness</a>
							</li>
							<li><a href="#4_5_Scope">4.5 Scope</a></li>
							<li><a href="#4_6_Leaders">4.6 Leaders</a>
								<ul>
									<li><a href="#4_6_1_PMC">4.6.1 Project Management Committee
											(PMC)</a></li>
									<li><a href="#4_6_2_PL">4.6.2 Project Lead(s)</a></li>
								</ul>
							</li>
							<li><a href="#4_7_Committers_and_Contributors">4.7 Committers and
									Contributors</a></li>
							<li><a href="#4_8_Councils">4.8 Councils</a></li>
							<li><a href="#4_9_Incubators">4.9 Permanent Incubator Projects</a></li>
						</ul></li>
					<li><a href="#5_Reserved">5 [Reserved]</a></li>
					<li><a href="#6_Development_Process">6 Development Process</a>
						<ul>
							<li><a href="#6_1_Mentors">6.1 Mentors</a></li>
							<li><a href="#6_2_Project_Lifecycle">6.2 Project Lifecycle</a></li>
							<li><a href="#6_2_1_Pre-Proposal">6.2.1 Pre-proposal</a></li>
							<li><a href="#6_2_2_Proposal">6.2.2 Proposal</a></li>
							<li><a href="#6_2_3_Incubation">6.2.3 Incubation</a></li>
							<li><a href="#6_2_4_Mature">6.2.4 Mature</a></li>
							<li><a href="#6_2_5_Top-Level">6.2.5 [Reserved]</a></li>
							<li><a href="#6_2_6_Archived">6.2.6 Archived </a></li>
							<li><a href="#6_3_Reviews">6.3 Reviews</a>
								<ul>
									<li><a href="#6_3_1_Creation_Review">6.3.1 Creation Review</a>
									</li>
									<li><a href="#6_3_2_Graduation_Review">6.3.2 Graduation Review</a>
									</li>
									<li><a href="#6_3_3_Release_Review">6.3.3 Release Review</a></li>
									<li><a href="#6_3_4_Promotion_Review">6.3.4 [Reserved]</a>
									</li>
									<li><a href="#6_3_5_Continuation_Review">6.3.5 [Reserved]</a></li>
									<li><a href="#6_3_6_Termination_Review">6.3.6 Termination
											Review</a></li>
									<li><a href="#6_3_7_Move_Review">6.3.7 [Reserved]</a></li>
									<li><a href="#6_3_8_Restructuring_Review">6.3.8 Restructuring
											Review</a></li>
									<li><a href="#6_3_9_Combining_Reviews">6.3.9 Combining Reviews</a>
									</li>
								</ul></li>
							<li><a href="#6_4_Releases">6.4 Releases</a></li>
							<li><a href="#6_5_Grievance_Handling">6.5 Grievance Handling</a>
							</li>
						</ul></li>
					<li><a href="#7_Precedence">7 Precedence</a></li>
					<li><a href="#8_Revisions">8 Revisions</a>
						<ul>
							<li><a href="#8_1_Revision">8.1 Revision 2.4</a></li>
						</ul></li>
				</ul>
			</div>
		</div>

		<h2>
			<a name="1_Purpose"></a>1. Purpose
		</h2>
		<p>This document describes the development process for the Eclipse
			Foundation. In particular, it describes how the membership at large,
			the board of directors, other constituents of the ecosystem, and the
			Eclipse Management Organization (EMO) lead, influence, and
			collaborate with Eclipse projects to achieve these Eclipse purposes:</p>

		<blockquote>
			<em>The Eclipse technology is a vendor-neutral, open development
				platform supplying frameworks and exemplary, extensible tools (the
				'Eclipse Platform'). Eclipse Platform tools are exemplary in that
				they verify the utility of the Eclipse frameworks, illustrate the
				appropriate use of those frameworks, and support the development and
				maintenance of the Eclipse Platform itself; Eclipse Platform tools
				are extensible in that their functionality is accessible via
				documented programmatic interfaces. The purpose of Eclipse
				Foundation Inc., is to advance the creation, evolution, promotion,
				and support of the Eclipse Platform and to cultivate both an open
				source community and an ecosystem of complementary products,
				capabilities, and services.</em>
		</blockquote>

		<div class="postit">
			<p>
				Explanatory comments, guidelines, and checklists - as well as
				additional requirements added by the EMO per <a
					href="#3_Requirements">section 3</a> - are noted in yellow boxes.
			</p>
		</div>

		<p>This document has the following sections:</p>
		<ul>
			<li><a href="#2_Principles"><em>Principles</em> </a> outlines the
				basic principles upon which the development process is based.</li>
			<li><a href="#3_Requirements"><em>Requirements</em> </a> describes
				the requirements that the Eclipse community has for its development
				process.</li>
			<li><a href="#4_Structure_and_Organization"><em>Structure and
						Organization</em> </a> specifies the structure and organization of
				the projects and project community at Eclipse.</li>
			<li><a href="#6_Development_Process"><em>Development Process</em> </a>
				outlines the lifecycle and processes required of all Eclipse
				projects.</li>
		</ul>

		<h2>
			<a name="2_Principles"></a>2. Principles
		</h2>
		<p>The following describes the guiding principles used in developing
			this development process.</p>

		<h3>
			<a name="2_1_Open_Source_Rules_of_Engagement"></a>2.1 Open Source
			Rules of Engagement
		</h3>
		<ul>
			<li><b>Open</b> - Eclipse is open to all; Eclipse provides the same
				opportunity to all. Everyone participates with the same rules; there
				are no rules to exclude any potential contributors which include, of
				course, direct competitors in the marketplace.</li>
			<li><b>Transparent</b> - Project discussions, minutes, deliberations,
				project plans, plans for new features, and other artifacts are open,
				public, and easily accessible.</li>
			<li><b>Meritocracy</b> - Eclipse is a meritocracy. The more you
				contribute the more responsibility you will earn. Leadership roles
				in Eclipse are also merit-based and earned by peer acclaim.</li>
		</ul>

		<h3>
			<a name="2_2_Eclipse_Ecosystem"></a>2.2 Eclipse Ecosystem
		</h3>
		
		<p>Eclipse as a brand is the sum of its parts (all of the projects),
			and projects should strive for the highest possible quality in
			extensible frameworks, exemplary tools, transparent processes, and
			project openness.</p>
		<p>
			The Eclipse Foundation has the responsibility to <em>...cultivate...an
				ecosystem of complementary products, capabilities, and services...</em>.
			It is therefore a key principle that the Eclipse Development Process
			ensures that the projects are managed for the benefit of both the
			open source community and the ecosystem members. To this end, all
			Eclipse projects are required to:
		</p>
		<ul>
			<li>communicate their project plans and plans for new features (major
				and minor) in a timely, open and transparent manner;</li>
			<li>create platform quality frameworks capable of supporting the
				building of commercial grade products on top of them; and</li>
			<li>ship extensible, exemplary tools which help enable a broad
				community of users</li>
		</ul>

		<h3>
			<a name="2_3_Three_Communities"></a>2.3 Three Communities
		</h3>
		<p>Essential to the purposes of the Eclipse Foundation is the
			development of three inter-related communities around each project:</p>
		<h4><a name="2_3_1_Committers"></a> 2.3.1 Contributors and Committers</h4>
			<p>A  thriving, diverse,
				and active community of developers is the key component of any
				Eclipse project. Ideally, this community should be an open,
				transparent, inclusive, and diverse community of committers and
				(non-committer) contributors. Attracting new contributors and
				committers to an open source project is time consuming and requires
				active recruiting, not just passive "openness". The project
				leadership must make reasonable efforts to encourage and nurture
				promising new contributors.</p>
			<h4><a name="2_3_2_Users"></a>2.3.2 Users</h4>
			<p>An active and engaged user community is
				proof-positive that the project's exemplary tools are useful and
				needed. Furthermore, a large user community is one of the key
				factors in creating a viable ecosystem around an Eclipse project,
				thus encouraging additional open source and commercial organizations
				to participate. Like all good things, a user community takes time
				and effort to bring to fruition, but once established is typically
				self-sustaining.</p>
			<h4><a name="2_3_3_Adopters"></a>2.3.3 Adopters</h4>
			<p>An active and engaged adopter/plug-in developer
				community is the only way to prove that an Eclipse project is
				providing extensible frameworks and extensible tools accessible via
				documented APIs. Reuse of the frameworks within the companies that
				are contributing to the project is necessary, but not sufficient to
				demonstrate an adopter community. Again, creating, encouraging, and
				nurturing an adopter community outside of the project's developers
				takes time, energy, and creativity by the project leadership, but is
				essential to the project's long-term open source success.</p>
	
		<p>The Eclipse community considers the absence of any one or more of
			these communities as proof that the project is not sufficiently open,
			transparent, and inviting, and/or that it has emphasized tools at the
			expense of extensible frameworks or vice versa.</p>

		<h3>
			<a name="2_4_Clear_Concise_and_Evolving"></a>2.4 Clear, Concise, and
			Evolving
		</h3>
		<p>It is an explicit goal of the development process to be as clear
			and concise as possible so as to help the project teams navigate the
			complexities, avoid the pitfalls, and become successful as quickly as
			possible.</p>
		<p>This document imposes requirements and constraints on the operation
			of the projects, and it does so on behalf of the larger Eclipse
			community. It is an explicit goal of the development process to
			provide as much freedom and autonomy to the projects as possible
			while ensuring the collective qualities benefit the entire Eclipse
			community.</p>
		<p>Similarly, this document should not place undue constraints on the
			EMO or the board that prevent them from governing the process as
			necessary. We cannot foresee all circumstances and as such should be
			cautious of being overly prescriptive and/or requiring certain fixed
			metrics.</p>
		<p>The frameworks, tools, projects, processes, community, and even the
			definition of quality continues to, and will continue to, evolve.
			Creating rules or processes that force a static snapshot of any of
			these is detrimental to the health, growth, and ecosystem impact of
			Eclipse.</p>
		<p>Part of the strength of this document is in what it does not say,
			and thus opens for community definition through convention,
			guidelines, and public consultation. A document with too much
			structure becomes too rigid and prevents the kind of innovation and
			change we desire for Eclipse. In areas where this document is vague,
			we expect the projects and members to engage the community-at-large
			to clarify the current norms and expectations.</p>

		<h2>
			<a name="3_Requirements"></a>3. Requirements
		</h2>
		<p>This document and any additional criteria as established by the EMO
			contains requirements, recommendations, and suggestions.</p>
		<p>
			Required
			- Certain responsibilities and behaviors are required of participants
			in Eclipse open source projects. Projects that fail to perform the
			required behaviors will be terminated by the EMO. In keeping with the
			guiding principles, the number of requirements must be kept to an
			absolute minimum.
		</p>
		<p>
			Guideline
			- Other responsibilities and behaviors are recommended best
			practices. Collectively, we have learned that projects are more
			likely to be successful if the team members and leaders follow these
			recommendations. Projects are strongly encouraged to follow these
			recommendations, but will not be penalized by this process if they do
			not.
		</p>

		<h3>
			<a name="3_1_Requirements_and_Guidelines"></a>3.1 Requirements and
			Guidelines
		</h3>
		<p>This document is entirely composed of requirements. In addition to
			the requirements specified in this development process, the EMO is
			instructed to clarify, expand, and extend this process by creating a
			set of Eclipse project development guidelines to advance the
			creation, evolution, promotion, and support of the Eclipse Platform
			and to cultivate both an open source community and an ecosystem of
			complementary products and services.</p>
		<p>The EMO is not permitted to override or ignore the requirements
			listed in this document without the express written endorsement of
			the board of directors.</p>

		<h2>
			<a name="4_Structure_and_Organization"></a>4. Project Structure and
			Organization
		</h2>

		<p>
			A project is the main operational unit at Eclipse.
			Specifically, all open source software development at Eclipse occurs
			within the context of a project. Projects have leaders, developers,
			code, builds, downloads, websites, and more. Projects are more than
			just the sum of their many parts, they are the means by which open
			source work is organized when presented to the communities of
			developers, adopters, and users. Projects provide structure that
			helps developers expose their hard work to a broad audience of
			consumers.
		</p>

		<p>
			Eclipse projects are organized hierarchically. A special type of
			project, &quot;top-level&quot; projects, sit at the top of the hierarchy.
			Each top-level project contains one or more projects. Each project
			may itself contain zero or more projects. A project that has one or
			more projects is said to be the &quot;parent&quot; of those projects.
			A project that has a parent is oftentimes referred to as a &quot;subproject&quot;.
			The term project refers to either a top-level project or a
			subproject.
		</p>

		<p>
			The descendants of a project are the project itself and
			transitive closure of its child projects. The top parent of a
			project is the top-level project at the top of the hierarchy.
		</p>
		<p>Projects are the unit entity for:</p>
		<ul>
			<li>committers;</li>
			<li>code and releases;</li>
			<li>intellectual property (IP) records; and</li>
			<li>community awareness</li>
		</ul>
		<p>
			As defined by <a
				href="<?php echo $bylaws; ?>">Bylaws of Eclipse
				Foundation - Article VII</a>, the &quot;Eclipse Management Organization&quot;
				(EMO) consists of the Eclipse Foundation staff and the councils. The
			term EMO(ED), when discussing an approval process, refers to
			the subset of the EMO consisting of the executive director and
			whomever he or she may delegate that specific approval authority to.
		</p>

		<h3>
			<a name="4_1_Committers"></a>4.1 Committers
		</h3>

		<p>
			Each project has exactly one set of committers. Each project's set of
			committers is distinct from that of any other project, including
			subprojects or parent projects. All project committers have equal
			rights and responsibilities within the project. Partitioning of
			responsibility within a project is managed using social convention. A
			project may, for example, divide itself into logical partitions of
			functionality; it is social convention that prevents committers from
			one logical partition from doing inappropriate work in another. If
			finer-grained management of committer responsibilities is required, a
			project should consider partitioning (via a <a
				href="#6_3_8_Restructuring_Review">Restructuring Review</a>) into
			two or more subprojects.
		</p>

		<p>The committers of a project have the exclusive right to elect new
			committers to their project; no other group, including a parent
			project, can force a project to accept a new committer.</p>

		<p>There is no roll-up of committers: the set of committers on a
			project is exactly that set of people who have been explicitly
			elected into that role for the project (i.e. being a committer on a
			subproject does not give you any automatic rights on the
			&quot;parent&quot; project or any child project).</p>

		<p>In practical terms, each project has a single UNIX group of its
			committers that provides write-access to the project's resources.
			Pictorially below, we see that a project, in addition to the various
			resources and committers it has, can also have zero or more
			subprojects. Each of these subprojects has its own distinct set of
			committers and resources.</p>

		<img src="/projects/dev_process/images/subprojects-resources-291x300.png" />

		<h3>
			<a name="4_2_Code_and_Releases"></a>4.2 Code and Resources
		</h3>

		<p>Each project owns and maintains a collection of resources.</p>

		<p>Resources may include source code, a project website, space on the
			downloads server, access to build resources, and other services
			provided by the Eclipse Foundation infrastructure. The exact
			infrastructure provided by the Eclipse Foundation varies over time
			and is defined outside this process document.</p>

		<p>
			A project is not strictly required to make use of all the resources
			made available; a project might, for example, opt to <em>not</em>
			maintain a source code repository. Such a project might operate as an
			organizational unit, or container, for several subprojects.
			Similarly, a project might opt to provide a consolidated website,
			build and/or download site for its subprojects (the subprojects
			would then not require those resources for themselves).
		</p>

		<p>
			Namespaces are assigned to a project by the EMO. All project source code
			must be organized in the assigned namespaces and projects can only release 
			code under their own namespace (that is, they cannot infringe on another 
			Eclipse project's namespace). Projects should work with their PMCs and the 
			EMO to request exceptions to this rule, and with their mentors and PMC if 
			there are questions regarding the use of the namespace.
		</p>

		<h3>
			<a name="4_3_IP_Records"></a>4.3 Intellectual Property (IP) Records
		</h3>
		<p>A project at any level may receive IP clearance for contributions
			and third-party libraries. IP approval will often include the same
			approval for all descendant projects. However, IP clearance will only
			be granted at the most appropriate technical level.</p>

		<h3>
			<a name="4_4_Community_Awareness"></a>4.4 Community Awareness
		</h3>
		<p>Projects are the level of communication with the larger Eclipse
			community and ecosystem. Projects may either have their own
			communications (website, mailing lists, forums/newsgroups, etc) or
			they may be part of a parent project's communications (website,
			mailing list, forums/newsgroups, etc). In either case, the project is
			required to maintain an open and public communication channel with
			the Eclipse community including, but not limited to, project plans,
			schedules, and design discussions.</p>
		<p>All projects must make the communication channels easy to find.
			projects are further required to make the separate communication
			channels of their child projects (if any) easy to find.</p>
		<p>Any project in the incubation phase must correctly identify its
			website and releases. A project with at least one descendant project
			in incubation phase must correctly annotate its own website so as to
			notify the Eclipse community that incubating projects exist in its
			hierarchy. Any release containing code from an incubation phase
			project must be correctly labeled, i.e., the incubation phase is
			viral and expands to cover all releases in which it is included.</p>

		<h3>
			<a name="4_5_Scope"></a>4.5 Scope
		</h3>
		<p>
			Each top-Level project has a charter which describes the
			purpose, scope, and operational rules for the top-level
			project. The charter should refer to, and describe any refinements
			to, the provisions of this development process. The board of directors approves
			the charter of each top-level project.
		</p>
		<p>Subprojects do not have separate charters; subprojects operate
			under the charter of their parent top-Level project.</p>
		<p>
			All projects have a defined scope and all initiatives within
			that project are required to reside within that scope. Initiatives
			and code that is found to be outside the scope of a project may
			result in the termination of the project. The scope of top-level
			projects is part of the charter, as approved by the board of
			directors of the Eclipse Foundation.
		</p>
		<p>
			The scope of a subproject is defined by the initial project proposal
			as reviewed and approved by the Project Management Committee (PMC)
			(as further defined below) of the project's top parent and
			by the EMO. A project's scope must be a subset of its parent's scope.
		</p>

		<h3>
			<a name="4_6_Leaders"></a>4.6 Leaders
		</h3>

		<p>There are two different types of project leadership at Eclipse: The
			Project Management Committee (PMC) and project leads. Both forms of
			leadership are required to:</p>
		<ul>
			<li>ensure that their project is operating effectively by guiding the
				overall direction and by removing obstacles, solving problems, and
				resolving conflicts;</li>
			<li>operate using open source rules of engagement: meritocracy,
				transparency, and open participation; and</li>
			<li>ensure that the project and its subprojects (if any) conform to
				the Eclipse Foundation IP policy and procedures.</li>
		</ul>

		<p>The leadership chain for a project is composed of the project's project
			lead(s), the project lead(s) of the parent project (if any), the PMC
			leads and PMC members for the top-level project, the EMO(ED), 
			and&mdash;ultimately&mdash;the board of directors.</p>

		<p>In exceptional situations&mdash;such as projects with zero active committers,
		disruptive committers, or no effective project leads&mdash;the project leadership 
		chain has the authority to make changes (add, remove) to the set of committers 
		and/or project leads of that project, and otherwise act on behalf of the project lead.</p>

		<h4>
			<a name="4_6_1_PMC"></a>4.6.1 Project Management Committee (PMC)
		</h4>

		<p>Top-level projects are managed by a Project Management Committee
			(PMC). A PMC has one or more PMC leads and zero or more PMC Members.
			Together the PMC provides oversight and overall leadership for the
			projects that fall under their top-level project. The PMC as a whole,
			and the PMC leads in particular, are ultimately responsible for
			ensuring that the Eclipse Development Process is understood and
			followed by their projects. The PMC is additionally responsible for
			maintaining the top-level project's charter.</p>

		<p>PMC leads are approved by the board of directors; PMC members are elected by the
			existing PMC leads and members, and approved by the EMO(ED).</p>

		<h4>
			<a name="4_6_2_PL"></a>4.6.2 Project Lead
		</h4>

		<p>Eclipse projects are managed by one or more project leads. Project
			leads are responsible for ensuring that their project's committers
			are following the Eclipse Development Process, and that the project
			is engaging in the right sorts of activities to develop vibrant
			communities of users, adopters, and contributors. The initial project
			leads are appointed and approved in the creation review.
			Subsequently, additional project leads must be elected by the
			project's committers and approved by the project's PMC and the
			EMO(ED).</p>

		<p>In the unlikely event that a project lead becomes disruptive to the 
		process or ceases to contribute for an extended period, the individual 
		may be removed by the unanimous vote of the remaining project leads 
		(if there are at least two other project leads), or unanimous vote of 
		the project's PMC.</p>

		<h3>
			<a name="4_7_Committers_and_Contributors"></a>4.7 Committers and
			Contributors
		</h3>

		<p>
			Each project has a development team, led by the project
			leaders. The development team is composed of committers and contributors.
			Contributors are individuals who contribute code, fixes,
			tests, documentation, or other work that is part of the project. Committers
			have write access to the project's resources (source code repository,
			bug tracking system, website, build server, downloads, etc.) and are
			expected to influence the project's development.
		</p>

		<div class="postit">
			See <a href="new-committer.php">guidelines and checklists</a> for
			electing a new committer.
		</div>
		<p>Contributors who have the trust of the project's committers can,
			through election, be promoted committer for that project. The breadth
			of a committer's influence corresponds to the breadth of their
			contribution. A development team's contributors and committers may
			(and should) come from a diverse set of organizations. A committer
			gains voting rights allowing them to affect the future of the
			project. Becoming a committer is a privilege that is earned by
			contributing and showing discipline and good judgment. It is a
			responsibility that should be neither given nor taken lightly, nor is
			it a right based on employment by an Eclipse member company or any
			company employing existing committers.</p>
		<p>The election process begins with an existing committer on the same
			project nominating the contributor. The project's committers will
			vote for a period of no less than one week of standard business days.
			If there are at least three (3) positive votes and no negative votes
			within the voting period, the contributor is recommended to the
			project's PMC for commit privileges. If there are three (3) or fewer
			committers on the project, a unanimous positive vote of all
			committers is substituted. If the PMC approves, and the contributor
			signs the appropriate committer legal agreements established by the
			EMO (wherein, at the very least, the developer agrees to abide by the
			Eclipse Intellectual Property Policy), the contributor becomes a
			committer and is given write access to the source code for that
			project.</p>
		<p>At times, committers may become inactive for a variety of reasons.
			The decision making process of the project relies on active
			committers who respond to discussions and vote in a constructive and
			timely manner. The project leads are responsible for ensuring the
			smooth operation of the project. A committer who is disruptive, does
			not participate actively, or has been inactive for an extended period
			may have his or her commit status revoked by the project leads.
			Unless otherwise specified, "an extended period" is defined as "no
			activity for more than six months".</p>
		<p>Active participation in the user communication channels and the
			appropriate developer mailing lists is a responsibility of all
			committers, and is critical to the success of the project. Committers
			are required to monitor and contribute to the user communication channels.</p>
		<p>Committers are required to monitor the mailing lists associated
			with the project. This is a condition of being granted commit rights
			to the project. It is mandatory because committers must participate
			in votes (which in some cases require a certain minimum number of
			votes) and must respond to the mailing list in a timely fashion in
			order to facilitate the smooth operation of the project. When a
			committer is granted commit rights they will be added to the
			appropriate mailing lists. A committer must not be unsubscribed from
			a developer mailing list unless their associated commit privileges
			are also revoked.</p>
		<p>Committers are required to track, participate in, and vote on,
			relevant discussions in their associated projects.
			There are three voting responses: +1 (yes), -1 (no, or veto), and 0
			(abstain).</p>
		<p>Committers are responsible for proactively reporting problems in
			the bug tracking system, and annotating problem reports with status
			information, explanations, clarifications, or requests for more
			information from the submitter. Committers are responsible for
			updating problem reports when they have done work related to the
			problem.</p>
		<p>Committer, PMC lead or member, project lead, and council representative(s)
			are roles; an individual may take on more than one of these roles
			simultaneously.</p>

		<h3>
			<a name="4_8_Councils"></a>4.8 Councils
		</h3>

		<p>The councils defined in the bylaws, section VII are comprised of
			strategic members and PMC representatives. The councils help guide
			the projects as follows:</p>
		<ul>
			<li>The Planning Council is responsible for establishing a
				coordinated simultaneous release (a.k.a, "the release train"). The
				Planning Council is further responsible for cross-project planning,
				architectural issues, user interface conflicts, and all other
				coordination and integration issues. The Planning Council discharges
				its responsibility via collaborative evaluation, prioritization, and
				compromise.</li>
			<li><div class="postit">
					See <a href="architecture-council.php">guidelines and checklists</a>
					for the Architecture Council.
				</div>The Architecture Council is responsible for (i)
				monitoring, guiding, and influencing the software architectures used
				by projects, (ii) new project mentoring, and (iii) maintaining and
				revising the Eclipse Development Process. Membership in the
				Architecture Council is per the bylaws through strategic membership,
				PMCs, and by appointment. The Architecture Council will, at least
				annually, recommend to the EMO(ED), Eclipse Members who have
				sufficient experience, wisdom, and time to be appointed to the
				Architecture Council and serve as mentors. Election as a mentor is a
				highly visible confirmation of the Eclipse community's respect for
				the candidate's technical vision, good judgement, software
				development skills, past and future contributions to Eclipse. It is
				a role that should be neither given nor taken lightly. Appointed
				members of the Architecture Council are appointed to two year
				renewable terms.</li>
		</ul>
		<h3>
			<a name="4_9_Incubators"></a>4.9 Permanent Incubator Projects
		</h3>

		<p>
			A project may designate a subproject as a &quot;permanent incubator&quot;. A
			permanent incubator is a project that is intended to perpetually remain in the
			<a href="#6_2_3_Incubation">incubation</a> phase. Permanent incubators are an
			excellent place to innovate, test new ideas, grow functionality that
			may one day be moved into another project, and develop new
			committers.
		</p>

		<p>Permanent incubator projects never have releases; they cannot participate in the annual 
			simultaneous release. Permanent incubators may have builds, and downloads. They conform to the
			standard incubation branding requirements and are subject to the IP
			due diligence rules outlined for incubating projects. Permanent incubators do
			not graduate.</p>

		<p>The scope of a permanent incubator project must fall within the scope of its
			parent project. The committer group of the permanent incubator project must
			overlap with that of the parent project (at least one committer from
			the parent project must be a committer for the incubator). Permanent incubator
			projects do not require Architecture Council mentors (the parent
			project's committers are responsible for ensuring that the incubator
			project conforms to the rules set forth by the Eclipse Development
			Process).</p>

		<p>A permanent incubator project must be designated as such by including the
			word &quot;incubator&quot; in its name (e.g. &quot;Eclipse
			Incubator&quot;). To do otherwise is considered exceptional and
			requires approval from the PMC and EMO(ED).</p>

		<p>
			Only top-level projects and projects in the <a href="#6_2_4_Mature">mature
				phase</a> may create a permanent incubator. Permanent incubator projects are created upon 
				request; a creation review is not required.
		</p>

		<h2>
			<a name="5_Reserved"></a>5. [Reserved]
		</h2>

		<h2>
			<a name="6_Development_Process"></a>6. Development Process
		</h2>
		<p>Projects must work within their scope. Projects that desire to
			expand beyond their current scope must seek an enlargement of their
			scope using a public review as described below. Further, projects
			must fit within the scope defined by their containing projects and
			the scope defined in the charter of their top-level project.</p>
	
		<p>Projects must provide advanced notification of upcoming features
			and frameworks via their project plan.</p>

		<h3>
			<a name="6_1_Mentors"></a>6.1 Mentors
		</h3>
		<p>
			New project proposals are required to have at least two mentors. 
			Mentors must be members of the Architecture Council. The
			mentors must be listed in the proposal. Mentors are required
			to monitor and advise the new project during its incubation phase;
			they are released from that duty once the project graduates to the
			mature phase.
		</p>

		<h3>
			<a name="6_2_Project_Lifecycle"></a>6.2 Project Lifecycle
		</h3>
		<img src="/projects/dev_process/development_process_2014/images/lifecycle.png"
			align="right">
		<p>Projects go through distinct phases. The transitions from phase
			to phase are open and transparent public reviews.</p>

		<h4>
			<a name="6_2_1_Pre-Proposal"></a>6.2.1 Pre-proposal
		</h4>
		<div class="postit">
			See <a href="../pre-proposal-phase.php">guidelines and checklists</a>
			about writing a proposal.
		</div>
		<p>An individual or group of individuals declares their interest in,
			and rationale for, establishing a project. The EMO will assist such
			groups in the preparation of a project proposal.</p>
		<p>The pre-proposal phase ends when the proposal is published by EMO
				and announced to the membership by the EMO.</p>

		<h4>
			<a name="6_2_2_Proposal"></a>6.2.2 Proposal
		</h4>
		<div class="postit">
			See <a href="../proposal-phase.php">guidelines and checklists</a> about
			gathering support for a proposal.
		</div>
		<p>The proposers, in conjunction with the destination PMC and the
			community, collaborate in public to enhance, refine, and clarify the
			proposal. Mentors for the project must be identified
			during this phase.</p>
		<p>The proposal phase ends with a <a href="#6_3_1_Creation_Review">creation
			review</a>, or withdrawal. The proposal may be withdrawn by the proposers
			at any point before the start of a creation review. 
			The EMO will withdraw a proposal that has been inactive for
			more than six months.</p>

		<h4>
			<a name="6_2_3_Incubation"></a>6.2.3 Incubation
		</h4>
		<div class="postit">
			See <a href="../incubation-phase.php">guidelines and checklists</a>
			about incubation.
		</div>
		<p>The purpose of the incubation
			phase is to establish a fully-functioning open-source project. In
			this context, incubation is about developing the process, the
			community, and the technology. Incubation is a phase rather than a
			place: new projects may be incubated under any existing project.</p>
		<ul>
			<li>A project in the incubation phase can (and should) make releases;</li>
			<li>Top-level projects skip incubation and are immediately put into the mature phase;</li>
			<li>The incubation phase ends with a graduation review or a
				termination review.</li>
			<li>Designated <a href="#4_9_Incubators">permanent incubator projects</a> 
				remain perpetually in the incubation phase; they do not create releases, so 
				no reviews are required.</li>
		</ul>
		<p>Many Eclipse projects are proposed and initiated by individuals
			with extensive and successful software development experience. This
			document attempts to define a process that is sufficiently flexible
			to learn from all its participants. At the same time, however, the
			incubation phase is useful for new projects to learn the
			community-defined Eclipse-centric open source processes.</p>

		<div class="postit">
			See <a href="../parallel-ip-process.php">guidelines and checklists</a>
			for utilizing the Parallel IP Process.
		</div>
		<p>
			Only projects that are properly identified as being in the incubation
			phase (including designated <a href="#4_9_Incubators">permanent incubator
				projects</a>) may use the Parallel IP Process to reduce IP clearance
			process for new contributions.
		</p>

		<h4>
			<a name="6_2_4_Mature"></a>6.2.4 Mature
		</h4>
		<div class="postit">
			See <a href="../mature-phase.php">guidelines and checklists</a> about
			the mature phase.
		</div>
		<p>The project team has demonstrated that they are an open-source
			project with an open and transparent process; an actively involved
			and growing community; and Eclipse-quality technology. The project is
			now a mature member of the Eclipse community. Major releases continue
			to go through release reviews.</p>
			
		<h4>
			<a name="6_2_5_Top-Level"></a>6.2.5 [Reserved]
		</h4>

		<h4>
			<a name="6_2_6_Archived"></a>6.2.6 Archived
		</h4>
		<div class="postit">
			See <a href="../archived-phase.php">guidelines and checklists</a> for
			archiving projects.
		</div>
		<p>Projects that become inactive, either through dwindling resources
			or by reaching their natural conclusion, are archived. Projects can
			reach their natural conclusion in a number of ways: for example, a
			project might become so popular that it is absorbed into one of the
			other major frameworks. Projects are moved to archived status through
			a termination review.</p>
			
		<p>If there is sufficient community interest in reactivating an
			archived project, the project can start again with a creation review.
			As there must be good reasons to have terminated a project, the 
			creation review provides a sufficiently high bar to
			prove that those reasons are no longer valid.</p>

		<h3>
			<a name="6_3_Reviews"></a>6.3 Reviews
		</h3>
		<p>The Eclipse Development Process is predicated on open and
			transparent behavior. All major changes to Eclipse projects must be
			announced and reviewed by the membership-at-large. Major changes
			include the project phase transitions as well as the introduction or
			exclusion of significant new technology or capability. It is a clear
			requirement of this document that members who are monitoring the
			appropriate media channels (e.g., mailing lists or RSS feeds) not be
			surprised by the post-facto actions of the projects.</p>
		<p>
			For each review, the project leads prepare documentation
			for, and receive feedback from, the Eclipse membership.
		</p>
		<p>
			A review is a fairly comprehensive process. Gathering the material
			for a review and preparing the documentation is a non-trivial effort,
			but the introspection offered by this exercise is useful for the
			project and results are very useful for the entire Eclipse community.
			In addition, reviews have a specific relationship to the requirements
			of the <a href="<?php echo $ip_policy; ?>">Eclipse IP
				Policy</a>.
		</p>
		<p>All reviews have the same general process:</p>
		<ol>
			<li>Projects are responsible for initiating the appropriate reviews.
				However, if a project does not do so and the EMO believes a review
				is necessary, the EMO may initiate a review on the project's behalf.</li>
			<li>A review then continues with a project lead requesting
				that the EMO(ED) schedule the review.</li>
			<li>Prior to the start of the review period, a project lead
				provides the EMO with review documentation.
				<ul>
					<li>The review documentation material always includes a document
						that describes the review. The minimum contents of the document
						are specified by the individual review types.</li>
					<li>The review documentation must be available in a format that
						anyone in the Eclipse membership can review. PDF
						and HTML are acceptable single formats.</li>
					<li>The review documentation must have a correct copyright
						statement and license.</li>
					<li>The review documentation must be <em>archival quality</em>.
						This means that the materials must be comprehensible and complete
						on their own without requiring explanation by a human presenter,
						reference to a wiki, or to other non-archived web pages.</li>
				</ul></li>
			<li>The EMO announces the review schedule and makes the documentation
				available to the membership-at-large.</li>
		</ol>
		<p>The criteria for the successful completion of each type of review
			will be documented in writing by the EMO in guidelines made available
			via an Eclipse Foundation website. Such guidelines will include, but
			are not limited to the following:</p>
		<ol>
			<li>Clear evidence that the project has vibrant committer, adopter
				and user communities as appropriate for the type of review.</li>
			<li>Reasonable diversity in its committer population as appropriate
				for the type of review. Diversity status must be provided not only
				as number of people/companies, but also in terms of effort provided
				by those people/companies.</li>
			<li>Documented completion of all required due diligence under the <a
				href="<?php echo $ip_policy; ?>">Eclipse IP Policy</a>.</li>
			<li>For graduation and release reviews, the project
				must have a current project plan, in the format specified by the
				EMO, available to the community.</li>
			<li>Balanced progress in creating both frameworks and extensible,
				exemplary tools.</li>
			<li>Showcase the project's quality through project-team chosen
				metrics and measures, e.g., coupling, cyclomatic complexity,
				test/code coverage, documentation of extensions points, etc.</li>
		</ol>
		<p>The review period is open for no less than one week and usually no
			more than two weeks of generally accepted business days.</p>
		<ol>
			<li>The review begins with the EMO's posting of the review materials
				at the start of the review period</li>
			<li>The proper functioning of the Eclipse Development Process is
				contingent on the active participation of the Eclipse members and
				committers, especially in reviews, thus each review has an
				EMO-designated discussion and feedback communication channel: a
				forum/newgroup, a mailing list, or some other public forum.</li>
			<li>If a committer election is required for a review (for example,
				for a <a href="#6_3_1_Creation_Review">creation review</a>), then it
				is held simultaneously with the review period. Thus the election and
				the review will end at the same time, allowing quick and efficient
				provisioning of the resulting project.</li>
			<li>The EMO(ED) approves or fails the review based on the public
				comments, the scope of the project, and the purposes of the Eclipse
				Foundation as defined in the bylaws.</li>
			<li>The review ends with the announcement of the results in the
				defined review communication channel (the EMO(ED) will request that
				the project lead make this announcement).</li>
		</ol>
		<p>If any member believes that the EMO has acted incorrectly in
			approving or failing a review may appeal to the board of directors to review the
			EMO's decision.</p>

		<h4>
			<a name="6_3_1_Creation_Review"></a>6.3.1 Creation Review
		</h4>
		<div class="postit">
			See <a href="creation-review.php">guidelines and checklists</a> about
			creation reviews.
		</div>
		<p>The purpose of the creation review is to assess the community and
			membership response to the proposal, to verify that appropriate
			resources are available for the project to achieve its plan, and to
			serve as a committer election for the project's initial committers.
			The Eclipse Foundation strives not to be a repository of &quot;code
			dumps&quot; and thus projects must be sufficiently staffed for
			forward progress.</p>
		<p>The creation review documents must include short nomination bios of
			the proposed initial committers. These bios should discuss their
			relationship to, and history with, the incoming code and/or their
			involvement with the area/technologies covered by the proposal. The
			goal is to help keep any legacy contributors connected to new project
			and explain that connection to the current and future Eclipse
			membership, as well as justify the initial committers' participation
			in a meritocracy.</p>

		<h4>
			<a name="6_3_2_Graduation_Review"></a>6.3.2 Graduation Review
		</h4>
		<div class="postit">
			See <a href="graduation-review.php">guidelines and checklists</a>
			about graduation reviews.
		</div>
		<p>
			The purpose of the graduation review is to mark a project's change
			from the incubation phase to the mature phase. 
		</p>
		<p>The graduation review confirms that the project is/has:</p>
		<ul>
			<li>A working and demonstrable code base of sufficiently high quality.</li>
			<li>Active and sufficiently diverse communities appropriate to the
				size of the graduating code base: adopters, developers, and users.</li>
			<li>Operating fully in the open following the principles and purposes
				of Eclipse.</li>
			<li>A credit to Eclipse and is functioning well within the larger
				Eclipse community.</li>
		</ul>
		<p>A graduation review is generally <a href="#6_3_9_Combining_Reviews">combined</a>
			with a release review.</p>
		
		<h4>
			<a name="6_3_3_Release_Review"></a>6.3.3 Release Review
		</h4>
		<div class="postit">
			See <a href="release-review.php">guidelines and checklists</a> about
			Release Reviews.
		</div>
		<p>The purposes of a release review are: to summarize the
			accomplishments of the release, to verify that the IP Policy has been
			followed and all approvals have been received, to highlight any
			remaining quality and/or architectural issues, and to verify that the
			project is continuing to operate according to the principles and
			purposes of Eclipse.</p>

		<h4>
			<a name="6_3_4_Promotion_Review"></a>6.3.4 [Reserved]
		</h4>

		<h4>
			<a name="6_3_5_Continuation_Review"></a>6.3.5 [Reserved]
		</h4>

		<h4>
			<a name="6_3_6_Termination_Review"></a>6.3.6 Termination Review
		</h4>
		<div class="postit">
			See <a
				href="http://wiki.eclipse.org/Development_Resources/HOWTO/Review_Information_for_Project_Leads#Termination_.28Archive.29_Reviews">Termination
				Review &quot;How To&quot;</a> for more information.
		</div>
		<p>The purpose of a termination review is to provide a final
			opportunity for the committers and/or Eclipse membership to discuss
			the proposed archiving of a Project. The
			desired outcome is to find sufficient evidence of renewed interest
			and resources in keeping the project active.</p>

		<h4>
			<a name="6_3_7_Move_Review"></a>6.3.7 [Reserved]
		</h4>

		<h4>
			<a name="6_3_8_Restructuring_Review"></a>6.3.8 Restructuring Review
		</h4>
		
		<p>The purpose of a restructuring review is to notify the community of
			significant changes to one or more projects.
			Examples of &quot;significant changes&quot; include:</p>
		<ul>
			<li>Movement of significant chunks of functionality from one project
				to another.</li>
			<li>Modification of the project structure, e.g. combining multiple
				projects into a single project, or decomposing a single project into
				multiple projects.</li>
			<li>Change of project scope.</li>
		</ul>
		
		<h4>
			<a name="6_3_9_Combining_Reviews"></a>6.3.9 Combining Reviews
		</h4>

		<p>Reviews can be combined at the discretion of the PMC and EMO.
			Multiple projects may participate in a single review. Similarly,
			multiple review types can be engaged in simultaneously. A parent
			project may, for example, engage in an aggregated release review
			involving itself and some or all of its child projects; a
			consolidated restructuring review may move the code for several
			projects; or a release review may be combined with a graduation
			review. When multiple reviews are combined, the review documentation
			must explicitly state all of the projects and types of reviews
			involved, and include the required information about each.</p>

		<p>It should be noted that the purpose of combining reviews is to
			better serve the community, rather than to reduce effort on the part
			of the project (though it is fortunate when it does both). Combining
			a release and graduation review, or aggregating a release review of a
			project and several of it's child projects generally makes sense.
			Combining release reviews for multiple unrelated projects most likely
			does not.</p>

		<h3>
			<a name="6_4_Releases"></a>6.4 Releases
		</h3>

		<p>
			Any project, with exception of permanent incubators, may make a release. 
			A release may include the code from any subset of the project's descendants.
		</p>
		<p>
			<em>(Most of this section is borrowed and paraphrased from the
				excellent <a href="http://www.apache.org/dev/release.html">Apache
					Software Foundation Releases FAQ</a>. The Eclipse community has
				many of the same beliefs about Releases as does the Apache community
				and their words were already excellent. The Apache Software
				Foundation Releases FAQ is distributed under the <a
				href="http://www.apache.org/licenses/LICENSE-2.0">Apache License,
					Version 2.0</a>.)</em>
		</p>
		<p>Releases are, by definition, anything that is distributed outside
			of the  committers of a project. If users are being directed to
			download a build, then that build has been released (modulo the
			exceptions below). All projects and committers must obey the Eclipse
			Foundation requirements on approving any release.</p>
		<p>
			<em>(Exception 1: nightly and integration builds)</em> During the
			process of developing software and preparing a release, various
			nightly and integration builds are made available to the developer
			community for testing purposes. Do not include any links on the
			project website, blogs, wikis, etc. that might encourage
			non-early-adopters to download and use nightly builds, release
			candidates, or any other similar package (links aimed at
			early-adopters and the project's developers are both permitted and
			encouraged). The only people who are supposed to know about such
			packages are the people following the developer mailing list and thus
			are aware of the limitations of such builds.
		</p>
		<p>
			<em>(Exception 2: milestone and release candidate builds)</em>
			Projects are encouraged to use an agile development process including
			regular milestones (for example, six week milestones). Milestones and
			release candidates are &quot;almost releases&quot; intended for
			adoption and testing by early adopters. Projects are allowed to have
			links on the project website, blogs, wikis, etc. to encourage these
			outside-the-committer-circle early adopters to download and test the
			milestones and release candidates, but such communications must
			include caveats explaining that these are not official releases.
		</p>

		<ul>
			<li>Milestones are to be labeled <code>x.yMz</code>, e.g., 2.3M1
				(milestone 1 towards version 2.3), 2.3M2 (milestone 2 towards
				version 2.3), etc.</li>
			<li>Release candidates are to be labeled <code>x.yRCz</code>, e.g.,
				2.3RC1 (release candidate 1 towards version 2.3).</li>
			<li>Official releases are the only downloads allowed to be labeled
				with <code>x.y</code>, e.g., 0.5, 1.0, 2.3, etc.</li>
		</ul>
		<p>
			All official releases must have a successful <a
				href="#6_3_3_Release_Review">release review</a> before being made
			available for download.
		</p>
		<p>
			<em>(Exception 3: bug fix releases with no new features)</em> Bug fix
			releases (x.y.z, e.g., 2.3.1) with no new features over the base
			release (e.g., 2.3) are allowed to be released without an additional
			release review. If a bug fix release contains new features, then the
			project must have a full release review.
		</p>
		<p>Under no circumstances are builds and milestones to be used as a
			substitute for doing proper official releases. Proper release
			management and reviews is a key aspect of Eclipse quality.</p>
			
		<div class="postit">
			See <a
				href="http://wiki.eclipse.org/Development_Resources/HOWTO/Conforming_Incubation_Branding">Incubation Branding</a> for more information.
		</div>
		<p>Releases for projects in the incubation phase must be labeled
			to indicate the incubation status of the project.</p>

		<h3>
			<a name="6_5_Grievance_Handling"></a>6.5 Grievance Handling
		</h3>
		<p>When a member has a concern about a project, the member will raise
			that concern with the project's leadership. If the member is not
			satisfied with the result, the member can raise the concern with the
			parent project's leadership. The member can continue appeals up the
			project leadership chain and, if still not satisfied, thence to the
			EMO, then the executive director, and finally to the board of directors. All
			appeals and discussions will abide by the guiding principles of being
			open, transparent, and public.</p>
			
		<p>Member concerns may include:</p>
		<ul>
			<li>Out of scope. It is alleged that a project is exceeding
				its approved scope.</li>
			<li>Dysfunctional. It is alleged that a project is not
				functioning correctly or is in violation of one or more requirements
				of the Eclipse Development Process.</li>
			<li>Contributor appeal. It is alleged that a contributor who
				desires to be a committer is not being treated fairly.</li>
			<li>Invalid veto. It is alleged that a -1 vote on a review is
				not in the interests of the project and/or of Eclipse.</li>
		</ul>
		<p>A variety of grievance resolutions are available to the EMO up to,
			and including, rebooting or restarting a project with new Committers
			and leadership.</p>

		<h2>
			<a name="7_Precedence"></a>7. Precedence
		</h2>
		<p>In the event of a conflict between this document and a
			board of directors-approved project charter, the most recently approved document
			will take precedence.</p>

		<h2>
			<a name="8_Revisions"></a>8. Revisions
		</h2>
		<p>As specified in the bylaws, the EMO is responsible for maintaining
			this document and all changes must be approved by the board of directors.</p>
		<p>Due to the continued evolution of the Eclipse technology, the
			Eclipse community, and the software marketplace, it is expected that
			the Eclipse Development Process (this document) will be reviewed and revised
			on at least an annual basis. The timeline for that review should be
			chosen so as to incorporate the lessons of the previous annual
			coordinate release and to be applied to the next annual coordinated
			release.</p>
		<p>The EMO is further responsible for ensuring that all plans,
			documents and reports produced in accordance with this development
			process be made available to the membership at large via an
			appropriate mechanism in a timely, effective manner.</p>
		<h4>
			<a name="8_1_Revision"></a>8.1 Revision 2.7
		</h4>
		<p>This document was approved by the Eclipse Foundation Board of
			Directors in its meeting on [TBD]. It takes effect (replacing
			all previous versions) on [TBD].</p>
			
		<h4>
			<a name="8_2_History"></a>8.2 History
		</h4>
		<p>Changes made in this document: </p>
		<ul><?php echo getChanges(); ?></ul>
	</div>
	<!-- midcolumn -->

	<div id="rightcolumn">
		<div class="sideitem">
			<h6>See also</h6>
			<ul>
				<li><a href="<?php echo $pdf; ?>">PDF version of this
						document</a></li>
				<li><a href="<?php echo $previous; ?>">Previous version of this document</a>
				</li>
				<li><a href="<?php echo $diff; ?>">Changes made since the previous version
						of this document</a></li>
				<?= $commentary ? '' : '<li><a href="?commentary">This document with comments</a></li>' ?>
			</ul>
		</div>
	</div>

</div>
<!-- maincontent -->

<?php
	# Paste your HTML content between the EOHTML markers!	
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
