<?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">Eclipse Foundation 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="trademarks.php">Eclipse Foundation Trademarks:</A>
          The list of trademarks claimed by the Eclipse Foundation.
        </li>
        <li><A href="trademarks.php#attribution">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/EclipseMemberCommitterAgreement.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>