<?php
/*******************************************************************************
 * Copyright (c) 2008, 2015 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, 2015 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 = "Eclipse Development Process 2015";
$pageAuthor = "Wayne Beaton";
$pageKeywords = "EDP, Eclipse Development Process";

$App->addExtraHtmlHeader("<base href=\"https://www.eclipse.org/projects/dev_process/\">");

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

$previous = "/projects/dev_process/development_process_2014";
$diff = "/projects/dev_process/development_process_2015/diff.php";
$pdf = "/projects/dev_process/development_process_2015/development_process_2015.pdf";
$bylaws = "/org/documents/eclipse_foundation-bylaws.pdf";
$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>
							<li><a href="#2_5_Freedom_of_Action">2.5 Freedom of Action</a></li>
						</ul></li>
					<li><a href="#3_Requirements">3 Requirements</a>
						<ul>
							<li><a href="#3_1_Requirements_and_Guidelines">3.1 [Reserved]</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>
							<li><a href="#4_10_Plans">4.10 Project Plans</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>
								<ul>
									<li><a href="#6_2_1_Pre-Proposal">6.2.1 Pre-proposal Phase</a></li>
									<li><a href="#6_2_2_Proposal">6.2.2 Proposal Phase</a></li>
									<li><a href="#6_2_3_Incubation">6.2.3 Incubation Phase</a></li>
									<li><a href="#6_2_4_Mature">6.2.4 Mature Phase</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>
								</ul>
							</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.8</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>

		<p>
			This document defines terms used elsewhere in Eclipse governance documents
			including the Bylaws, Membership Agreement, and IP Policy.
		</p>

		<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 applications, 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 high-quality frameworks capable of supporting the
				building of commercial grade products on top of them; and</li>
			<li>ship extensible, exemplary applications 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 applications 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
				community is the only way to prove that an Eclipse project is
				providing extensible frameworks and applications 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 applications 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, applications, 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>
		<h3>
			<a name="2_5_Freedom_of_Action"></a>2.5 Freedom of Action
		</h3>
		<p>
			Projects are required to engage in practices that ensure the continued
			viability of the project, independent from the continued availability of external
			resources and services, or continued participation on any single individual,
			organization, or group.</p>
		<p>
			In practical terms, projects are required to use resources and services
			approved by the Eclipse Foundation. This includes (but is not limited to)
			all source code management, distribution channels for artifacts, issue
			tracking, documentation, and public communication channels.</p>

		<h2>
			<a name="3_Requirements"></a>3. Requirements
		</h2>
		<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 development guidelines to advance the
			creation, evolution, promotion, and support of the open source projects;
			and to cultivate both a community and an ecosystem of
			complementary products and services.</p>
		<p>
			Projects that fail to perform the
			required behaviors will be terminated by the EMO.</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>

		<h3>
			<a name="3_1_Requirements_and_Guidelines"></a>3.1 [Reserved]
		</h3>

		<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; ?>#page=19">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 leadership of the parent project (if any), the PMC
        leads and PMC members for the top-level project, the EMO, and the EMO(ED).</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>

		<p>
			In the unlikely event that a member of the PMC becomes disruptive
			to the process or ceases to contribute for an extended period, the
			member may be removed by the unanimous vote of the remaining PMC members,
			subject to approval by the EMO. Removal of a PMC Lead requires approval
			of the Board.</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
				Platform Release Plan in the form of 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; renewal is based on continued
				participation in mentoring or other council business.</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>

		<h3>
			<a name="4_10_Plans"></a>4.10 Project Plans
		</h3>

		<p>
			Projects are required to make a project plan available to their community
			at the beginning of the development cycle for each major and minor release.
			The plan may be as simple as a short description and a list of issues, or
			more detailed and complex. Subprojects may opt to include their plans with
			those of their parent project.
		</p>

		<p>
			Project Plans must be delivered to the community through communication
			channels approved by the EMO. The exact nature of the project plan varies
			depending on numerous variables, including the size and expectations of the
			communities, and requirements specified by the PMC.
		</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
			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 one mentor.
			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 Phase
		</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 Phase
		</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 Phase
		</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 Phase
		</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 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 not be
			surprised by the post-facto actions of the projects.</p>

		<p>
			Projects are responsible for initiating the appropriate reviews.
			If it is determined to be necessary, the project leadership chain
			(e.g. the PMC or EMO) may initiate a review on the project's behalf.</p>

		<p>All reviews have the same general process:</p>
		<ol>
			<li>The project team will complete all required due diligence under the <a
				href="<?php echo $ip_policy; ?>">Eclipse IP Policy</a> prior
				to initiating the review.</li>
			<li>A project representative (project lead or committer) assembles
				review documentation.</li>
			<li>A project representative presents the review documentation to
				the project's PMC along with a request to proceed with the review
				and for approval of the corresponding documentation.</li>
			<li>Upon receiving approval from the PMC, a project representative
				makes a request to the EMO to schedule the review.</li>
			<li>The EMO announces the review schedule and makes the documentation
				available to the membership-at-large.</li>
			<li>The EMO 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>
		</ol>
		<p>
			The review documentation requirements, and criteria for the successful
			completion of each type of review
			will be documented by the EMO. PMCs may establish additional success
			criteria.</p>

		<p>
			The review period is open for no less than one week and usually no
			more than two weeks of generally accepted business days.
			The review ends with the announcement of the results in the
			defined review communication channel.</p>

		<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 its 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.8
		</h4>
		<p>This document was approved by the Eclipse Foundation Board of
			Directors in its meeting on November 2/2015. It takes effect (replacing
			all previous versions) on December 2/2015.</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);
?>
