<?php
/**
 * Copyright (c) 2005, 2020 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
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>

<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>
        <li><a href="usergroups.php">Eclipse Foundation User Group Trademark License Agreement:</a>
          Guidelines and agreements for user groups that are based on Eclipse Foundation projects 
          and/or working groups. 
        </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>
      <p>For Eclipse projects (and the open source world in general), <em>committers</em> are the ones who hold the keys. 
      Committers decide what code goes into the code base, they decide how a project builds, and they ultimately 
      decide what gets delivered to the adopter community. Committer status is assigned following a demonstration
      of merit (generally a record of high-quality contribution to a project) and a successful 
      <a href="/projects/handbook#elections-committer">committer election</a>.</p>
      <p>Committer status is assigned on a project-by-project basis. That is, individuals have committer rights only 
      on those projects for which they hold committer status. For all other projects, they are contributors.</p>
      <p>Our committer provisioning process is automated: new committers will&mdash;following their successful
      election&mdash;be contacted by email to engage in our <em>agreement workflow</em> (also referred to as our
      <a href="https://www.eclipse.org/projects/handbook/#paperwork">paperwork process</a>), which guides
      them through signing those agreements that they need. The agreements are provided below for convenience.</p>
      <ul>
        <li><A href="committer_process/EclipseMemberCommitterAgreementFinal.pdf">Member Committer and Contributor Agreement:</A>
          The Member Committer and Contributor Agreement (MCCA) is used by organizations that are members of the 
          Eclipse Foundation to cover all of their employees who participate in Eclipse Foundation projects as committers. 
        </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>
          <li><a href="committer_process/re-sign">New Eclipse Foundation Committer and Contributor Agreements FAQ</a></li>
        </ul>
    </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>