<?php
/**
 * Copyright (c) 2014, 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 class="col-xs-24">
  <h1><?php print $pageTitle; ?></h1>
  <p>Eclipse has been honoured several times and we're proud to
    present some of our awards here. We've also included various sites where
    the community is voting, rating or otherwise expressing an opinion about
    eclipse.
  </p>
  <p>We've also started a collection of kudos from the community on The Eclipse Project Wiki
    <a href="http://wiki.eclipse.org/index.php/Kudos" target="_blank">kudos page</a>.
  </p>
  <p>Vote for, or rate Eclipse on these sites:</p>
  <ul class="midlist">
    <li>
      <a href="../org/foundation/eclipseawards/" target="_blank">Eclipse Community
      Awards</a> <br />Our own Eclipse Community Awards are one of the ways to recognize and thank
      the individuals and technologies that make up the Eclipse community.
    </li>
    <li>
      <a href="http://www.versiontracker.com/dyn/moreinfo/macosx/19084" target="_blank">Version
      Tracker</a>
    </li>
    <li><a href="http://osdir.com/Downloads-req-viewdownloaddetails-lid-375-ttitle-Eclipse.html" target="_blank">O'Reilly
      Open Source Directory</a> Here is the <a href="http://osdir.com/Downloads%2Bindex-req-viewdownloaddetails-lid-375-ttitle-Eclipse.phtml" target="_blank">
      link for rating eclipse</a>.
    </li>
  </ul>
  <h2>Eclipse awards and honorable mentions</h2>
  <table>
    <tr>
      <td width="97%">
        <p><b>2006 Java Pro Magazine Readers' Choice Award.</b><br/>
          Eclipse awarded Best IDE and Best Java Development Suite
          <a href="http://www.ftponline.com/mediakit/about/news/news77.asp">http://www.ftponline.com/mediakit/about/news/news77.asp</a>
        </p>
        <p><b>2006 JAX Reader's Choice Award</b><br/>
          Eclipse awarded Best Open-Source Java Project
        </p>
        <p><b>2005 LinuxQuestions.org Members Choice Awards</b><br>
          IDE of the Year<br>
          <a href="http://www.linuxquestions.org/questions/showthread.php?t=409026">http://www.linuxquestions.org/questions/showthread.php?t=409026</a>
        </p>
        <p><b>2005 Java Developer&#146;s Journal Readers&#146; Choice Awards</b><br>
          Eclipse awarded <i>Best Java Application</i><br>
          Eclipse Rich Client Platform awarded <i>Best Rich Client Platform</i><br>
          Eclipse IDE awarded <i>Best Team Development Tool</i><br>
          Eclipse IDE awarded <i>Most Innovative Java Product</i><br>
          SWT awarded <i>Best Java Class Library</i><br>
          Eclipse awarded <i>Best Java Debugging Tool</i><br>
          <a href="http://jdj.sys-con.com/read/171303.htm" target="_blank">http://jdj.sys-con.com/read/171303.htm</a><br>
        </p>
        <p><b>2005 SOA Web Services Journal Readers&#146; Choice Awards</b><br>
          Eclipse Awarded <i>Best GUI for SOA </i><br>
          <a href="http://jdj.sys-con.com/read/171303.htm" target="_blank">http://jdj.sys-con.com/read/171303.htm</a><br>
        </p>
        <p><b>Software Development Magazine 2005 Readers&#146; Choice Awards</b><br>
          Eclipse Awarded <i>Best Open Source Tool </i><br>
          <a href="http://www.sdmagazine.com/pressroom/rc2005_winners.html" target="_blank">http://www.sdmagazine.com/pressroom/rc2005_winners.html</a><br>
        </p>
        <p><b>SD Times Top 100</b><br>
          Eclipse awarded best for <i>Tools and Environments</i> in SD Times Top
          100<br>
          <a href="http://68.236.189.240/article/story-20050515-17.html" target="_blank">http://68.236.189.240/article/story-20050515-17.html</a>
        </p>
        <p><b>2005 Jolt Awards</b><br>
          Eclipse awarded Jolt Product Excellence Award for <i>Languages and Development
          Environments! </i> The Java Developer's Guide to Eclipse by D'Anjou et
          al wins Productivity Award for <i>Technical Books!</i><br>
          <a href="http://www.sdmagazine.com/pressroom/jolt_winners_2005.pdf" target="_blank">http://www.sdmagazine.com/pressroom/jolt_winners_2005.pdf</a>
        </p>
        <p><b>Developer.com Product of the Year 2005 Contest</b><br>
          Eclipse awarded <i>Development Tool of the Year</i><br>
          <a href="http://www.developer.com/net/article.php/3483116" target="_blank">http://www.developer.com/net/article.php/3483116</a>
          <br>
          <a href="http://www.developer.com/java/other/article.php/3483706" target="_blank">Eclipse
          Overshadows Other Development Tools</a> By Paul Kimmel
        </p>
        <p><b>JavaPro Readers' Choice Awards 2004</b> <br>
          Eclipse awarded <i>Best IDE</i> and <i>Best Java Development Suite</i>
          in the 2004 JavaPro Readers' Choice Awards<br>
          <a href="http://www.fawcette.com/javapro/2004_11/magazine/features/readerschoice/default.aspx" target="_blank">http://www.fawcette.com/javapro/2004_11/magazine/features/readerschoice/default.aspx</a>
        </p>
        <p><b>SD Readers' Choice Awards 2004</b><br>
          Eclipse awarded Best Value, Best Open Source Tool and Most Improved Tool
          in the SD Readers' Choice Awards.<br>
          <a href="http://www.sdmagazine.com/documents/s=9352/sdmsde04e/sdmsde04e.htm?temp=OeLK%20" target="_blank">http://www.sdmagazine.com/documents/s=9352/sdmsde04e/sdmsde04e.htm?temp=OeLK
          FL74Os</a> (registration required)
        </p>
        <p> <b>JDJ Editors' Choice Awards 2004</b><br>
          Eclipse and members of the Eclipse community receive honors in <i>JDJ
          Editors' Choice Awards</i> for 2004! <br>
          <a href="http://www.sys-con.com/story/?storyid=45506&amp;de=1" target="_blank">http://www.sys-con.com/story/?storyid=45506&amp;de=1</a>
        </p>
        <p> <b>SD Times 2004 Top 100</b><br>
          Eclipse receives honors in Tools and Environments and Influencers categories
          in <i>The SD Times 2004 Top 100</i>! <br>
          <a href="http://www.sdtimes.com/news/102/special1.htm" target="_blank">http://www.sdtimes.com/news/102/special1.htm</a>
        </p>
        <b>2004 Jolt Awards</b><br>
        Eclipse and Aspectj win Software Development 2004 <i>Jolt Product Excellence</i>
        and <i>Productivity Awards for Languages and Development Environments</i>!
        Check out the announcement for more winners from the eclipse community!<br>
        <a href="http://www.sdmagazine.com/pressroom/031804_jolt_winners.pdf" target="_blank">http://www.sdmagazine.com/pressroom/031804_jolt_winners.pdf</a><br>
        <br>
        <b>JDJ Readers' Choice 2003</b><br>
        Eclipse awarded <i>Best Java Component</i> for SWT by Java Developer's Journal
        Readers' Choice Awards 2003 ! <br>
        <p><b>InfoWorld 2003 Technology of the Year</b><br>
          Eclipse awarded InfoWorld 2003 Technology of the Year for Best Application
          Development Tool <a href="http://www.infoworld.com/article/03/12/31/01FEtoyawards_1.html?s=feature" target="_blank">http://www.infoworld.com/article/03/12/31/01FEtoyawards_1.html?s=feature</a>
        </p>
        <p><b>O'Reilly OS Dir 2003 </b><br>
          Eclipse awarded O'Reilly OSDir 2003 Editor's Choice Award for Best Developement
          Tool and Best Java application <a href="http://osdir.com/Article198.phtml" target="_blank">http://osdir.com/Article198.phtml</a>
        </p>
        <p><b>JDJ 2003 Editors' Choice</b><br>
          Eclipse awarded <i>JDJ 2003 Editors' Choice Awards</i> by Jason Bell,
          J2SE Editor and Glen Cordrey, J2ME Editor <br>
          Subscription link: <a href="http://www.sys-con.com/java/articleprint.cfm?id=2059" target="_blank">http://www.sys-con.com/java/articleprint.cfm?id=2059
          </a> or read the <a href="../org/press-release/jun92003jdjadv.html">News
          Advisory</a><br>
          <br>
          <b>JavaPro 2003 Readers' Choice</b><br>
          Eclipse places first in <i>Best Java Development Suite</i> and <i>Most
          Valuable Java Development Product</i> in the Java Pro 2003 Readers' Choice
          Awards <a href="http://www.fawcette.com/reports/javaone/2003/awards/" target="_blank"><br>
          http://www.fawcette.com/reports/javaone/2003/awards/</a> <br>
          <br>
          <b>JavaWorld 2002 Editors' Choice</b><br>
          AspectJ Project awarded <i>Most Innovative Java Product or Technology</i>
          in the JavaWorld 2002 Editors' Choice Awards. <a href="http://www.javaworld.com/javaworld/jw-06-2003/jw-0609-eca_p.html" target="_blank">http://www.javaworld.com/javaworld/jw-06-2003/jw-0609-eca_p.html
          </a><br>
          <b><br>
          SD Times 100 Innovators and Leaders 2003</b><br>
          First place in the 2003 <i>Standards Bodies and Consortia</i> category,
          SD Times 100 Innovators And Leaders<br>
          <a href="http://www.sdtimes.com/news/079/special1.htm" target="_blank">http://www.sdtimes.com/news/079/special1.htm</a><br>
          <br>
          <b>JavaSpektrum and ObjektSpektrum Readers 2003</b><br>
          Best Java Product Award 2003 by the readers of JavaSpektrum and ObjektSpektrum
          magazines<br>
          announced at OOP 2003, Munich, Germany, January 2003 <br>
          <br><br><br><br>
        </p>
      </td>
    </tr>
    <tr>
      <td>
        If you have comments or suggestions for this page, email the <a href="mailto:news@eclipse.org">news
        editor. </a>
      </td>
    </tr>
  </table>
</div>