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

	#*****************************************************************************
	#
	# charter.php
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse RT Project Charter";
	$pageKeywords	= "RT PMC charter";
	$pageAuthor		= "";
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);

	# End: page-specific settings
	#
		
	# Paste your HTML content between the markers!	
ob_start();
?>		

	<div id="midcolumn">
		<h1><?= $pageTitle ?></h1>
          <p>This charter was developed in accordance with the <a href="http://www.eclipse.org/projects/dev_process/proposal-phase.php" class="external text" title="http://www.eclipse.org/projects/dev_process/proposal-phase.php" rel="nofollow">Eclipse Development Process</a> and outlines the mission, scope, organization, and development process for the Eclipse Runtime Project (Eclipse RT). This document extends the <a href="http://www.eclipse.org/projects/dev_process/Eclipse_Standard_TopLevel_Charter_v1.1.php" class="external text" title="http://www.eclipse.org/projects/dev_process/Eclipse_Standard_TopLevel_Charter_v1.1.php" rel="nofollow">Eclipse Standard Top-Level Charter v1.1</a>, and includes the required content and overrides which follow. It is anticipated that as the standard charter is updated, this charter will incorporate the changes and make adjustments as seen fit by the PMC, and with approval from the EMO and board of directors.
</p>

<p class=bar>Overview</p>

<p>Since the creation of the Eclipse Rich Client Platform (RCP) and the adoption of Equinox and OSGi in 2004, interest in and use of Eclipse technologies in runtime scenarios has been steadily increasing. Initially, the focus of these runtime efforts was on desktop or client technologies.  The community has steadily found new and innovative uses for Equinox and the Eclipse platform in areas such as <a href="http://www.eclipse.org/ercp/" class="external text" title="http://www.eclipse.org/ercp/" rel="nofollow">devices</a>, <a href="http://www.eclipse.org/rap/" class="external text" title="http://www.eclipse.org/rap/" rel="nofollow">rich internet applications</a> and <a href="http://www.eclipse.org/equinox/server/" class="external text" title="http://www.eclipse.org/equinox/server/" rel="nofollow">servers</a>. 

</p><p>Eclipse RT is an open source collaborative software development project dedicated to supporting and enhancing these efforts and providing a generic, extensible, standards-based runtime platform.
</p><p>This document describes the composition and organization of the project, roles and responsibilities of the participants, and development process for the project.
</p>


<p class=bar>Mission</p>
<p>Eclipse RT is designed to foster, promote and house runtime efforts in the Eclipse community.  These efforts strive towards the common goal of providing a uniform component model across a wide variety of computing environments.  The Equinox framework and OSGi form the basis of this infrastructure.  
</p><p>Eclipse RT projects target "clients" and "servers" across embedded devices, desktops, and enterprise systems, and provide those intermediate software services which enable applications to be more easily and concisely constructed across these environments.  This supports and extends the Equinox vision of a consistent programming and component model where developers create application domain code that runs on a variety of platforms.  
</p><p>By providing a consistent symmetric architecture, Eclipse RT technology enables developers to focus on the business problem at hand and still have many system architecture options available at deployment time.
</p>

<p class=bar>Scope</p>

<p>Concretely, Eclipse RT projects supply the Equinox implementation of the OSGi core framework specification and a set of bundles that implement additional services and other infrastructure for running applications on the Equinox framework and OSGi-based systems.  The nature of this work is scoped as follows:
</p>
<ul><li> Developing and delivering the OSGi framework implementation used for all of Eclipse. 
</li><li> Implementation of all aspects of the OSGi specification (including but not limited to the Enterprise Expert Group, Mobile Expert Group and Vehicle Expert Group work).
</li><li> Investigation and research related to future versions of OSGi specifications and related runtime issues.
</li><li> Implementation of key framework services and extensions needed for running Eclipse (e.g., the Eclipse Adaptor, Extension registry) and deemed generally useful to systems using Equinox.
</li><li> All implementations must be based on OSGi and run on Equinox.
</li><li> The implementation of generally applicable runtime standards (e.g., OASIS, JCP).
</li><li> Incidental tooling efforts to enable or facilitate particular runtime functions in conjunction with (e.g., as a component of) a sub-project.
</li></ul>

<p class=bar>Out of Scope</p>

<ul><li> Major tooling efforts
</li><li> Industry-specific vertical technologies
</li></ul>
			<p>&nbsp;</p>
		
	</div>

<?php
	include $_SERVER['DOCUMENT_ROOT'] . "/rt/global-links.html";
	if (file_exists("dir-links.html")) {include "dir-links.html";}
?>

<?php
	$html = ob_get_contents();
	ob_end_clean();

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