<?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 
          <a href="/membership">members of the Eclipse Foundation</a> to cover all of their employees who participate 
          in Eclipse Foundation open source projects as committers. 
        </li>
        <li><A href="committer_process/EclipseIndividualCommitterAgreementFinal.pdf">Individual Committer Agreement:</A>
          This agreement is used by committers participating in Eclipse open source projects whose employers are 
          either not <a href="/membership">members of the Eclipse Foundation</a> or are members that have not signed the
          Member Committer and Contributor Agreement.
        </li>
        <li><a href="EmployerConsentAgreementForSpecificationProjects-v1.0.pdf">Employer Consent Agreement for Eclipse 
          Foundation Specification Projects:</a>
          The Employer Consent Agreement for Eclipse Foundation Specification Projects ("Employer Consent Agreement") 
          is to be completed by the employer of a committer who is seeking Individual Committer status on an Eclipse 
          Foundation <a href="/projects/efsp">Specification Project</a> operating under the purview of an Eclipse Foundation
          Working Group. Note that this form is only required when the employer is not a participant of the 
          corresponding <a href="/org/workinggroups">working group</a>.
        </li>
        <li><a href="committer_process/re-sign">New Eclipse Foundation Committer and Contributor Agreements FAQ</a>
          In 2018, we updated our standard contributor and committer agreements, and all our committers and contributors, 
          as well as those members who have member committer agreements, were required to re-sign their agreement with us.
          This FAQ is mostly historical at this point, but does contain some generally useful information.
        </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>