<?php
/**
 * Copyright (c) 2005, 2018, 2021 Eclipse Foundation and others.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 * Eric Poirier (Eclipse Foundation) - initial API and implementation
 */
?>
<div id="maincontent">
  <div id="midcolumn">
    <h1><?php print $pageTitle; ?></h1>
    <p>The Eclipse Foundation provides our global community of individuals and organizations with a
      mature, scalable, and business-friendly environment for open source software collaboration and
      innovation. The Foundation is home to the Eclipse IDE, Jakarta EE, and over 350 open source
      projects, including runtimes, tools, and frameworks for a wide range of technology domains
      such as the Internet of Things, automotive, geospatial, systems engineering, and many others.</p>
    <p>
      The Eclipse Foundation is a European-based international not-for-profit association supported
      by over 300 <a href="/membership">members</a> who value the
      Foundation&rsquo;s unique <a href="/org/workinggroups/">Working Group</a>
      governance model, open innovation processes, and <a href="http://events.eclipse.org/">community-building
        events</a>. Our members include industry leaders who have embraced open source as a <a
        href="/org/value"
      >key enabler for business strategy</a>.
    </p>
    <h2>Origins</h2>
    <p>
      The <a href="/eclipse/">Eclipse Project</a> was originally created by
      IBM in November 2001 and supported by a consortium of software vendors. The Eclipse Project
      continues to be used by millions of developers.
    </p>
    <p>The Eclipse Foundation was created in January 2004 as an independent not-for-profit
      corporation to act as the steward of the Eclipse community. The independent not-for-profit
      corporation was created to allow a vendor-neutral, open, and transparent community to be
      established around Eclipse.</p>
    <h2>Structure</h2>
    <p>
      The Eclipse community consists of individual developers and organizations spanning many
      industries. The Foundation employs a full-time <a
        href="/org/foundation/staff.php"
      >professional staff</a> to provide services to the community. The Eclipse Foundation is funded
      by annual dues from our <a href="/membership">members</a> and governed
      by a <a href="/org/foundation/directors.php">Board of Directors</a>.
      Strategic Developers and Strategic Consumers hold seats on this Board, as do representatives
      elected by Add-in Providers and Open Source committers. Eclipse committers are typically
      employed by organizations or are independent developers that volunteer their time to work on
      the Eclipse projects.
    </p>
    <h2>Services</h2>
    <p>
      The Eclipse Foundation provides four key services to the Eclipse community: 1) <a
        href="/org/services/#IP_Management"
      >IP Management</a>, 2) <a href="/org/services/#Ecosystem">Ecosystem Development and Marketing</a>,
      3) <a href="/org/services/#Development">Development Process</a>, and 4) <a
        href="/org/services/#IT"
      >IT Infrastructure</a>. Full-time staff are associated with each of these areas and work with
      the greater Eclipse community to assist in meeting the needs of stakeholders.
    </p>
    <h2>A Unique Model for Open Source Development</h2>
    <p>The Eclipse Foundation has been established to serve the Eclipse open source projects and the
      Eclipse community. As an independent not-for-profit corporation, the Foundation and the
      Eclipse governance model ensures no single entity is able to control the strategy, policies or
      operations of the Eclipse community.</p>
    <p>The Foundation is focused on creating an environment for successful open source projects and
      to promote the adoption of Eclipse technology in commercial and open source solutions. Through
      services like IP Due Diligence, annual release trains, development community support, and
      ecosystem development, the Eclipse model of open source development is a unique and proven
      model for open source development.</p>
  </div>
  <div id="rightcolumn">
    <div class="sideitem">
      <h6>Related Links</h6>
      <ul>
        <li><a href="../membership/">Membership</a></li>
        <li><a href="../membership/become_a_member/">Become a member</a></li>
      </ul>
    </div>
    <div class="sideitem">
      <h6>Thank you!</h6>
      <p>
        Thanks to our many <a href="/corporate_sponsors/">Corporate Sponsors</a>
        for their generous donations to our infrastructure.
      </p>
    </div>
  </div>
</div>