\documentclass[aspectratio=169,obeyspaces,spaces,hyphens,dvipsnames]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}% http://ctan.org/pkg/lm
\usepackage{minted}
\usepackage{hyperref}
\usepackage{xcolor}
\usepackage{pgfplots}
\usepackage{tikz}
\usepackage[normalem]{ulem}
\usepackage{wrapfig}

\mode<presentation>
\usetheme{Bootlin}

\def\signed #1{{\leavevmode\unskip\nobreak\hfil\penalty50\hskip2em
  \hbox{}\nobreak\hfil(#1)
  \parfillskip=0pt \finalhyphendemerits=0 \endgraf}}

\newsavebox\mybox
\newenvironment{aquote}[1]
  {\savebox\mybox{#1}\begin{quotation}}
  {\signed{\usebox\mybox}\end{quotation}}

\title{Buildroot: what's new?}
\authors{Thomas Petazzoni}
\email{thomas.petazzoni@bootlin.com}
\slidesurl{https://bootlin.com/pub/conferences/2020/elc/petazzoni-buildroot-whats-new}
\institute{Bootlin}
\conference{Conference}

\begin{document}

\addtocontents{toc}{\protect\setcounter{tocdepth}{-1}}
\section{Buildroot: what's new?}
\addtocontents{toc}{\protect\setcounter{tocdepth}{2}}

\begin{frame}{Thomas Petazzoni}
  \begin{columns}
    \column{0.6\textwidth}
    \begin{itemize}
    \item CTO/Embedded Linux engineer at Bootlin
      \begin{itemize}
      \item Embedded Linux {\bf expertise}
      \item {\bf Development}, consulting and training
      \item Bootloader, Linux kernel, Yocto Project, Buildroot
      \item Complete Linux BSP development
      \item Hardware support in bootloader/Linux
      \item Strong open-source focus: upstreaming and contributions
      \item Freely available training materials
      \end{itemize}
    \item Co-maintainer of {\bf Buildroot}
    \item Living in {\bf Toulouse}, France
    \end{itemize}
    \column{0.3\textwidth}
    \includegraphics[width=\textwidth]{common/bootlin-logo.pdf}

    \vspace{1.5cm}

    \includegraphics[width=\textwidth]{windsurf.jpg}
  \end{columns}
\end{frame}

\begin{frame}{Buildroot at a glance}
  \begin{columns}
    \column{0.8\textwidth}
  \begin{itemize}
  \item Is an {\bf embedded Linux build system}, builds from source:
    \begin{itemize}
    \item cross-compilation toolchain
    \item root filesystem with many libraries/applications, cross-built
    \item kernel and bootloader images
    \end{itemize}
  \item {\bf Fast}, simple root filesystem in minutes
  \item {\bf Easy} to use and understand: kconfig and make
  \item {\bf Small} root filesystem, default 2 MB
  \item More than {\bf 2500 packages} available
  \item Generates filesystem images, not a distribution
  \item Vendor neutral
  \item Active community, stable releases every 3 months
  \item Started in 2001, oldest still maintained build system
  \item \url{http://buildroot.org}
  \end{itemize}
  \column{0.2\textwidth}
  \includegraphics[width=\textwidth]{logo.png}
\end{columns}
\end{frame}

\begin{frame}{Agenda}
  \begin{columns}
    \column{0.7\textwidth}
    \begin{itemize}
    \item See what's new in Buildroot within the last two years
    \item Covering Buildroot 2018.05 to Buildroot 2020.05
      \begin{itemize}
      \item Community activity
      \item Release schedule
      \item Architecture support
      \item Toolchain support
      \item Package infrastructure improvements
      \item Download infrastructure improvements
      \item Interesting package updates and additions
      \item Reproducible builds
      \item Top-level parallel build
      \item Tooling improvements
      \end{itemize}
    \end{itemize}
    \column{0.3\textwidth}
    \includegraphics[width=\textwidth]{agenda.jpg}
  \end{columns}
\end{frame}

\begin{frame}{Buildroot: an active project}
  \begin{center}
    \includegraphics[height=0.8\textheight]{commits-stats.pdf}
  \end{center}
\end{frame}

\begin{frame}{Buildroot: an active project}
  \begin{center}
    \includegraphics[height=0.8\textheight]{committers-stats.pdf}
  \end{center}
\end{frame}

\begin{frame}{Buildroot: an active project}
  \begin{center}
    \includegraphics[height=0.8\textheight]{emails-stats.pdf}
  \end{center}
\end{frame}

\begin{frame}{Release schedule: long term support added}
  \begin{columns}
    \column{0.7\textwidth}
    \begin{itemize}
    \item What we already had
      \begin{itemize}
      \item {\bf Four releases} per year: YYYY.02, YYYY.05, YYYY.08,
        YYYY.11
      \item {\bf 3-month cycles}: 2 months development 1 month
        stabilization
      \end{itemize}
    \item What we also have now
      \begin{itemize}
      \item {\bf LTS}: Long Term Support release
      \item Each YYYY.02 release is {\bf supported during one year}
      \item {\bf Security} updates, bug fixes
      \item YYYY.02.x maintenance branch, and regular ($\approx$~monthly) point releases
      \item 2017.02: to 2017.02.11, 860 commits
      \item 2018.02: to 2018.02.12, 1075 commits
      \item 2019.02: to 2019.02.11: 1301 commits
      \item 2020.02: to 2020.02.3: 344 commits (so far)
      \end{itemize}
    \end{itemize}
    \column{0.3\textwidth}
    \includegraphics[height=0.8\textheight]{clock.jpg}
  \end{columns}
\end{frame}

\begin{frame}{Architecture support}
  \begin{columns}
    \column{0.7\textwidth}
    \begin{itemize}
    \item Support for new CPU architectures
      \begin{itemize}
      \item {\bf RISC-V}, 32-bit and 64-bit
      \item {\bf NDS32}
      \end{itemize}
    \item Support for {\bf new variants} of existing architectures: ARM Cortex
      cores, x86 cores, MIPS cores, ARC cores, C-SKY cores
    \item Removal of {\em Blackfin} architecture
    \item Overall, {\bf support for}: ARC, ARM, AArch64, C-SKY, m68k,
      Microblaze, MIPS, NDS32, NIOS2, OpenRISC, PowerPC, RISC-V, SuperH,
      SPARC, x86, Xtensa
    \end{itemize}
    \column{0.3\textwidth}
    \includegraphics[width=\textwidth]{riscv-logo.png}
    \includegraphics[width=\textwidth]{andes-logo.png}
  \end{columns}
\end{frame}

\begin{frame}{Toolchain support: internal toolchain}

  \begin{columns}
    \column{0.7\textwidth}
    {\bf Internal toolchain}: Buildroot builds your toolchain from
    source
    \begin{itemize}
    \item No significant change, just regular updates
    \item {\bf gcc} 8.x and 9.x added (gcc 10.x coming soon), gcc 4.9,
      5.x, 6.x removed
    \item {\bf binutils} updated, 2.33.1
    \item {\bf uClibc-ng} updated, 1.0.34
    \item {\bf musl} updated, 1.2.0
    \item {\bf glibc} updated, 2.30
    \item Useful testing done by Romain Naour using the {\em
        toolchains-builder} project
    \end{itemize}
    \column{0.3\textwidth}
    \includegraphics[width=\textwidth]{wrench.jpg}
  \end{columns}

\end{frame}

\begin{frame}{Toolchain support: external toolchain}

  \begin{columns}
    \column{0.7\textwidth}
    {\bf External toolchain}: Buildroot uses an existing pre-built
    toolchain
    \begin{itemize}
    \item ARM toolchains added
    \item AArch64 big-endian toolchains from ARM and Linaro added
    \item Andes NDS32 toolchain added
    \item Updates to numerous existing toolchains
    \item Declaring external toolchains from \code{BR2_EXTERNAL} trees
    \end{itemize}
    \column{0.3\textwidth}
    \includegraphics[width=\textwidth]{spanner.jpg}
  \end{columns}

\end{frame}

\begin{frame}{New package infrastructures: Go, Meson, QMake}

  \begin{columns}
    \column{0.7\textwidth}
    \begin{itemize}
    \item Package infrastructures {\bf factorize the common logic} to
      configure, build and install packages that use a standardized
      build system
    \item {\bf Three new} package infrastructures:
      \begin{itemize}
      \item \code{golang-package} for Go-based packages
      \item \code{meson-package} for Meson-based packages
      \item \code{qmake-package} for QMake-based packages (Qt world)
      \end{itemize}
    \item {\bf Already} had support for: Autotools, CMake, Kconfig,
      Luarocks, Perl, Python, Erlang, Waf and kernel modules
    \end{itemize}
    \column{0.3\textwidth}
    \includegraphics[height=0.8\textheight]{boxes.jpg}
  \end{columns}
\end{frame}

\begin{frame}[fragile]{Go package example: {\tt docker-cli}}

  \begin{block}{package/docker-cli/docker-cli.mk}
    {\tiny
\begin{minted}{makefile}
################################################################################
#
# docker-cli
#
################################################################################

DOCKER_CLI_VERSION = 18.09.9
DOCKER_CLI_SITE = $(call github,docker,cli,v$(DOCKER_CLI_VERSION))
DOCKER_CLI_WORKSPACE = gopath

DOCKER_CLI_LICENSE = Apache-2.0
DOCKER_CLI_LICENSE_FILES = LICENSE

DOCKER_CLI_DEPENDENCIES = host-pkgconf

DOCKER_CLI_TAGS = autogen
DOCKER_CLI_BUILD_TARGETS = cmd/docker

DOCKER_CLI_LDFLAGS = \
        -X github.com/docker/cli/cli.GitCommit=$(DOCKER_CLI_VERSION) \
        -X github.com/docker/cli/cli.Version=$(DOCKER_CLI_VERSION)

DOCKER_CLI_INSTALL_BINS = $(notdir $(DOCKER_CLI_BUILD_TARGETS))

$(eval $(golang-package))
\end{minted}
    }
    \end{block}
\end{frame}

\begin{frame}[fragile]{Meson package example: {\tt libmpdclient}}
  \begin{block}{package/libmpdclient/libmpdclient.mk}
    {\tiny
\begin{minted}{makefile}
################################################################################
#
# libmpdclient
#
################################################################################

LIBMPDCLIENT_VERSION_MAJOR = 2
LIBMPDCLIENT_VERSION = $(LIBMPDCLIENT_VERSION_MAJOR).16
LIBMPDCLIENT_SOURCE = libmpdclient-$(LIBMPDCLIENT_VERSION).tar.xz
LIBMPDCLIENT_SITE = http://www.musicpd.org/download/libmpdclient/$(LIBMPDCLIENT_VERSION_MAJOR)
LIBMPDCLIENT_INSTALL_STAGING = YES
LIBMPDCLIENT_LICENSE = BSD-3-Clause
LIBMPDCLIENT_LICENSE_FILES = COPYING

$(eval $(meson-package))
\end{minted}
    }
  \end{block}
\end{frame}

\begin{frame}[fragile]{Download infrastructure improvements}

  \begin{columns}
    \column{0.7\textwidth}
  \begin{itemize}
  \item Main improvement: {\bf Git caching}, for Git-fetched packages
    \begin{itemize}
    \item Before: complete clone of the Git repository, checkout the
      requested version, create a tarball with the source code, throw
      away the Git repository
    \item Drawback: another full clone next time the package version
      is changed
    \item Now: keep a clone of the git repository in
      \code{$DL_DIR/<package>/git/}, much faster download when a
      Git-fetched package is updated
    \end{itemize}
  \item Tarballs are now stored in per-package sub-directories in
    \code{$DL_DIR}
  \item Major rewrite of the internals of the download infrastructure,
    \code{package/pkg-download.mk}, \code{support/download/}
  \end{itemize}
  \column{0.3\textwidth}
    \begin{block}{}
      {\tiny
\begin{verbatim}
$DL_DIR
+ uboot
  + git
    + api
    + arch
    + board
    + .git
    + Kbuild
    + Kconfig
    + Makefile
    + MAINTAINERS
    [...]
  + u-boot-2018.11.tar.bz2
  + u-boot-2019.04.tar.bz2
  + uboot-228801a215909365a....tar.gz
  + uboot-37425027b617af670....tar.gz
+ zeromq
  + zeromq-4.2.5.tar.gz
  + zeromq-4.3.1.tar.gz
  + zeromq-4.3.2.tar.gz
\end{verbatim}
      }
    \end{block}
  \end{columns}
\end{frame}

\begin{frame}[fragile]{Package updates and additions}
  \begin{columns}
    \column{0.7\textwidth}
    \begin{itemize}
    \item Between 2018.05 and 2020.05:
      \begin{itemize}
      \item 435 packages have been added
      \item A few packages have been removed: individual X.org proto
        packages, Qt4, GStreamer 0.10
      \end{itemize}
    \item Addition of: Rust (compiler, cargo), LLVM/Clang (not as a
      compiler), Mender, OpenJDK, OpenRC init system, OP-TEE OS,
      GObject-Introspection, AppArmor, zillions of Perl/Python modules
    \item Update of all major software stacks: Qt 5.15, X.org 1.20,
      GStreamer 1.16, Wayland 1.18, Weston 8.0, Kodi 18.7.
    \end{itemize}
    \begin{block}{}
      {\footnotesize
\begin{verbatim}
$ git log --format=oneline 2018.05..2020.05 package/ \
   | grep -i bump | wc -l
4016
\end{verbatim}
        }
    \end{block}
    \column{0.3\textwidth}
    \includegraphics[width=\textwidth]{box.jpg}
  \end{columns}
\end{frame}

\begin{frame}{Hardening options}
  \begin{columns}
    \column{0.7\textwidth}
    \begin{itemize}
    \item Addition of support for building the entire code base with a
      number of security hardening mechanisms
    \item Improvement of Stack Protection options:
      \code{BR2_SSP_REGULAR}, \code{BR2_SSP_STRONG}, \code{BR2_SSP_ALL}
    \item Addition of {\em RELRO} protection options:
      \code{BR2_RELRO_NONE}, \code{BR2_RELRO_PARTIAL},
      \code{BR2_RELRO_FULL}
    \item Addition of buffer-overflow detection ({\em FORTIFY SOURCE})
      options: \code{BR2_FORTIFY_SOURCE_NONE},
      \code{BR2_FORTIFY_SOURCE_1}, \code{BR2_FORTIFY_SOURCE_2}
    \item Mostly contributed by Collins Aerospace
    \end{itemize}
    \column{0.3\textwidth}
    \includegraphics[width=\textwidth]{keys.jpg}
  \end{columns}
\end{frame}

\begin{frame}[fragile]{New target: {\tt make show-info}}
  \begin{columns}
    \column{0.5\textwidth}
    \begin{itemize}
    \item New top-level target: \code{make show-info}
    \item Outputs a JSON blurb that provides lost of metadata about the
      packages enabled in the current configuration
    \item JSON makes it easily usable in scripts and tools
    \item Allows to analyze the contents of a system, validate the
      choice of packages, get their download URL, and more.
    \item Other analysis tool already present:
      \begin{itemize}
      \item \code{legal-info}
      \item \code{graph-build}, \code{graph-size}
      \end{itemize}
    \end{itemize}
    \column{0.5\textwidth} {\tiny
\begin{minted}{json}
{
  "busybox": {
    "type": "target",
    "virtual": false,
    "version": "1.31.0",
    "licenses": "GPL-2.0",
    "dl_dir": "busybox",
    "install_target": true,
    "install_staging": false,
    "install_images": false,
    "downloads": [
      {
        "source": "busybox-1.31.0.tar.bz2",
        "uris": [
          "http+http://www.busybox.net/downloads",
          "http|urlencode+http://sources.buildroot.net/busybox",
          "http|urlencode+http://sources.buildroot.net"
        ]
      }
    ],
    "dependencies": [
      "host-skeleton",
      "host-tar",
      "skeleton",
      "toolchain"
    ],
    "reverse_dependencies": []
  },
\end{minted}
    }
  \end{columns}
\end{frame}

\begin{frame}{Reproducible builds}
  \begin{columns}
    \column{0.8\textwidth}
    \begin{itemize}
    \item Goal: given a Buildroot configuration/version, two builds will
      give two exactly identical results
    \item Google Summer of Code in summer 2019, with Atharva Lele
      working on {\em Reproducible Builds}
    \item Mentored by Arnout Vandecappelle and Yann E. Morin
    \item Automated testing on \url{autobuild.buildroot.org}
      \begin{itemize}
      \item Some builds are done twice, with \code{BR2_REPRODUCIBLE=y},
        and then tested for equality
      \item If not equal, comparison done with \code{diffoscope} to
        facilitate the analysis
      \item Differences between builds: build time and location
      \item Ultimately between environments
      \end{itemize}
    \item Fixes in tar, gzip and cpio handling to avoid timestamp issues
    \item More work is needed: improving the diffoscope reporting (in
      progress), fix the reproducibility issues
    \end{itemize}
    \column{0.2\textwidth}
    \includegraphics[width=0.8\textwidth]{reproducible.jpg}
  \end{columns}
\end{frame}

\begin{frame}[fragile]{Reproducible build result}
  \begin{block}{}
    {\tiny
\begin{verbatim}
--- /home/naourr/work/instance-1/output-1/images/rootfs.tar
+++ /home/naourr/work/instance-1/output-2/images/rootfs.tar
./usr/lib/asterisk/modules/app_agent_pool.so
/home/naourr/work/instance-1/output-1/host/bin/m68k-linux-readelf --wide --decompress --hex-dump=.rodata {}
 @@ -112,15 +112,15 @@
    0x0000a2f2 20746f20 6a6f696e 20746865 20627269  to join the bri
    0x0000a302 6467652e 0a004552 524f5200 4167656e dge...ERROR.Agen
    0x0000a312 74202725 73273a20 4661696c 65642074 t '%s': Failed t
    0x0000a322 6f20616c 65727420 74686520 6167656e o alert the agen
    0x0000a332 742e0a00 4e4f545f 434f4e4e 45435445 t...NOT_CONNECTE
    0x0000a342 44002f68 6f6d652f 6e616f75 72722f77 D./home/naourr/w
    0x0000a352 6f726b2f 696e7374 616e6365 2d312f6f ork/instance-1/o
 -  0x0000a362 75747075 742d312f 6275696c 642f6173 utput-1/build/as
 +  0x0000a362 75747075 742d322f 6275696c 642f6173 utput-2/build/as
    0x0000a372 74657269 736b2d31 362e362e 312f696e terisk-16.6.1/in
    0x0000a382 636c7564 652f6173 74657269 736b2f73 clude/asterisk/s
    0x0000a392 7472696e 67732e68 00416374 696f6e49 trings.h.ActionI
    0x0000a3a2 44004163 74696f6e 49443a20 25730d0a D.ActionID: %s..
    0x0000a3b2 00737461 72740041 67656e74 73207769 .start.Agents wi
    0x0000a3c2 6c6c2066 6f6c6c6f 77004167 656e743a ll follow.Agent:
    0x0000a3d2 2025730d 0a004e61 6d653a20 25730d0a  %s...Name: %s..
\end{verbatim}
    }
  \end{block}
\end{frame}

\begin{frame}{Top-level parallel build}
  \begin{columns}
    \column{0.8\textwidth}
    \begin{itemize}
    \item {\bf Goal}: build several packages in parallel
    \item Experimental support {\bf merged} in 2020.02
    \item \code{BR2_PER_PACKAGE_DIRECTORIES=y} option
      \begin{itemize}
      \item Enables {\em per-package build}
      \item Each package has its own \code{HOST_DIR} (including the
        compiler sysroot) and \code{TARGET_DIR}
      \item Guarantees that the dependencies seen by the package are
        always consistent
      \end{itemize}
    \item When enabled, \code{make -jX} at the top-level works!
    \item Significant build time reduction for large configurations
    \item Still some limitations: Qt5 has issues, the \code{-rebuild},
      \code{-reconfigure}, \code{-reinstall} targets are not working
      yet
    \end{itemize}
    \column{0.2\textwidth}
    \includegraphics[width=0.8\textwidth]{parallel.jpg}
  \end{columns}
\end{frame}

\begin{frame}{Without top-level parallel build}
  \begin{center}
    \includegraphics[height=0.8\textheight]{buildroot-no-parallel.jpg}
  \end{center}
\end{frame}

\begin{frame}{With top-level parallel build}
  \begin{center}
    \includegraphics[height=0.8\textheight]{buildroot-parallel.jpg}
  \end{center}
\end{frame}

\begin{frame}{Runtime tests}
  \begin{columns}
    \column{0.7\textwidth}
    \begin{itemize}
    \item A {\em runtime test} infrastructure was introduced in 2017.02
    \item Each test case:
      \begin{itemize}
      \item Builds a well-defined configuration
      \item Boots it under Qemu
      \item Runs some tests to verify that a given feature is working
      \end{itemize}
    \item Complementary to {\em autobuilder} testing, which tests the
      build of random configurations
    \item \code{./support/testing/run-tests -h}
    \item Many new test cases added
      \begin{itemize}
      \item ATF, Python modules, Perl modules, Lua modules, OpenJDK,
        X.org/Mesa3D, Docker/Docker-Compose, hardening flags
      \end{itemize}
    \end{itemize}
    \column{0.3\textwidth}
    \includegraphics[width=\textwidth]{test.jpg}
  \end{columns}
\end{frame}

\begin{frame}{Tooling improvements}
  \begin{columns}
    \column{0.6\textwidth}
    \begin{itemize}
    \item Internship of Victor Huesca at Bootlin in summer 2019,
      mentored by Thomas Petazzoni
    \item Topic: improve the Buildroot maintenance tooling
      \begin{itemize}
      \item Use of \code{release-monitoring.org} for tracking upstream
        releases
      \item Improved Buildroot developer notifications
      \item Improved autobuilder search capabilities
      \end{itemize}
    \end{itemize}
    \column{0.4\textwidth}
    \includegraphics[width=0.8\textwidth]{tools.jpg}
  \end{columns}
\end{frame}

\begin{frame}{Tooling: use of {\tt release-monitoring.org}}
  \begin{itemize}
  \item \url{release-monitoring.org} is a service from the Fedora
    community that tracks upstream releases of open-source projects
  \item Currently tracks 27000+ projects
  \item Buildroot has 2500+ packages, difficult to make sure they are
    all kept up-to-date
  \item Buildroot \code{pkg-stats} script produces a table of
    statistics about Buildroot packages, especially current version
    vs. upstream version
  \item Improvements:
    \begin{itemize}
    \item Lots of {\em mappings} between Buildroot packages and
      \url{release-monitoring.org} packages added
    \item Fixes to Buildroot packages for the package version to match
      better
    \item JSON output in addition to HTML output (useful for tooling,
      next slide)
    \item Speed improvement
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}{release-monitoring.org}
  \begin{center}
    \includegraphics[height=0.9\textheight]{release-monitoring.png}
  \end{center}
\end{frame}

\begin{frame}[fragile]{CVE checking}
  \begin{columns}
    \column{0.7\textwidth}
    \begin{itemize}
    \item Goal: ensure Buildroot has fixes for the CVEs reported on all
      its packages
    \item The {\em NIST} provides the {\bf National Vulnerability
        Database} (NVD) containing all known CVEs
    \item Buildroot \code{pkg-stats} has been improved to report CVE
      associated to each package, depending on the package version.
    \item New variable \code{<pkg>_IGNORE_CVES} that allows to ignore
      CVEs if they are fixed locally by a patch.
      \begin{block}{}
\begin{verbatim}
# debian/patches/length-check.patch
LIBMAD_IGNORE_CVES += CVE-2017-8374
\end{verbatim}
        \end{block}
      \item Allows package maintainers to know when they have CVEs to
        look at and update the package accordingly
    \end{itemize}
    \column{0.3\textwidth}
    \includegraphics[width=\textwidth]{nvd-logo.png}
  \end{columns}
\end{frame}

\begin{frame}{http://autobuild.buildroot.org/stats/}
  \begin{center}
    \includegraphics[width=\textwidth]{autobuild-stats.png}
  \end{center}
\end{frame}

\begin{frame}{Tooling: improved developer notifications}
  \begin{columns}
    \column{0.7\textwidth}
    \begin{itemize}
    \item Buildroot has a \code{DEVELOPERS} file, associating developers
      with packages, defconfigs, architectures, tests they maintain
    \item Already used to send notifications of build failures reported
      by the Buildroot autobuilders
    \item Notification e-mail has been improved with:
      \begin{itemize}
      \item Notification about packages that are not up-to-date,
        according to \code{release-monitoring.org}
      \item Notification about packages that have unfixed CVEs
        according to the NVD database
      \item Failures in the build of defconfigs in Gitlab CI
      \item Failures in the execution of runtime tests in Gitlab CI
      \end{itemize}
    \end{itemize}
    \column{0.3\textwidth}
    \includegraphics[width=\textwidth]{notification.png}
  \end{columns}
\end{frame}

\begin{frame}{Tooling: improved developer notifications}
  \begin{center}
    \includegraphics[width=0.8\textwidth]{email-notif-versions.png}
  \end{center}

  \begin{center}
    \includegraphics[width=0.8\textwidth]{email-notif-cve.png}
  \end{center}
\end{frame}

\begin{frame}{Tooling: improved developer notifications}
  \begin{center}
    \includegraphics[width=\textwidth]{email-notif-gitlab-ci.png}
  \end{center}
\end{frame}

\begin{frame}{Tooling: improved autobuilder search capabilities}
  \begin{columns}
    \column{0.7\textwidth}
    \begin{itemize}
    \item \code{autobuild.buildroot.org} collects results from random
      builds executed by our autobuilders
    \item Testing random configurations 24/7, allows to detect numerous
      dependency problems, version compatibility issues, toolchain
      problems, and more.
    \item Running this testing effort for many years
    \item Improvement:
      \begin{itemize}
      \item Can now search through build results by config symbol
      \item Ex: {\em what are the successful builds that had
          \code{BR2_PACKAGE_BUSYBOX=y} on ARM, with uClibc ?}
      \item Very useful tool when analyzing build issues, and trying to
        understand in which situations it happens / since when
      \end{itemize}
    \end{itemize}
    \column{0.3\textwidth}
    \includegraphics[width=\textwidth]{binoculars.jpg}
  \end{columns}
\end{frame}

\begin{frame}{Other smaller improvements}
  \begin{itemize}
  \item Addition of a \code{make <pkg>-diff-config} target for {\em
      kconfig} based packages: Linux, U-Boot, Busybox, etc.
    \begin{itemize}
    \item Shows the difference between the current package
      configuration and the one that is stored in the Buildroot
      configuration
    \end{itemize}
  \item Support for generating rootfs images in F2FS, BTRFS and EROFS
    formats
  \item Support for {\em gettext-tiny} as an alternative to full blown
    {\em GNU Gettext}
    \begin{itemize}
    \item Smaller footprint, smaller build time, for cases where
      native language support is not needed
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}{Conclusion}
  \begin{itemize}
  \item Very active project
  \item LTS release, 1 year maintenance for security/bug fixes
  \item New CPU architectures
  \item Package infrastructures for new build systems
  \item Git caching
  \item Packages kept up-to-date, many new packages
  \item Top-level parallel build
  \item Reproducible builds effort in progress
  \item Maintenance tooling improvements
  \end{itemize}

  \begin{center}

    {\bf Online Buildroot training} with Thomas Petazzoni, 16 hours to
    dive into Buildroot, July 28-31, 2020. Register at
    \url{https://bootlin.com} !

  \end{center}

\end{frame}

\questionslide

\end{document}
