<?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="documents/eclipse-openvsx-publisher-agreement.pdf">Eclipse Foundation Open VSX Publisher Agreement: </a>
        The license agreement Eclipse Open VSX Registry publishers must agree to before publishing extensions for VS Code compatible editors on <a href="https://open-vsx.org/">open-vsx.org</a>. You may read the Open VSX Registry FAQ <a href="open-vsx-registry-faq/">here</a>.
        </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>The specific agreements required depends on the nature of the project. For committers on an open source
      <em>software</em> project (i.e., most Eclipse Foundation projects), the 
      <a href="https://www.eclipse.org/projects/handbook/#paperwork-documents">traditional agreements</a> are required. 
      For committers on an open source <em>specification</em> project, additional 
      <a href="https://www.eclipse.org/projects/handbook/#specifications-agreements">working group agreements</a> are required.</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><strong>Our committer provisioning process is automated</strong>: 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 and contributors. This agreement allows employees 
          of our member organizations to participate in Eclipse Foundation projects without any additional paperwork. 
        </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>