<?php  																														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());    # All on the same line to unclutter the user's desktop'
/* 221934 - this page to remain on eclipse.org */

$pageTitle 		= "Projects: Explain the Projects Table";

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

ob_start();
?>
<div id="maincontent">
<div id="midcolumn">
        
<div class="homeitem3col">
<h3>Explanation of the Project Table</h3>
<p>All work at Eclipse is done in sub-projects and 
components organized under top-level projects. The 
top-level projects are managed by PMCs (project management committees).
<p>
While each Eclipse Project concentrates on a different technical
area, there are many common elements to the management across all the projects.
For example, each project has a 
<a href="/newsgroups/">newsgroup for user discussions</a> and a 
<a href="/mail/">mailing list for developer discussions</a>. 
Each project has a source code repository
(<a href="http://wiki.eclipse.org/Git">Git</a> or <a href="http://wiki.eclipse.org/SVN_Howto">SVN</a>) and a 
<a href="https://bugs.eclipse.org/bugs/">bug tracking system (Bugzilla)</a>.
<p>
The projects table on the <a href="/projects/">Projects page</a> is populated from
the <a href="/projects/dev_process/project-status-infrastructure.php">meta-data</a>
that the projects provide about the location of their various
development resources. <em>Missing resources in the table are caused by either the
project not providing the meta-data, or the project not having an instance of that
resource.</em>
<p>
The projects table columns are:<ul>
<li><b>Name</b> - the official name of the project</li>
<li><b>Project Information Page</b> - all the standard information about this project in one standard format web page;
project goals, newsgroups, mailing lists, releases, downloads, activity, etc.</li>
<li><b>Phase (Project Phase)</b> - the project's phase
 in the <a href="/projects/dev_process/development_process.php#6_2_Project_Lifecycle">development lifecycle</a>. 
 The major phases
are:<ul>
<li><img src="/projects/images/ok.gif"> mature
	<a href="/projects/dev_process/mature-phase.php">explain...</a>
<li><img src="/projects/images/egg.gif"> incubation
	<a href="/projects/dev_process/incubation-phase.php">explain...</a>
<li><img src="/projects/images/egg-redx.jpg"> incubation (non-conforming)
	<a href="/projects/dev_process/incubation-conforming.php">explain...</a>
</ul>
</li>
<li><b>Home</b> - the eclipse.org home web page for the project</li>
<li><b>Forum</b> - the project's forum for user discussions.</li>
<li><b>Ma (Mailing List)</b> - the project's mailing list(s) for developer discussions</li>
<li><b>Wiki</b> - the project's main wiki page</li>
<li><b>IP (Project IP Log)</b> - the project's current Intellectual Property Traceability Log.
<a href="/projects/dev_process/project-log.php">explain...</a></li>
</ul>
<p>
<div align="right" style="margin-right: 10px; margin-top: 10px;">
<a href="/projects/">return to main projects page</a>
</div>
</div>

<?php include( '../_commonFooter.php' ); ?>
</div><

<div id="rightcolumn">
<div class="sideitem">
			<h6>For Project Leads</h6>
			<p>If the project table does not show
			all of your project's resources, please make sure that your
			<a href="/projects/dev_process/project-status-infrastructure.php">project meta-data</a>
			is correct.
			</p>
</div>
</div>
</div>
<?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);
?>