<?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("../_projectCommon.php");    # All on the same line to unclutter the user's desktop'

$pageTitle 		= "Eclipse Strategic Member Custom Delivery Installer Program";
$pageKeywords	= "";
$pageAuthor		= "";

ob_start();
?>
<style type="text/css">
h2 {
border-bottom: solid
}
h3 {
border-bottom: thin dotted
}
</style>

    <div id="maincontent">
	<div id="midcolumn">
        <h1><big>Eclipse Strategic Member Custom Delivery Installer Program</big></h1>
          
        <h2><b><big>Goals of this Program</big></b></h2>
        <p>This program has three main goals:</p>
        
        <ol>
           <li>Improve the download experience for users,</li>
           <li>Increase the visibility of projects, especially those that are not "the Java IDE" by which Eclipse is mostly known,</li>
           <li>Increase the value of strategic membership.</li>
          
        </ol>

<h2>Program</h2>
<p>Over the next several months the Eclipse Foundation will be offering visitors to Eclipse.org the ability
to download and install Eclipse using Wizard launched from the eclipse.org/downloads page.  This will
initially be offered to a small audience (such as "Friend of Eclipse") and over time offered to 
a broader audience.  The wizard allows the user to 
select the Eclipse projects they want to download and install. Users will 
start (first wizard page) by selecting one a small number of standard packages. The small number of subsequent wizard 
pages will step the user through choosing additional features/plug-ins from Eclipse projects (also, the user can remove 
pre-selected default features added by the initial package he or she selected). 
</p>

<p>The final wizard page will show a list of 
participating strategic members as well as a "download-now-with-no-further-features" button. The strategic members 
will be listed in the wizard with a small company logo/icon and brief text explaining what additional
software is available via the Strategic Member.</p>


<p>If the user continues to strategic Company X, the wizard will send the user's selections to the member's wizard 
url (as specified by the member) in a pre-defined data payload. The member will then continue the wizard allowing 
the user to add additional features/plug-ins from their library. At the end of the wizard, the user 
presses the "Download and install" button to download and install the complete set of Eclipse projects (from the 
Eclipse Foundation's wizard) and the member's features/plug-ins (from the their X wizard continuation). We explicitly 
allow participating strategic members to include both free-ware, trial-ware, and pay-ware features and plug-ins 
in the wizard, i.e., there is no requirement that the member's wizard include only open source or free software.</p>

<p>Strategic Members who participate in the program can expect to sign an additional legal form agreeing that the Foundation 
can display their logo and/or company name in the wizard.</p>


<h3>Participation</h3>		
<p>This is a tool supplied by the Eclipse Foundation and thus the Eclipse Foundation staff are responsible for choosing 
the technology behind the wizard as well as the initial package names and content and the subsequent pages and which projects 
are included on each page. The Eclipse Foundation staff will request advice on these decisions from the PMCs and project leads, 
but the final decisions are those of the Executive Director.</p>

<p>The Eclipse Foundation provides different programs for different levels of membership.  The eclipse.org downloads page is 
a valuable strategic asset of the Eclipse Foundation and thus participation in this program is limited to Strategic Members 
of the Eclipse Foundation. </p>

<p>Strategic Members are eligible to participate as soon as they are valid members and are removed from the 
program as soon as they are no longer strategic members. Strategic members can participate by contacting 
<a href="mailto:membership@eclipse.org">membership@eclipse.org</a>. The Eclipse Foundation IT staff will provide 
documentation on the payload format and will request the member's wizard url, logo, and tag line. After 
verifying the member's wizard url with a set of unit tests, the IT staff will add the member to the final 
wizard page. The IT staff will periodically (every few months or when a bug is filed) run the unit tests 
against all the participating members' wizard urls and will remove any failing wizard urls (and their company 
logos, etc). If that happens, the IT staff will notify the company contact and work with that contact to 
restore their participation.</p>


<h3>Deployment Plan</h3>
<p>The Eclipse Foundation plans to start with a beta test of this service in early 2009. We will limit this beta 
test to Friends of Eclipse - non-Friends will be shown a "we're beta-testing a new service, sign up as a Friend 
to participate", while Friends will see the download button. When at least three Strategic Members are ready to 
participate, the Eclipse Founation will enable the final wizard page to "add additional features from Company X 
or Company Y or etc."</p>

<p>After verifying that the wizard works (server load, bandwidth load, handoffs to secondary wizards, good user 
experience, etc), we will enable to wizard for a larger beta test (anyone with a bugzilla account). We anticipate this 
second larger beta in the early spring.</p>

<p>The third step is to enable the wizard without restriction. We anticipate this "go live" mid 2009. 
It is important for the Eclipse Foundation IT staff to have the deployment completed as soon as possible 
so that we can detect and repair any scaling or user interface issues long before the "busy season" begins 
(it begins late in the calendar year and then scales rapidly from there through M4, M5, EclipseCon, the RCs, 
and the annual release).</p>


 </div></div>
<?php
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
