<?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 Contributing 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>
    <p>
      Nominations for the 2022 elections are now open. To nominate someone, send email to <a href="mailto:elections@eclipse.org">elections@eclipse.org</a>. This page will list the candidates when nominations close on January 28, 2022.
    </p>


    <!-- 
<p>Below is the list of candidates in the 2021 elections. Their individual candidate pages will be published by February 11.</p>

<p>Committer Representatives</p>
<ol>
<li>George Adams</li>
<li>Chris Aniszczyk</li>
<li>Aleksandar Kurtakov</li>
<li>Andrey Loskutov</li>
<li>Thomas Mäder</li>
<li>Ed Merks</li>
<li>Kevin Sutter</li>
</ol>

<p>Contributing Member Representatives</p>
<ol>
<li>Farah Papaioannou</li>
<li>Torkild Ulvøy Resheim</li>
<li>Gunnar Wagenknecht</li>
</ol>

<p>The Contributing Member Representatives have all been elected via acclamation, since we have three positions and three candidates. The 
community will vote for Committer Representatives only. Voting begins on February 11 and ends at 3pm Eastern on March 4.</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>