<!--#include file="header.html" -->

<h3>News</h3>

<p>

<ul>

  <li><b>30 July 2010 -- 2010.08-rc1 released</b>

    <p>We have a new release candidate! Lots of changes all over the
    tree, see the <a
    href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2010.08_rc1">CHANGES</a>
    file for details.

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2010.08-rc1.tar.bz2">2010.08-rc1
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>30 May 2010 -- 2010.05 released</b>

    <p>The stable 2010.05 release is out - Thanks to everyone
    contributing and testing the release candidates. See the
    <a href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2010.05">CHANGES</a>
    file for more details, read the
    <a href="http://lists.busybox.net/pipermail/buildroot/2010-May/034878.html">announcement</a>
    and go to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2010.05.tar.bz2">2010.05 release</a>.</p>

  <li><b>27 May 2010 -- 2010.05-rc3 released</b>

    <p>RC3 is out with more cleanups and bugfixes, see the <a
    href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2010.05_rc3">CHANGES</a>
    file for details.

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2010.05-rc3.tar.bz2">2010.05-rc3
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>11 May 2010 -- 2010.05-rc2 released</b>

    <p>Another week, another release candidate with a bunch of
    cleanups and build fixes.</p>

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2010.05-rc2.tar.bz2">2010.05-rc2
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>3 May 2010 -- 2010.05-rc1 released</b>

    <p>We have a new release candidate! Lots of changes all over the
    tree, see the <a
    href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2010.05_rc1">CHANGES</a>
    file for details.

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2010.05-rc1.tar.bz2">2010.05-rc1
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>2 May 2010 - FOSDEM slides online</b>

    <p>The slides from the <a
    href="http://fosdem.org/2010/schedule/events/emb_cross_build">Cross
    Build Systems: Present & Future</a> session at <a
    href="http://fosdem.org/2010">FOSDEM</a> are now <a
    href="http://send-patches.org/news/20100211-1-FOSDEM-Crossdev-Workshop.pdf">online</a>.

  <li><b>26 February 2010 -- 2010.02 released</b>

    <p>The stable 2010.02 release is out - Thanks to everyone
    contributing and testing the release candidates. See the
    <a href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2010.02">CHANGES</a>
    file for more details, and go to the <a href="/downloads/">downloads page</a>
    to pick up the <a href="/downloads/buildroot-2010.02.tar.bz2">2010.02
    release</a>.</p>

  <li><b>23 February 2010 -- 2010.02-rc2 released</b>

    <p>RC2 is out with more cleanups and bugfixes, see the <a
    href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2010.02_rc2">CHANGES</a>
    file for details.

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2010.02-rc2.tar.bz2">2010.02-rc2
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>9 February 2010 -- 2010.02-rc1 released</b>

    <p>We have a new release candidate! Lots of changes all over the
    tree, see the <a
    href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2010.02_rc1">CHANGES</a>
    file for details.

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2010.02-rc1.tar.bz2">2010.02-rc1
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>1 December 2009 -- 2009.11 released</b>

    <p>The stable 2009.11 release is out - Thanks to everyone
    contributing and testing the release candidates. See the
    <a href="http://lists.busybox.net/pipermail/buildroot/2009-December/030672.html">announcement</a>
    or <a href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2009.11">CHANGES</a>
    for more details, and go to the <a href="/downloads/">downloads page</a>
    to pick up the <a href="/downloads/buildroot-2009.11.tar.bz2">2009.11
    release</a>.</p>

  <li><b>29 November 2009 -- 2009.11-rc2 released</b>

    <p>RC2 is out with more cleanups and bugfixes, see the <a
    href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2009.11_rc2">CHANGES</a>
    file for details.

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2009.11-rc2.tar.bz2">2009.11-rc2
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>23 November 2009 -- 2009.11-rc1 released</b>

    <p>We have a new release candidate! Lots of changes all over the
    tree, see the <a
    href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2009.11_rc1">CHANGES</a>
    file for details.

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2009.11-rc1.tar.bz2">2009.11-rc1
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>7 September 2009 -- First Buildroot Developer Day</b>

    <p>The first <i>Buildroot Developer Day</i> will take place on
    Saturday, October 17th in Grenoble, France, just the day after
    Embedded Linux Conference Europe. This <i>Developer Day</i> aims
    at allowing Buildroot developers to meet and exchange ideas on the
    project and its future.</p>

    <p>As the number of places is limited, interested candidates are
    invited to send an e-mail to Peter Korsgaard (<code>jacmet at
    uclibc dot org</code>) and Thomas Petazzoni (<code>thomas dot
    petazzoni at free-electrons dot com</code>).</p>

    <p>This <i>Developer Day</i> will take place thanks to the
    sponsoring of <a href="http://www.calao-systems.com">Calao
    Systems</a> and <a href="http://www.free-electrons.com">Free
    Electrons</a>.</p>

  <li><b>31 August 2009 -- 2009.08 released</b>

    <p>The stable 2009.08 release is out - Thanks to everyone
    contributing and testing the release candidates. See the
    <a href="http://lists.busybox.net/pipermail/buildroot/2009-August/029018.html">announcement</a>
    or <a href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2009.08">CHANGES</a>
    for more details, and go to the <a href="/downloads/">downloads page</a>
    to pick up the <a href="/downloads/buildroot-2009.08.tar.bz2">2009.08
    release</a>.</p>

  <li><b>26 August 2009 -- 2009.08-rc3 released</b>
    <p>A number of bugfixes have been added to the tree since RC2
    (especially thanks to Thomas Petazzoni) - See the <a
    href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2009.08_rc3">CHANGES</a>
    file for details. This is very much expected to be the final release
    candidate, so give it a good test and expect a final 2009.08
    release next weekend unless critical issues are found.</p>

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2009.08-rc3.tar.bz2">2009.08-rc3
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>6 August 2009 -- 2009.08-rc2 released</b>

    <p>RC2 is out with more cleanups and bugfixes, see the <a
    href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2009.08_rc2">CHANGES</a>
    file for details.

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2009.08-rc2.tar.bz2">2009.08-rc2
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>2 August 2009 -- 2009.08-rc1 released</b>

    <p>We have a new release candidate! Lots of changes all over the
    tree, see the <a
    href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2009.08_rc1">CHANGES</a>
    file for details.

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2009.08-rc1.tar.bz2">2009.08-rc1
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>1 June 2009 -- 2009.05 released</b>

    <p>The stable 2009.05 release is out - Thanks to everyone
    contributing and testing the release candidates. See the
    <a href="http://lists.busybox.net/pipermail/buildroot/2009-June/027640.html">announcement</a>
    or <a href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2009.05">CHANGES</a>
    for more details, and go to the <a href="/downloads/">downloads page</a>
    to pick up the <a href="/downloads/buildroot-2009.05.tar.bz2">2009.05
    release</a>.</p>

  <li><b>27 May 2009 -- 2009.05-rc3 released</b>

    <p>We had a number of fixes post-RC2, so RC3 is out (see <a
    href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2009.05_rc3">CHANGES</a>
    for details). Now is the moment to test and verify that everything
    is working for your favorite config - Expect a final 2009.05 very soon.</p>

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2009.05-rc3.tar.bz2">2009.05-rc3
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>19 May 2009 -- 2009.05-rc2 released</b>

    <p>RC2 is out with more cleanups and bug fixes (see <a
    href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2009.05_rc2">CHANGES</a>).
    Unless big issues are found, expect this to be the last release
    candidate before the release - So give it a good test.</p>

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2009.05-rc2.tar.bz2">2009.05-rc2
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>14 May 2009 -- Buildroot.org</b>

    <p>Earl Levine has been so kind to donate the <b>buildroot.org</b>
    domain to us, so the website can now also be reached at <a
    href="http://www.buildroot.org">www.buildroot.org</a> (and git at
    <a href="http://git.buildroot.org/buildroot">git.buildroot.org</a>).

    Thanks a lot Earl!</p>

  <li><b>5 May 2009 -- 2009.05-rc1 released</b>

    <p>We have a new release candidate! Lots of changes all over the
    tree, see the <a
    href="http://git.buildroot.net/buildroot/plain/CHANGES?id=2009.05_rc1">CHANGES</a>
    file for details.

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2009.05-rc1.tar.bz2">2009.05-rc1
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>3 May 2009 -- Moved to git</b>

    <p>We've moved the source code from <a
    href="http://subversion.tigris.org">Subversion</a> to <a
    href="http://git-scm.org">Git</a>. You can browse the repo online
    <a href="http://git.buildroot.net/buildroot">here</a>, and clone
    the repo using:
    <pre>git clone git://git.buildroot.net/buildroot</pre>
    See the <a href="/git.html">Git Access</a> page for more details.
    </p>

  <li><b>27 March 2009 -- new Logo</b>

    <p>We have a <a href="images/logo.png">logo</a>! We have so far
    been using the <a href="http://busybox.net">Busybox</a> logo on
    the website, as the website was a copy of the <a
    href="http://busybox.net">Busybox</a> one - But not anymore, we
    now have a shiny new logo of our own.</p>

  <li><b>12 February 2009 -- 2009.02 released</b>
    <p>The stable 2009.02 release is out - Thanks to everyone
    contributing and testing the release candidates. See the
    <a href="http://lists.busybox.net/pipermail/buildroot/2009-February/025974.html">announcement</a>
    for more details, and go to the <a href="/downloads/">downloads page</a>
    to pick up the <a href="/downloads/buildroot-2009.02.tar.bz2">2009.02
    release</a>.</p>

  <li><b>9 February 2009 -- 2009.02-rc4 released</b>
    <p>We had more than 50 changes since RC3, several of them
    toolchain related, so decided to make a RC4 as well. This is
    very much expected to be the final release candidate, so give it
    a good test and expect a final 2009.02 release this week unless
    critical issues are found.</p>

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2009.02-rc4.tar.bz2">2009.02-rc4
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>31 January 2009 -- 2009.02-rc3 released</b>
      <p>RC3 is out with more cleanups and bug fixes. Unless big issues
    are found, expect this to be the last release candidate before the
    release - So give it a good test.</p>

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2009.02-rc3.tar.bz2">2009.02-rc3
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>23 January 2009 -- 2009.02-rc2 released</b>
    <p>Another week, another release candidate with a bunch of
    cleanups and build fixes.</p>

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2009.02-rc2.tar.bz2">2009.02-rc2
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>.</p>

  <li><b>16 January 2009 -- Release candidate and new maintainer</b>
    <p>It has been a long time coming, but we finally have a new
    release candidate! - And a new maintainer to match (Peter Korsgaard).</p>

    <p>Head to the <a href="/downloads/">downloads page</a> to pick up the
    <a href="/downloads/buildroot-2009.02-rc1.tar.bz2">2009.02-rc1
    release candidate</a>, and report any problems found to the <a
    href="lists.html">mailing list</a> or <a
    href="https://bugs.uclibc.org">bug tracker</a>. The plan is to
    release 2009.02 in time for <a
    href="http://www.fosdem.org/2009/">FOSDEM</a>.</p>

  <li><b>16 July 2006 -- Buildroot mailing list</b>
    <p>Buildroot now has its own <a href=lists.html>mailing list</a>.</p>

  <li><b>21 February 2005 -- Buildroot webpage added</b><p>

    Buildroot is a set of Makefiles and patches that makes it easy generate a
    cross-compilation toolchain and root filesystem for your target Linux
    system using the <a href= "http://www.uclibc.org/">uClibc C library</a>.
    Buildroot is useful mainly for people working with small or embedded
    systems.  Embedded systems often use processors that are not the regular
    x86 processors everyone is used to using on their PC. It can be PowerPC
    processors, MIPS processors, ARM processors, etc.  And to be extra safe,
    you do not need to be root to build or run buildroot.

    <p>

    And as of today buildroot even has its own webpage, making it a first class
    citizen of uclibc.org and busybox.net, and more importantly, make it easy
    to find and point to buildroot.

    <p>

    If you find a bug in buildroot, or wish to submit a patch to fix a problem
    or add a shiny new feature, please use the <a
    href="https://bugs.uclibc.org/">Bug and Patch Tracking System</a> to post
    the details, to make certain your work is not lost.


</ul>

<!--#include file="footer.html" -->

