<?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 		= "IP Database Access";
$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>IP Database Access</big></h1>
          
        <h2><b><big>Goals of this Program</big></b></h2>
        <p>This program allows up to three non-committers from Strategic and Enterprise members to access the Eclipse Contribution Questionnaire
        database, known as "IPZilla".  Committers do not need access to this program as they have access to IPZilla for their work
        by default.  Non-committers, such as IP Analysts and business decision makers, may wish to use IPZilla as a resource 
        since it contains conversations regarding over 1500 open source libraries and indications whether they are approved, 
        or not, for use on Eclipse projects.</p>
        
        <h2><b><big>How do I participate?</big></b></h2>
        <p>There are three steps to receive IPZilla access.
        <ol>
        <li>You must print, sign and FAX the <a href="./ipzilla.pdf">IPZilla Database Access Agreement</a> to 212 918 1619.  If you believe
        your organization may have already signed this document, contact us at <a href="mailto:membership@eclipse.org">membership@eclipse.org</a> to confirm.</li>
        <li>You must create a 
        <a href="https://bugs.eclipse.org/bugs/createaccount.cgi">bugzilla account</a> with the email address of 
        the person you wish to have access.</li>
        <li>Finally, email <a href="mailto:membership@eclipse.org">membership@eclipse.org</a> with the following information:
        <ul>
          <li>Name of person requiring access</li>
          <li>Email address that you used to create the <a href="https://bugs.eclipse.org/bugs/createaccount.cgi">bugzilla account</a></li>
          <li>Contact Phone Number</li>
          <li>Contact business address</li>
        </ul> 
        </li>
        </ol>
		</p>
		
          
        <h2><big><b>FAQ</b></big></h2>
		<b>How much does it cost?</b>
        <p>This is a free service free for Strategic and Enterprise Members only.
        </p>

        <b>My Company has Committers, why do I need this?</b>
        <p>Committers are entitled to use IPZilla as it relates to their project and specifically for their work as a committer
        on an Eclipse Project.  Strategic and Enterprise members may wish to have IP Analysts and business decision makers
        also have access to this data.  In other words, non-committers can have access to the data, and committers can 
        make internal business use of the data.
        </p>

		<b>How do I login?</b>
        <p>Once your account has been created and confirmed following the steps above, you visit 
        the <a href="https://dev.eclipse.org/ipzilla/">IPZilla Main Page</a>.
        </p>
        
        <b>Do you have an example of the kind of data available?</b>
        <p>The database contains the approval or rejection of over 1500 open source libraries requested 
        for use in Eclipse open source projects -- and the corresponding conversations related to those
        decisions.  This information could be high value to IP Analysts and business decision makers
        trying to determine the risk profile of using some open source libraries.
        Email <a href="mailto:membership@eclipse.org">membership@eclipse.org</a> for more information.
        </p>
  
      
  </div></div>
<?php
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
