<?php
/**************************************************************************
 * Copyright (c) 2005,2017 Eclipse Foundation and others.
 *
 * This program and the accompanying materials are made available
 * under the terms of the Eclipse Public License 2.0 which accompanies
 * this distribution, and is available at http://eclipse.org/legal/epl-2.0
 **************************************************************************/
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());

$pageTitle = "Approved Licenses for Non-Code, Example, and Other Content";
$pageKeywords = "license, content";
$pageAuthor = "Mike Milinkovich";

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

	<p>December 6, 2017</p>

	<p>
		The following licenses have been approved by the Board of Directors
		for use with Non-Code Content, as that term is defined in the <a
			href="termsofuse.php">Eclipse.org Terms of Use</a>.
	</p>

	<ol>
		<li>the <a href="/legal/epl-2.0">Eclipse Public License 2.0</a>,
		</li>

		<li>the <a href="../org/documents/epl-v10.php">Eclipse Public License
				1.0</a>,
		</li>
		<li>the <a href="http://creativecommons.org/licenses/by-sa/3.0/"
			target="_blank">Creative Commons Attribution-Share Alike 3.0
				(Unported) License</a>,
		</li>
		<li>the <a href="http://creativecommons.org/licenses/by/3.0/"
			target="_blank">Creative Commons Attribution 3.0 (Unported) License</a>,
		</li>
		<li>the <a href="http://creativecommons.org/licenses/by-sa/4.0/"
			target="_blank">Creative Commons Attribution-Share Alike 4.0
				(International) License</a>, or
		</li>
		<li>the <a href="http://creativecommons.org/licenses/by/4.0/"
			target="_blank">Creative Commons Attribution 4.0 (International)
				License</a>.
		</li>
	</ol>
	<br />
	<p>In addition, the following licenses have been approved by the Board
		of Directors for use with example code or build scipts and artifacts
		within Eclipse projects.</p>
	<ol>
		<li>the <a href="/legal/epl-2.0">Eclipse Public License 2.0</a>,
		</li>
		<li>the <a href="../org/documents/epl-v10.php">Eclipse Public License 1.0</a>,
			or
		</li>
		<li>the <a href="../org/documents/edl-v10.php">Eclipse Distribution
				License</a> (EDL).
		</li>
	</ol>
	<br />
	<p>
		For additional details on the definition of example code or build
		scipts and artifacts and how to seek PMC approval for using the EDL,
		please refer to the <a
			href="../org/documents/Licensing_Example_Code.pdf">policy document</a>.
	</p>
	<br />

</div>
<div id="rightcolumn">
	<div class="sideitem">
		<h6>Related Links</h6>
		<ul>
			<li><a href="index.php">Legal resources</a></li>
			<li><a href="guidetolegaldoc.php">Guide to legal documents</a></li>
		</ul>
	</div>
</div>
<?php
$html = ob_get_contents();
ob_end_clean();
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
