<?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'

$pageTitle 		= "Technology Project";
$pageKeywords	= "technology";
$pageAuthor		= "Bjorn Freeman-Benson Nov 20/05";

ob_start();
?>		
    <div id="maincontent">
	<div id="midcolumn">
        <h1><?= $pageTitle ?></h1>

<h2>The Technology Top-Level Project</h2>       
<p>The Eclipse Technology Project encapsulates three separate activity streams, 
Research, Incubators, and Education. All three streams are overseen 
by a single <a href="team-leaders.php">Project Management Committee (PMC)</a>. The PMC
<a href="pmc-minutes.php">publishes its minutes</a>. The work is done 
in subprojects working against a <a href="http://dev.eclipse.org/viewcvs/index.cgi?cvsroot=Technology_Project">CVS repository</a>. The Eclipse 
<a href="technology-charter.html">Technology Project Charter</a> describes the organization of the 
project, as well as roles and responsibilities of the participants.</p>

<a href="/projects/listofprojects.php#technology"><img src="http://dev.eclipse.org/huge_icons/categories/applications-internet.png" align="left" hspace="5" border="0"></a><p>
For a complete list of the Technology Projects, please see the 
<a href="/projects/listofprojects.php#technology">"Eclipse Technology Project" section of the list of all Eclipse projects</a>.
</p>

<p>For technical discussions and questions, please go to the <a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology">eclipse.technology newsgroup</a>
 (for access see the <a href="/newsgroups/">newsgroups page</a>). If you are are developer and 
 want to participate in discussions relating to the implementation of the subprojects, there 
 are developer <a href="/mail/">mailing lists</a> and <a href="/newsgroups/">newsgroups</a> created for each of the projects. Downloads are 
 available from the project pages and the <a href="/downloads/">main downloads page</a>.</p>
       
<h2><a href="archived.php">The Technology Project Archives</a></h2>
<p>Projects under the Eclipse Technology Project have limited lifecycles. 
Unlike the other top-level Projects, the Technology Projects are meant 
to be technology explorations or incubators. When these projects have 
explored, proved, or disproved their associated technologies, the 
project comes to its <a href="archived.php">natural end</a>. For some projects, this end is 
a paper publishing the research results; for others, this end is 
to be incorporated into the base technology of another top-level 
project.
</p>


      </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);
?>
