<?php
/**
 * Copyright (c) 2005-2015, 2018 Eclipse Foundation.
 *
 * 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:
 *   Eclipse Foundation - initial implementation
 *   Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>
<div id="midcolumn">
  <h1><?php print $pageTitle; ?></h1>
  <p>The Eclipse Foundation holds elections for board members representing two very important groups
    within the Eclipse membership: the committers and the Sustaining Members (Solutions Members and
    Enterprise Members). The terms of office for these elected board members is one year, commencing
    April 1.</p>
  <p>
    Candidates and the community are encouraged to discuss the issues on the <a
      href="http://www.eclipse.org/forums/eclipse.foundation"
    >Foundation forum</a>.
  </p>
  <h3>Duties and Responsibilities of an Eclipse Foundation Director</h3>
  <ul>
    <li>Directors have a fiduciary responsibility to the Eclipse Foundation. In brief, this means
      that they must base their decisions on the needs of the Eclipse Foundation before those of
      either themselves or their employer.</li>
    <li>In terms of time requirements, the Board meets once a month for a one-hour
conference call. It also meets face-to-face three times per year, typically in
March, June, and October.</li>
    <li>Expenses incurred by Directors who are employed by a Member Company are to be covered by the
      Member company. Directors who are self-employed or employed by a non-Member may have their
      expenses covered by the Eclipse Foundation.</li>
  </ul>
  <div class="homeitem3col">
    <h3><?php print $year; ?> Elections</h3>
     
<!--To see the individual candidate pages, visit the <a href="nominees.php">Nominees page</a>.</p>-->

<p>Voting has ended in the 2020 elections. To learn about the 
results, <a href="https://www.eclipse.org/org/press-release/20200319-boardelection.php" target="_blank">see this announcement.</a></p>

  </div>
</div>

<div id="rightcolumn">
  <div class="sideitem">
    <h6>Quick Links</h6>
    <ul>
      <li><a href=".">Election Home</a></li>
      <li><a href="nominees.php">Candidates</a></li>
      <li><a href="keydates.php">Key Dates</a></li>
      <li><a href="election_process.php">Election Process</a></li>
    </ul>
  </div>
</div>
