<?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>
  <div class="homeitem3col">
    <h3>Election Process</h3>
    <p>The process for the Eclipse Foundation&rsquo;s annual elections is described below.</p>
    <ul>
      <li>Each year, the Eclipse Foundation holds elections for board members representing two very
        important groups within the Eclipse membership: the Committers and the Solutions Members.
        The number of these elected representatives is a ratio of the total number of Strategic
        Members.</li>
      <li>These elections are held pursuant to Sections 3.3 and 3.5 of the Eclipse Foundation <a
        href="../documents/eclipse_foundation-bylaws.pdf"
      >Bylaws</a>.
      </li>
      <li>The term of office for these elected board members is one year, commencing April 1.</li>
      <li>Voting for the elected board members is done using <a
        href="http://en.wikipedia.org/wiki/Single_Transferable_Vote"
      >single transferrable voting</a>.
      </li>
      <li>Each Solutions Member gets one vote.</li>
      <li>Each Committer Member gets one vote. Note that committers who are employees of Member
        companies have all the rights and privileges (including voting) of a Committer Member.
        Individual committers must join the Eclipse Foundation as Committer Members by signing the <a
        href="/org/documents/Eclipse%20MEMBERSHIP%20AGMT%202008_04_16%20Final.pdf"
      >Membership Agreement</a> in order to be allowed to vote.
      </li>
      <li>Voting is done electronically via a web interface on <a href="/">www.eclipse.org</a>. Each
        eligible voter is provided with the URL and a userid and password with which to vote several
        days in advance of the voting.
      </li>
    </ul>
  </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>
