<?php
/**
 * Copyright (c) 2005, 2018 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
 *
 * Contributors:
 * Eric Poirier (Eclipse Foundation)
 */
?>

<div id="maincontent">
  <div id="midcolumn">
    <h1><?php echo $pageTitle; ?></h1>
    <p>Legal resource page for the Eclipse Foundation.</p>
    <blockquote>
      <ul>
        <li><a href="#GettingStarted" class=jump>Getting Started</a></li>
        <li><a href="#Agreements" class=jump>Agreement and Licenses</a></li>
        <li><a href="#Trademarks" class=jump>Privacy and Trademarks</a></li>
        <li><a href="#CommitterAgreements" class=jump>Committer Agreements</a></li>
        <li><a href="#Committers" class=jump>Committer Resources</a></li>
      </ul>
    </blockquote>
    <div class="homeitem3col">
      <h3>
        <a name="GettingStarted"></a>Getting Started
      </h3>
      <ul>
        <li>The <a href="guidetolegaldoc.php">Guide to the Legal Documents</a>
          provides an in-depth look at the many legal documents related to
          the Eclipse open source community. This content is of value to
          committers, contributors, redistributors of Eclipse content,
          developers of Eclipse-based products and users of Eclipse
          technologies;
        </li>
        <li>The <a href="epl-2.0">Eclipse Public License</a> (EPL) is the
          default license for Eclipse Project (please see the <a
            href="/org/documents/epl-2.0/faq.php">Eclipse Public License
          Frequently Asked Questions</a>);
        </li>
        <li>The <A href="legalfaq.php">Eclipse Foundation Legal Frequently
          Asked Questions</A> answers some of the commonly asked questions
          about Eclipse.org licensing, contributions, working as a committer,
          and cryptography;
        </li>
        <li><a href="licenses.php">Third Party Content Licenses</a> provides
          a list of licenses that are approved for third party content used
          by Eclipse projects; or
        </li>
        <li>For other questions, email: <a href="mailto:license@eclipse.org">license@eclipse.org</a>.
        </li>
      </ul>
    </div>
    <div class="homeitem3col">
      <h3><a name="Agreements"></a>Agreements and Licenses</h3>
      <ul>
        <li><a href="termsofuse.php">Web Site Terms of Use:</a>
          By accessing, browsing or using this web site, you acknowledge that you have
          read, understood, and agree to be bound by the terms and conditions
          contained in this agreement.
        </li>
        <li><a href="epl-2.0">Eclipse Public License</a> (EPL):
          The fundamental license document for the Eclipse projects and community.
        </li>
        <li><A href="../org/documents/edl-v10.php">Eclipse Distribution License</A> (EDL):
          The BSD license used by some Eclipse projects which require dual-licensing along with the EPL.
          Other than for <a href="noncodelicenses.php">example code or build scripts</a>.
        </li>
        <li><a href="ECA.php">Eclipse Contributor Agreement:</a>
          If you are contributing code or documentation to Eclipse Foundation projects you are
          required to complete this agreement.
        </li>
        <li><a href="DCO.php">Developer Certificate of Origin:</a>
          If you are contributing code or documentation to Eclipse Foundation projects, and using
          the git signed-off-by mechanism, you are agreeing to this certificate.
        </li>
        <li><a href="copyright.php">Copyright Agent:</a>
          Contact information for the Eclipse Foundation's Copyright Agent.
        </li>
        <li><A href="epl/notice.php">Eclipse Foundation Software User Agreement:</A>
          By downloading builds or accessing Eclipse Foundation source code repositories, you
          acknowledge that you have read, understood, and agree to be bound by the
          terms and conditions contained in this agreement.
        </li>
        <li><a href="noncodelicenses.php">Approved Licenses for Non-Code, Example, and Other Content:</a>
          The Board of Directors has approved the use of certain licenses for specific types of
          content on eclipse.org.
        </li>
        <li><A href="updatemanager.php">Eclipse Foundation Update Manager Agreement:</A>
          If you package &quot;downloadable features&quot; to be installed
          from your web site using the Eclipse Update Manager, you must read,
          understand, and agree to the terms and conditions contained in this agreement.
        </li>
        <li><a href="efsl.php">Eclipse Foundation Specification License:</a>
          The license used by Eclipse Foundation specifications created under the Eclipse Foundation Specification Process.
        </li>
        <li><a href="tck.php">Eclipse Foundation TCK License:</a>
          The binary license used by Technology Compatibility Kits to demonstrate compatibility with their corresponding Specifications.
        </li>
      </ul>
    </div>
    <div class="homeitem3col">
      <h3><a name="Trademarks"></a>Privacy and Trademarks</h3>
      <ul>
        <li><A href="privacy.php">Privacy Policy:</A>
          Your privacy is important to us. This statement discloses the information practices for this web site, including what type of
          information is gathered and tracked, how the information is used, and with whom the information is shared.
        </li>
        <li><A href="logo_guidelines.php">Trademark Usage Guidelines:</A>
          Guidelines on permissable use of Eclipse logos and trademarks.
        </li>
        <li><A href="Trademark_Transfer_Agreement.pdf">Trademark Transfer Agreement:</A>
          Pre-existing projects which move to the Eclipse Foundation will be required to execute this agreement
          to ensure that the Eclipse Foundation has rights to any trademarks associated with the project name.
        </li>
        <li><A href="trademarkattributions.php">Trademark Attributions:</A>
          Content on this web site may make reference to trademarks requiring attribution.
        </li>
      </ul>
    </div>
    <div class="homeitem3col">
      <h3><a name="CommitterAgreements"></a>Committer Agreements</h3>
      <ul>
        <li><A href="committer_process/EclipseMemberCommitterAgreementFinal.pdf">Member Committer and Contributor Agreement:</A>
          This agreement is used by Member companies to cover all of their committers participating in Eclipse projects.
        </li>
        <li><A href="committer_process/EclipseIndividualCommitterAgreementFinal.pdf">Individual Committer Agreement:</A>
          This agreement is used by committers participating in Eclipse projects who are not covered by a Member
          Committer Agreement.
        </li>
      </ul>
      <div style="margin-left:2em">
        <h4>2019 Re-sign Exercise</h4>
        <p>The Eclipse Foundation has updated its standard contributor and
            committer agreements, and all our committers and contributors, as well
            as those members who have member committer agreements, will need to
            re-sign their agreement with us.
        </p>
        <ul>
          <li><a href="committer_process/re-sign">New Eclipse Foundation Committer and Contributor Agreements FAQ</a></li>
        </ul>
      </div>
    </div>
    <div class="homeitem3col">
      <h3><a name="Committers"></a>Resources for Committers</h3>
      <ul>
        <li><A href="EclipseLegalProcessPoster.pdf">Due Diligence Process:</A>
          This document provides a quick pictorial overview of the due diligence process.
        </li>
        <li><A href="../org/documents/Eclipse_Policy_and_Procedure_for_3rd_Party_Dependencies_Final.pdf">Third Party Dependencies:</A>
          This document contains the guidelines for the review of third-party dependencies.
        </li>
        <li><A href="committerguidelines.php">Committer Guidelines:</A>
          This document outlines the issues to be aware of and the processes one should follow when working as a committer on Eclipse.org projects.  A committer is a person
          that has been granted commit rights to systems on the Eclipse.org servers such as git repositories, web pages, download servers, mailing lists and so forth.
        </li>
        <li><A href="https://www.eclipse.org/projects/handbook/#ip-cq">Contribution Questionnaire:</A>
          A Contribution Questionnaires (CQ) is the main interface between Eclipse committers and the Intellectual Property Management Team.
          Prior to committing a significant contribution of content to an Eclipse Foundation project, the committer must fill out
          this questionnaire and submit it to  the Eclipse Management Organization (EMO) for approval. In addition to the EMO, the
          relevant PMC  must also provide a technical review and approval of the contribution. Follow the link to find out more about
          what we mean by &quot;significant contribution&quot;.
          Bug fixes or minor enhancements do not require PMC or EMO approval.
        </li>
        <li><A href="epl/about.php">&quot;About&quot; Templates:</A>
          This provides templates for the &quot;about.html&quot; (&quot;About&quot;) files used to describe
          EPL-licensed content.
        </li>
        <li><A href="copyrightandlicensenotice.php">Default Copyright and License Notice:</A>
          The standard copyright and license notice should appear in all source files where possible.  Variations on this notice may be required (for example where a license other than
          the EPL governs the use of the file).
        </li>
        <li><A href="https://www.eclipse.org/projects/handbook/#ip-iplog">IP Logs:</A>
          An IP Log is a record of the intellectual property contributions to a project. This includes such as a list of all committers, past and present, that have worked on the code and (especially) those who have made contributions to the current code base.
        </li>
        <li><A href="https://www.eclipse.org/projects/handbook/#elections">New Committer Process:</A>
          The process for project leads and PMC members to add additional
          committers to an existing project.
        </li>
      </ul>
    </div>
  </div>
</div>