<?php
/**
 * Copyright (c) 2014, 2015, 2018 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:
 *    Christopher Guindon (Eclipse Foundation) - initial API and implementation
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>

<div id="midcolumn">
  <h2>
  <?php print $pageTitle;?>
  </h2>

  <h3>What is Eclipse?</h3>
  <p>Eclipse is an open source community whose projects are focused on
    building an extensible development platform, runtimes and application
    frameworks for building, deploying and managing software across the
    entire software lifecycle. Many people know us, and hopefully love us,
    as a Java IDE but Eclipse is much more than a Java IDE.</p>
  <p>The Eclipse open source community has over 200 open source projects.
    These projects can be conceptually organized into seven different
    "pillars" or categories:</p>
  <ol>
    <li>Enterprise Development</li>
    <li>Embedded and Device Development</li>
    <li>Rich Client Platform</li>
    <li>Rich Internet Applications</li>
    <li>Application Frameworks</li>
    <li>Application Lifecycle Management (ALM)</li>
    <li>Service Oriented Architecture (SOA)</li>
  </ol>
  <p>The Eclipse community is also supported by a large and vibrant
    ecosystem of major IT solution providers, innovative start-ups,
    universities and research institutions and individuals that extend,
    support and complement the Eclipse Platform.</p>
  <p>One very exciting thing about Eclipse is that many people are using
    Eclipse in ways that we have never imagined. The common thread is that
    they are building innovative, industrial-strength software and want to
    use great tools, frameworks and runtimes to make their job easier.</p>

  <h3>What is the Eclipse Foundation?</h3>
  <p>The Eclipse Foundation is a not-for-profit, member-supported
    corporation that hosts the Eclipse projects. The Foundation provides
    services to run the IT infrastructure, perform IP due diligence,
    mentor open source projects, and provide marketing and business
    development support for the Eclipse community.</p>
  <p>It is important to realize that the Eclipse Foundation does not
    actually develop the open source code. All of the open source software
    at Eclipse is developed by open source developers, called committers,
    which are volunteered or contributed by organizations and individuals.</p>

  <h3>How can I get started using Eclipse?</h3>
  <p>
    Most people start by downloading <a
      href="http://www.eclipse.org/downloads/">one of the different
      download packages</a>. Plugins can be added to Eclipse to expand its
    functionality; the <a href="/projects/listofprojects.php">Eclipse
      Projects</a> and <a href="http://marketplace.eclipse.org/">Eclipse
      Marketplace</a> are two sources for additional plugins, but there are
    many more out there!<br /> <br /> There is also a wealth of <a
      href="/resources?type=book">books</a>, <a
      href="http://www.eclipse.org/resources?category=Getting%20Started">tutorials
      and white papers</a> to help you get started. Check out <a
      href="http://wiki.eclipse.org/The_Official_Eclipse_FAQs">The Official
      Eclipse FAQ</a> in the <a href="http://wiki.eclipse.org/Main_Page">Eclipse
      Wiki</a> for more information about all aspects of Eclipse. There are
    also companies available to help with <a
      href="http://marketplace.eclipse.org/taxonomy/term/34">training and
      consulting services.</a> In addition, please feel free to post a
    question on our <a href="/forums/">forums.</a>
  </p>

  <h3>Where do I get support?</h3>
  <p>
    Everyone is free to open <a href="http://bugs.eclipse.org/bugs/">bugs</a>
    and <a href="/forums/">ask questions on our forums.</a> There are also
    companies that offer commercial products built on Eclipse and <a
      href="http://www.eclipse.org/downloads/">Eclipse distributions</a>.
    Many of these organizations are able to provide commercial -level
    support.
  </p>

  <h3>How do I get in contact with other Eclipse users?</h3>
  <p>
    The best way to get in touch with other Eclipse users is via our <a
      href="/forums/">forums</a> and <a
      href="http://bugs.eclipse.org/bugs/">Bugzilla database.</a> This is
    typically where people ask and answer questions about their favourite
    Eclipse projects. You can also find individuals blogging about Eclipse
    on <a href="http://www.planeteclipse.org">PlanetEclipse.org.</a>
  </p>
  <p>
    If you would like to contact the Eclipse Foundation see our <a
      href="/org/foundation/contact.php">Contact Us section.</a>


  <h3>What license does Eclipse use?</h3>
  <p>Eclipse uses the Eclipse Public License (EPL). The EPL is a
    commercially friendly license that allows organizations to include
    Eclipse software in their commercial products, while at the same time
    asking those who create derivative works of EPL code to contribute
    back to the community.</p>
  <p>
    The commercial-friendly nature of the EPL had been proven over and
    over as hundreds of companies ship Eclipse based products. More
    information about the EPL can be found in our <a
      href="/legal/eplfaq.php">Licensing FAQ.</a>
  </p>

  <h3>How do I start an Eclipse open source project?</h3>
  <p>
    The first step in starting an open source project is to familiarize
    yourself with the <a href="/projects">existing open source projects.</a>
    There is a lot of diverse technology being developed at Eclipse, so it
    might be actually easier to contribute to an existing open source
    project. If you believe you have a unique technology that is suited
    for Eclipse, then the first step is to read the Eclipse development
    process to ensure that the goals of Eclipse align with your interests
    in creating an open source project. The next step is to contact the
    Eclipse Management Organization (EMO) to get some help and advice in
    drafting your proposal. You can contact the EMO via <a
      href="mailto:emo@eclipse.org">emo at eclipse dot org</a>.
  </p>

  <h3>Who is allowed to start an Eclipse open source project?</h3>
  <p>
    Eclipse is an open and transparent community of open source projects.
    We welcome project proposals from all sources. It is important to
    understand that you do not have to be a member of the Eclipse
    Foundation to <a
      href="http://wiki.eclipse.org/Development_Resources/HOWTO/Starting_A_New_Project">start</a>
    or work on an open source project.
  </p>


  <h3>How do I become a member?</h3>
  <p>
    To become a member please visit <a href="/membership/become_a_member/">here</a>
    for detailed instructions.
  </p>
  <br />

</div>