<?php
/**
 * Copyright (c) 2005, 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:
 *   Denis Roy (Eclipse Foundation)
 *   Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>

<h1>Eclipse Foundation Community Awards</h1>

<p>The Eclipse Foundation Community Awards recognize the best of the Eclipse community. This year, we will be giving out four awards: <a href="#top-committer">Top Committer</a>, <a href="#top-newcomer">Top Newcomer Evangelist</a>, <a href="#top-contributor">Top Contributor</a>, and <a href="#lifetime-achievement">Lifetime Achievement</a>.</p>

<h2>Awards</h2>

<h3 id="top-committer">Top Committer</h3>

<p>This award is to recognize the Eclipse committer who best exemplifies community support - through code contributions, fixing bugs, forum and mailing list posts, conference presentations, blogs and other areas.</p>

<p><a href="https://gitlab.eclipse.org/eclipsefdn/emo-team/emo/-/issues/28" class="btn btn-primary">Submit a nomination</a></p>

<hr/>

<h3 id="top-newcomer">Top Newcomer Evangelist</h3>

<p>This award is to recognize the individual who best welcomes, engages and educates new people into the Eclipse community through the user forums, blogging, creating resources like demos and tutorials, and Eclipse-related conversations on social media.</p>

<p><a href="https://gitlab.eclipse.org/eclipsefdn/emo-team/emo/-/issues/30" class="btn btn-primary">Submit a nomination</a></p>

<hr/>

<h3 id="top-contributor">Top Contributor</h3>

<p>This award is to recognize an individual who best exemplifies support for the Eclipse community through their contributions to forums, submission of patches, comments on bugs, tutorials, conference presentations, blogs, and other areas. Contributors are the individuals that participate due to their passion for the community and technology.&nbsp;</p>

<p><a href="https://gitlab.eclipse.org/eclipsefdn/emo-team/emo/-/issues/29" class="btn btn-primary">Submit a nomination</a></p>

<hr/>

<h3 id="lifetime-achievement">Lifetime Achievement&nbsp;</h3>

<p>The Lifetime Achievement award is given to those individuals who have helped shape the Eclipse community through a long history of contributions to Eclipse projects, and active participation and leadership in our community.</p>

<p><a href="https://gitlab.eclipse.org/eclipsefdn/emo-team/emo/-/issues/31" class="btn btn-primary">Submit a nomination</a></p>

<hr/>

<h2>Nominations &amp; Voting</h2>

<p>Anyone can nominate a community member for any of the awards. Nominations will be collected May 3 to 28, 2021.</p>

<p>Award winners for the Top Committer, Top Newcomer Evangelist, and Top Contributor will be determined by a vote of the community. Each person will get to vote once per category from May 31 to June 28, 2021. The Lifetime Achievement award winner will be selected by the Eclipse Foundation team.</p>

<h2>Important Dates</h2>

<ul>
	<li>May 3: Nominations open</li>
	<li>May 28: Nominations close</li>
	<li>May 31: Voting begins</li>
	<li>June 28: Voting ends</li>
	<li>October 26: Winners announced</li>
</ul>

<h2>Past Winners</h2>

<p>See the <a href="https://www.eclipse.org/org/foundation/eclipseawards/pastwinners.php">Past Winners</a> of the Eclipse Community Awards.</p>
