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


	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse CLA FAQ";
	$pageKeywords	= "legal, documents, about, contributor, license, agreement, IP, intellectual property, CLA";
	$pageAuthor		= "Mike Milinkovich";
	
	# 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", 1);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 1);

	# End: page-specific settings
	#

	ob_start();
	?>
    <div id="midcolumn">
    <h1><?php echo $pageTitle; ?></h1>
    <p>Last updated June 27, 2013</p>
    <p>The Eclipse Foundation <a href="CLA.php">Contributor License Agreement</a> (CLA) is a key document in
    the process of managing intellectual property contributions to Eclipse projects. This FAQ is 
    intended to help explain what they are, and how they are used.</p>
	<ol>
		<li><strong>What does the CLA do?</strong><br/><br/>
		The purpose of the CLA is to provide a written record that you have agreed to 
		provide your contributions of code and documentation under the licenses used by 
		the Eclipse project(s) you're contributing to. It also makes it clear that you
		are promising that what you are contributing to Eclipse is code that you wrote, and 
		you have the necessary rights to contribute it to our projects. And finally, it documents a 
		commitment from you that your open source contributions will be permanently on
		the public record.</li>
		
		<li><strong>Why is a CLA necessary?</strong><br/><br/>
		It's basically about documenting the provenance of all of the intellectual property coming
		into Eclipse. We want to have a clear record that you have agreed to the terms under which 
		the Eclipse community has agreed to accept contributions.</li>
		
		<li><strong>Does this means that the Eclipse Foundation will own my code?</strong><br/><br/>
		No. The Eclipse CLA does not include a license or assignment to the Eclipse Foundation. Unlike
		many other open source communities or projects, Eclipse simply wants you to license your
		contributions under the open source license(s) used by the project. So you (or your employer)
		will continue to own your code. </li>
		
		<li><strong>Why do you need to know my personal information?</strong><br/><br/>
		As part of our open source project recordkeeping, we want to be able to link every line
		of code to the people who contributed them. In the unlikely event of a dispute over
		authorship or copyright provenance, Eclipse needs to be able to demonstrate when the code
		arrived at Eclipse, how we acquired the rights to that code, and who wrote it.</li>
		
		<li><strong>How long is the CLA good for?</strong><br/><br/>
		The CLA is good for three years, after which it will be expired and you will be asked
		to complete a new one. However, if your personal information changes (e.g. your address
		or your employer), we ask that you invalidate your current CLA and complete a new one.</li>
		
		<li><strong>Does the CLA replace my committer agreement?</strong><br/><br/>
		No. Your Committer Agreement is the agreement that allows you to have write access to the Eclipse Foundation
		source code repositories. The CLA is intended for people who are not committers who wish to make 
		contributions to Eclipse projects.</li>
		
		<li><strong>I am an Eclipse committer. Do I need to sign a CLA?</strong><br/><br/>
		Maybe. You do not need to sign a CLA to work on the projects for which you are a committer.
		However, if you want to make contributions to an Eclipse project for which you are <strong>not</strong>
		a committer, you will need a CLA.
		</li>		
				
		<li><strong>What happens if I don't sign the CLA?</strong><br/><br/>
		Nothing, except you won't be allowed to contribute to open source
		projects at Eclipse.</li>
		
		<li><strong>Eclipse has been around a long time. Why are you doing CLAs now?</strong><br/><br/>
		We want to make it easier for you to contribute to Eclipse projects. Previously, we have been asking contributors
		to agree to the equivalent of the CLA via Bugzilla or Gerrit on each and every contribution. 
		Moving to CLAs is intended to streamline that process, and make it easier for contributions to
		be accepted by Eclipse projects.</li>

		<li><strong>How do I sign a CLA?</strong><br/><br/>
		Log into the <a
					href="https://projects.eclipse.org/user/login/sso">Eclipse projects forge</a>
		(you will need to create an account with the Eclipse Foundation if you have not
			already done so); click on "Contributor License Agreement"; and Complete the form.
			Be sure to use the same email address when you register for the
				account that you intend to use on Git commit records.</li>
	</ol>
  	</div>
	<div id="rightcolumn">
		<div class="sideitem">
			<h6>Related Links</h6>
			<ul>
			<li><a href="CLA.php">Contributor License Agreement</a></li>
			<li><a href="CoO.php">Certificate of Origin</a></li>
			<li><a href="index.php">Legal resources</a></li>
			<li><a href="guidetolegaldoc.php">Guide to legal documents</a></li>
			<li><a href="index.php#Committers" class=jump>Committer Resources</a></li>
			</ul>
		</div>
	</div>
  

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