<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >

<chapter id='migration'>
<title>Migrating to a Newer Yocto Project Release</title>

    <para>
        This chapter provides information you can use to migrate work to a
        newer Yocto Project release.  You can find the same information in the
        release notes for a given release.
    </para>

<section id='general-migration-considerations'>
    <title>General Migration Considerations</title>

    <para>
        Some considerations are not tied to a specific Yocto Project
        release.
        This section presents information you should consider when
        migrating to any new Yocto Project release.
        <itemizedlist>
            <listitem><para><emphasis>Dealing with Customized Recipes</emphasis>:
                Issues could arise if you take older recipes that contain
                customizations and simply copy them forward expecting them
                to work after you migrate to new Yocto Project metadata.
                For example, suppose you have a recipe in your layer that is
                a customized version of a core recipe copied from the earlier
                release, rather than through the use of an append file.
                When you migrate to a newer version of Yocto Project, the
                metadata (e.g. perhaps an include file used by the recipe)
                could have changed in a way that would break the build.
                Say, for example, a function is removed from an include file
                and the customized recipe tries to call that function.
                </para>

                <para>You could "forward-port" all your customizations in your
                recipe so that everything works for the new release.
                However, this is not the optimal solution as you would have
                to repeat this process with each new release if changes
                occur that give rise to problems.</para>

                <para>The better solution (where practical) is to use append
                files (<filename>*.bbappend</filename>) to capture any
                customizations you want to make to a recipe.
                Doing so, isolates your changes from the main recipe making
                them much more manageable.
                However, sometimes it is not practical to use an append
                file.
                A good example of this is when introducing a newer or older
                version of a recipe in another layer.</para>
                </listitem>
            <listitem><para><emphasis>Updating Append Files</emphasis>:
                Since append files generally only contain your customizations,
                they often do not need to be adjusted for new releases.
                However, if the <filename>.bbappend</filename> file is
                specific to a particular version of the recipe (i.e. its
                name does not use the % wildcard) and the version of the
                recipe to which it is appending has changed, then you will
                at a minimum need to rename the append file to match the
                name of the recipe file.
                A mismatch between an append file and its corresponding
                recipe file (<filename>.bb</filename>) will
                trigger an error during parsing.</para>
                <para>Depending on the type of customization the append file
                applies, other incompatibilities might occur when you
                upgrade.
                For example, if your append file applies a patch and the
                recipe to which it is appending is updated to a newer
                version, the patch might no longer apply.
                If this is the case and assuming the patch is still needed,
                you must modify the patch file so that it does apply.
                </para></listitem>
        </itemizedlist>
    </para>
</section>

<section id='moving-to-the-yocto-project-1.3-release'>
    <title>Moving to the Yocto Project 1.3 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 1.3 Release from the prior release.
    </para>

    <section id='1.3-local-configuration'>
        <title>Local Configuration</title>

        <para>
            Differences include changes for
            <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>
            and <filename>bblayers.conf</filename>.
        </para>

        <section id='migration-1.3-sstate-mirrors'>
            <title>SSTATE_MIRRORS</title>

            <para>
                The shared state cache (sstate-cache), as pointed to by
                <link linkend='var-SSTATE_DIR'><filename>SSTATE_DIR</filename></link>,
                by default now has two-character subdirectories to prevent
                issues arising from too many files in the same directory.
                Also, native sstate-cache packages, which are built to run
                on the host system, will go into a subdirectory named using
                the distro ID string.
                If you copy the newly structured sstate-cache to a mirror
                location (either local or remote) and then point to it in
                <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>,
                you need to append "PATH" to the end of the mirror URL so that
                the path used by BitBake before the mirror substitution is
                appended to the path used to access the mirror.
                Here is an example:
                <literallayout class='monospaced'>
     SSTATE_MIRRORS = "file://.* http://<replaceable>someserver</replaceable>.tld/share/sstate/PATH"
                </literallayout>
            </para>
        </section>

        <section id='migration-1.3-bblayers-conf'>
            <title>bblayers.conf</title>

            <para>
                The <filename>meta-yocto</filename> layer consists of two parts
                that correspond to the Poky reference distribution and the
                reference hardware Board Support Packages (BSPs), respectively:
                <filename>meta-yocto</filename> and
                <filename>meta-yocto-bsp</filename>.
                When running BitBake for the first time after upgrading,
                your <filename>conf/bblayers.conf</filename> file will be
                updated to handle this change and you will be asked to
                re-run or restart for the changes to take effect.
            </para>
        </section>
    </section>

    <section id='1.3-recipes'>
        <title>Recipes</title>

        <para>
            Differences include changes for the following:
            <itemizedlist>
                <listitem><para>Python function whitespace</para></listitem>
                <listitem><para><filename>proto=</filename> in <filename>SRC_URI</filename></para></listitem>
                <listitem><para><filename>nativesdk</filename></para></listitem>
                <listitem><para>Task recipes</para></listitem>
                <listitem><para><filename>IMAGE_FEATURES</filename></para></listitem>
                <listitem><para>Removed recipes</para></listitem>
            </itemizedlist>
        </para>

        <section id='migration-1.3-python-function-whitespace'>
            <title>Python Function Whitespace</title>

            <para>
                All Python functions must now use four spaces for indentation.
                Previously, an inconsistent mix of spaces and tabs existed,
                which made extending these functions using
                <filename>_append</filename> or <filename>_prepend</filename>
                complicated given that Python treats whitespace as
                syntactically significant.
                If you are defining or extending any Python functions (e.g.
                <filename>populate_packages</filename>, <filename>do_unpack</filename>,
                <filename>do_patch</filename> and so forth) in custom recipes
                or classes, you need to ensure you are using consistent
                four-space indentation.
            </para>
        </section>

        <section id='migration-1.3-proto=-in-src-uri'>
            <title>proto= in SRC_URI</title>

            <para>
                Any use of <filename>proto=</filename> in
                <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
                needs to be changed to <filename>protocol=</filename>.
                In particular, this applies to the following URIs:
                <itemizedlist>
                    <listitem><para><filename>svn://</filename></para></listitem>
                    <listitem><para><filename>bzr://</filename></para></listitem>
                    <listitem><para><filename>hg://</filename></para></listitem>
                    <listitem><para><filename>osc://</filename></para></listitem>
                </itemizedlist>
                Other URIs were already using <filename>protocol=</filename>.
                This change improves consistency.
            </para>
        </section>

        <section id='migration-1.3-nativesdk'>
            <title>nativesdk</title>

            <para>
                The suffix <filename>nativesdk</filename> is now implemented
                as a prefix, which simplifies a lot of the packaging code for
                <filename>nativesdk</filename> recipes.
                All custom <filename>nativesdk</filename> recipes, which are
                relocatable packages that are native to
                <link linkend='var-SDK_ARCH'><filename>SDK_ARCH</filename></link>,
                and any references need to be updated to use
                <filename>nativesdk-*</filename> instead of
                <filename>*-nativesdk</filename>.
            </para>
        </section>

        <section id='migration-1.3-task-recipes'>
            <title>Task Recipes</title>

            <para>
                "Task" recipes are now known as "Package groups" and have
                been renamed from <filename>task-*.bb</filename> to
                <filename>packagegroup-*.bb</filename>.
                Existing references to the previous <filename>task-*</filename>
                names should work in most cases as there is an automatic
                upgrade path for most packages.
                However, you should update references in your own recipes and
                configurations as they could be removed in future releases.
                You should also rename any custom <filename>task-*</filename>
                recipes to <filename>packagegroup-*</filename>, and change
                them to inherit <filename>packagegroup</filename> instead of
                <filename>task</filename>, as well as taking the opportunity
                to remove anything now handled by
                <filename>packagegroup.bbclass</filename>, such as providing
                <filename>-dev</filename> and <filename>-dbg</filename>
                packages, setting
                <link linkend='var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></link>,
                and so forth.
                See the
                "<link linkend='ref-classes-packagegroup'><filename>packagegroup.bbclass</filename></link>"
                section for further details.
            </para>
        </section>

        <section id='migration-1.3-image-features'>
            <title>IMAGE_FEATURES</title>

            <para>
                Image recipes that previously included "apps-console-core"
                in <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
                should now include "splash" instead to enable the boot-up
                splash screen.
                Retaining "apps-console-core" will still include the splash
                screen but generates a warning.
                The "apps-x11-core" and "apps-x11-games"
                <filename>IMAGE_FEATURES</filename> features have been removed.
            </para>
        </section>

        <section id='migration-1.3-removed-recipes'>
            <title>Removed Recipes</title>

            <para>
                The following recipes have been removed.
                For most of them, it is unlikely that you would have any
                references to them in your own
                <link linkend='metadata'>Metadata</link>.
                However, you should check your metadata against this list to be sure:
                <itemizedlist>
                    <listitem><para><emphasis><filename>libx11-trim</filename></emphasis>:
                        Replaced by <filename>libx11</filename>, which has a negligible
                        size difference with modern Xorg.</para></listitem>
                    <listitem><para><emphasis><filename>xserver-xorg-lite</filename></emphasis>:
                        Use <filename>xserver-xorg</filename>, which has a negligible
                        size difference when DRI and GLX modules are not installed.</para></listitem>
                    <listitem><para><emphasis><filename>xserver-kdrive</filename></emphasis>:
                        Effectively unmaintained for many years.</para></listitem>
                    <listitem><para><emphasis><filename>mesa-xlib</filename></emphasis>:
                        No longer serves any purpose.</para></listitem>
                    <listitem><para><emphasis><filename>galago</filename></emphasis>:
                        Replaced by telepathy.</para></listitem>
                    <listitem><para><emphasis><filename>gail</filename></emphasis>:
                        Functionality was integrated into GTK+ 2.13.</para></listitem>
                    <listitem><para><emphasis><filename>eggdbus</filename></emphasis>:
                        No longer needed.</para></listitem>
                    <listitem><para><emphasis><filename>gcc-*-intermediate</filename></emphasis>:
                        The build has been restructured to avoid the need for
                        this step.</para></listitem>
                    <listitem><para><emphasis><filename>libgsmd</filename></emphasis>:
                        Unmaintained for many years.
                        Functionality now provided by
                        <filename>ofono</filename> instead.</para></listitem>
                    <listitem><para><emphasis>contacts, dates, tasks, eds-tools</emphasis>:
                        Largely unmaintained PIM application suite.
                        It has been moved to <filename>meta-gnome</filename>
                        in <filename>meta-openembedded</filename>.</para></listitem>
                </itemizedlist>
                In addition to the previously listed changes, the
                <filename>meta-demoapps</filename> directory has also been removed
                because the recipes in it were not being maintained and many
                had become obsolete or broken.
                Additionally, these recipes were not parsed in the default configuration.
                Many of these recipes are already provided in an updated and
                maintained form within the OpenEmbedded community layers such as
                <filename>meta-oe</filename> and <filename>meta-gnome</filename>.
                For the remainder, you can now find them in the
                <filename>meta-extras</filename> repository, which is in the
                Yocto Project
                <ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>.
            </para>
        </section>
    </section>

    <section id='1.3-linux-kernel-naming'>
        <title>Linux Kernel Naming</title>

        <para>
            The naming scheme for kernel output binaries has been changed to
            now include
            <link linkend='var-PE'><filename>PE</filename></link> as part of the
            filename:
            <literallayout class='monospaced'>
     KERNEL_IMAGE_BASE_NAME ?= "${KERNEL_IMAGETYPE}-${PE}-${PV}-${PR}-${MACHINE}-${DATETIME}"
            </literallayout>
        </para>

        <para>
            Because the <filename>PE</filename> variable is not set by default,
            these binary files could result with names that include two dash
            characters.
            Here is an example:
            <literallayout class='monospaced'>
     bzImage--3.10.9+git0+cd502a8814_7144bcc4b8-r0-qemux86-64-20130830085431.bin
            </literallayout>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-1.4-release'>
    <title>Moving to the Yocto Project 1.4 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 1.4 Release from the prior release.
    </para>

    <section id='migration-1.4-bitbake'>
        <title>BitBake</title>

        <para>
            Differences include the following:
            <itemizedlist>
                <listitem><para><emphasis>Comment Continuation:</emphasis>
                    If a comment ends with a line continuation (\) character,
                    then the next line must also be a comment.
                    Any instance where this is not the case, now triggers
                    a warning.
                    You must either remove the continuation character, or be
                    sure the next line is a comment.
                    </para></listitem>
                <listitem><para><emphasis>Package Name Overrides:</emphasis>
                    The runtime package specific variables
                    <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
                    <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
                    <link linkend='var-RSUGGESTS'><filename>RSUGGESTS</filename></link>,
                    <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>,
                    <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</filename></link>,
                    <link linkend='var-RREPLACES'><filename>RREPLACES</filename></link>,
                    <link linkend='var-FILES'><filename>FILES</filename></link>,
                    <link linkend='var-ALLOW_EMPTY'><filename>ALLOW_EMPTY</filename></link>,
                    and the pre, post, install, and uninstall script functions
                    <filename>pkg_preinst</filename>,
                    <filename>pkg_postinst</filename>,
                    <filename>pkg_prerm</filename>, and
                    <filename>pkg_postrm</filename> should always have a
                    package name override.
                    For example, use <filename>RDEPENDS_${PN}</filename> for
                    the main package instead of <filename>RDEPENDS</filename>.
                    BitBake uses more strict checks when it parses recipes.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.4-build-behavior'>
        <title>Build Behavior</title>

        <para>
            Differences include the following:
            <itemizedlist>
                <listitem><para><emphasis>Shared State Code:</emphasis>
                    The shared state code has been optimized to avoid running
                    unnecessary tasks.
                    For example, the following no longer populates the target
                    sysroot since that is not necessary:
                    <literallayout class='monospaced'>
     $ bitbake -c rootfs <replaceable>some-image</replaceable>
                    </literallayout>
                    Instead, the system just needs to extract the output
                    package contents, re-create the packages, and construct
                    the root filesystem.
                    This change is unlikely to cause any problems unless
                    you have missing declared dependencies.
                    </para></listitem>
                <listitem><para><emphasis>Scanning Directory Names:</emphasis>
                    When scanning for files in
                    <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>,
                    the build system now uses
                    <link linkend='var-FILESOVERRIDES'><filename>FILESOVERRIDES</filename></link>
                    instead of <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
                    for the directory names.
                    In general, the values previously in
                    <filename>OVERRIDES</filename> are now in
                    <filename>FILESOVERRIDES</filename> as well.
                    However, if you relied upon an additional value
                    you previously added to <filename>OVERRIDES</filename>,
                    you might now need to add it to
                    <filename>FILESOVERRIDES</filename> unless you are already
                    adding it through the
                    <link linkend='var-MACHINEOVERRIDES'><filename>MACHINEOVERRIDES</filename></link>
                    or <link linkend='var-DISTROOVERRIDES'><filename>DISTROOVERRIDES</filename></link>
                    variables, as appropriate.
                    For more related changes, see the
                    "<link linkend='migration-1.4-variables'>Variables</link>"
                    section.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>


    <section id='migration-1.4-proxies-and-fetching-source'>
        <title>Proxies and Fetching Source</title>

        <para>
            A new <filename>oe-git-proxy</filename> script has been added to
            replace previous methods of handling proxies and fetching source
            from Git.
            See the <filename>meta-yocto/conf/site.conf.sample</filename> file
            for information on how to use this script.
        </para>
    </section>

    <section id='migration-1.4-custom-interfaces-file-netbase-change'>
        <title>Custom Interfaces File (netbase change)</title>

        <para>
            If you have created your own custom
            <filename>etc/network/interfaces</filename> file by creating
            an append file for the <filename>netbase</filename> recipe,
            you now need to create an append file for the
            <filename>init-ifupdown</filename> recipe instead, which you can
            find in the
            <link linkend='source-directory'>Source Directory</link>
            at <filename>meta/recipes-core/init-ifupdown</filename>.
            For information on how to use append files, see the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#using-bbappend-files'>Using .bbappend Files</ulink>"
            section in the Yocto Project Development Tasks Manual.
        </para>
    </section>

    <section id='migration-1.4-remote-debugging'>
        <title>Remote Debugging</title>

        <para>
            Support for remote debugging with the Eclipse IDE is now
            separated into an image feature
            (<filename>eclipse-debug</filename>) that corresponds to the
            <filename>packagegroup-core-eclipse-debug</filename> package group.
            Previously, the debugging feature was included through the
            <filename>tools-debug</filename> image feature, which corresponds
            to the <filename>packagegroup-core-tools-debug</filename>
            package group.
        </para>
    </section>

    <section id='migration-1.4-variables'>
        <title>Variables</title>

        <para>
            The following variables have changed:
            <itemizedlist>
                <listitem><para><emphasis><filename>SANITY_TESTED_DISTROS</filename>:</emphasis>
                    This variable now uses a distribution ID, which is composed
                    of the host distributor ID followed by the release.
                    Previously,
                    <link linkend='var-SANITY_TESTED_DISTROS'><filename>SANITY_TESTED_DISTROS</filename></link>
                    was composed of the description field.
                    For example, "Ubuntu 12.10" becomes "Ubuntu-12.10".
                    You do not need to worry about this change if you are not
                    specifically setting this variable, or if you are
                    specifically setting it to "".
                    </para></listitem>
                <listitem><para><emphasis><filename>SRC_URI</filename>:</emphasis>
                    The <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>,
                    <filename>${</filename><link linkend='var-PF'><filename>PF</filename></link><filename>}</filename>,
                    <filename>${</filename><link linkend='var-P'><filename>P</filename></link><filename>}</filename>,
                    and <filename>FILE_DIRNAME</filename> directories have been
                    dropped from the default value of the
                    <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
                    variable, which is used as the search path for finding files
                    referred to in
                    <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>.
                    If you have a recipe that relied upon these directories,
                    which would be unusual, then you will need to add the
                    appropriate paths within the recipe or, alternatively,
                    rearrange the files.
                    The most common locations are still covered by
                    <filename>${BP}</filename>, <filename>${BPN}</filename>,
                    and "files", which all remain in the default value of
                    <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-target-package-management-with-rpm'>
        <title>Target Package Management with RPM</title>

        <para>
            If runtime package management is enabled and the RPM backend
            is selected, Smart is now installed for package download, dependency
            resolution, and upgrades instead of Zypper.
            For more information on how to use Smart, run the following command
            on the target:
            <literallayout class='monospaced'>
     smart --help
            </literallayout>
        </para>
    </section>

    <section id='migration-1.4-recipes-moved'>
        <title>Recipes Moved</title>

        <para>
            The following recipes were moved from their previous locations
            because they are no longer used by anything in
            the OpenEmbedded-Core:
            <itemizedlist>
                <listitem><para><emphasis><filename>clutter-box2d</filename>:</emphasis>
                    Now resides in the <filename>meta-oe</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>evolution-data-server</filename>:</emphasis>
                    Now resides in the <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>gthumb</filename>:</emphasis>
                    Now resides in the <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>gtkhtml2</filename>:</emphasis>
                    Now resides in the <filename>meta-oe</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>gupnp</filename>:</emphasis>
                    Now resides in the <filename>meta-multimedia</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>gypsy</filename>:</emphasis>
                    Now resides in the <filename>meta-oe</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>libcanberra</filename>:</emphasis>
                    Now resides in the <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>libgdata</filename>:</emphasis>
                    Now resides in the <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>libmusicbrainz</filename>:</emphasis>
                    Now resides in the <filename>meta-multimedia</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>metacity</filename>:</emphasis>
                    Now resides in the <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>polkit</filename>:</emphasis>
                    Now resides in the <filename>meta-oe</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>zeroconf</filename>:</emphasis>
                    Now resides in the <filename>meta-networking</filename> layer.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.4-removals-and-renames'>
        <title>Removals and Renames</title>

        <para>
            The following list shows what has been removed or renamed:
            <itemizedlist>
                <listitem><para><emphasis><filename>evieext</filename>:</emphasis>
                    Removed because it has been removed from
                    <filename>xserver</filename> since 2008.
                    </para></listitem>
                <listitem><para><emphasis>Gtk+ DirectFB:</emphasis>
                    Removed support because upstream Gtk+ no longer supports it
                    as of version 2.18.
                    </para></listitem>
                <listitem><para><emphasis><filename>libxfontcache / xfontcacheproto</filename>:</emphasis>
                    Removed because they were removed from the Xorg server in 2008.
                    </para></listitem>
                <listitem><para><emphasis><filename>libxp / libxprintapputil / libxprintutil / printproto</filename>:</emphasis>
                    Removed because the XPrint server was removed from
                    Xorg in 2008.
                    </para></listitem>
                <listitem><para><emphasis><filename>libxtrap / xtrapproto</filename>:</emphasis>
                    Removed because their functionality was broken upstream.
                    </para></listitem>
                <listitem><para><emphasis>linux-yocto 3.0 kernel:</emphasis>
                    Removed with linux-yocto 3.8 kernel being added.
                    The linux-yocto 3.2 and linux-yocto 3.4 kernels remain
                    as part of the release.
                    </para></listitem>
                <listitem><para><emphasis><filename>lsbsetup</filename>:</emphasis>
                    Removed with functionality now provided by
                    <filename>lsbtest</filename>.
                    </para></listitem>
                <listitem><para><emphasis><filename>matchbox-stroke</filename>:</emphasis>
                    Removed because it was never more than a proof-of-concept.
                    </para></listitem>
                <listitem><para><emphasis><filename>matchbox-wm-2 / matchbox-theme-sato-2</filename>:</emphasis>
                    Removed because they are not maintained.
                    However, <filename>matchbox-wm</filename> and
                    <filename>matchbox-theme-sato</filename> are still
                    provided.
                    </para></listitem>
                <listitem><para><emphasis><filename>mesa-dri</filename>:</emphasis>
                    Renamed to <filename>mesa</filename>.
                    </para></listitem>
                <listitem><para><emphasis><filename>mesa-xlib</filename>:</emphasis>
                    Removed because it was no longer useful.
                    </para></listitem>
                <listitem><para><emphasis><filename>mutter</filename>:</emphasis>
                    Removed because nothing ever uses it and the recipe is
                    very old.
                    </para></listitem>
                <listitem><para><emphasis><filename>orinoco-conf</filename>:</emphasis>
                    Removed because it has become obsolete.
                    </para></listitem>
                <listitem><para><emphasis><filename>update-modules</filename>:</emphasis>
                    Removed because it is no longer used.
                    The kernel module <filename>postinstall</filename> and
                    <filename>postrm</filename> scripts can now do the same
                    task without the use of this script.
                    </para></listitem>
                <listitem><para><emphasis><filename>web</filename>:</emphasis>
                    Removed because it is not maintained.  Superseded by
                    <filename>web-webkit</filename>.
                    </para></listitem>
                <listitem><para><emphasis><filename>xf86bigfontproto</filename>:</emphasis>
                    Removed because upstream it has been disabled by default
                    since 2007.
                    Nothing uses <filename>xf86bigfontproto</filename>.
                    </para></listitem>
                <listitem><para><emphasis><filename>xf86rushproto</filename>:</emphasis>
                    Removed because its dependency in
                    <filename>xserver</filename> was spurious and it was
                    removed in 2005.
                    </para></listitem>
                <listitem><para><emphasis><filename>zypper / libzypp / sat-solver</filename>:</emphasis>
                    Removed and been functionally replaced with Smart
                    (<filename>python-smartpm</filename>) when RPM packaging
                    is used and package management is enabled on the target.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-1.5-release'>
    <title>Moving to the Yocto Project 1.5 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 1.5 Release from the prior release.
    </para>

    <section id='migration-1.5-host-dependency-changes'>
        <title>Host Dependency Changes</title>

        <para>
            The OpenEmbedded build system now has some additional requirements
            on the host system:
            <itemizedlist>
                <listitem><para>Python 2.7.3+</para></listitem>
                <listitem><para>Tar 1.24+</para></listitem>
                <listitem><para>Git 1.7.8+</para></listitem>
                <listitem><para>Patched version of Make if you are using
                    3.82.
                    Most distributions that provide Make 3.82 use the patched
                    version.</para></listitem>
            </itemizedlist>
            If the Linux distribution you are using on your build host
            does not provide packages for these, you can install and use
            the Buildtools tarball, which provides an SDK-like environment
            containing them.
        </para>

        <para>
            For more information on this requirement, see the
            "<link linkend='required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</link>"
            section.
        </para>
    </section>

    <section id='migration-1.5-atom-pc-bsp'>
        <title><filename>atom-pc</filename> Board Support Package (BSP)</title>

        <para>
            The <filename>atom-pc</filename> hardware reference BSP has been
            replaced by a <filename>genericx86</filename> BSP.
            This BSP is not necessarily guaranteed to work on all x86
            hardware, but it will run on a wider range of systems than the
            <filename>atom-pc</filename> did.
            <note>
                Additionally, a <filename>genericx86-64</filename> BSP has
                been added for 64-bit Atom systems.
            </note>
        </para>
    </section>

    <section id='migration-1.5-bitbake'>
        <title>BitBake</title>

        <para>
            The following changes have been made that relate to BitBake:
            <itemizedlist>
                <listitem><para>
                    BitBake now supports a <filename>_remove</filename>
                    operator.
                    The addition of this operator means you will have to
                    rename any items in recipe space (functions, variables)
                    whose names currently contain
                    <filename>_remove_</filename> or end with
                    <filename>_remove</filename> to avoid unexpected behavior.
                    </para></listitem>
                <listitem><para>
                    BitBake's global method pool has been removed.
                    This method is not particularly useful and led to clashes
                    between recipes containing functions that had the
                    same name.</para></listitem>
                <listitem><para>
                    The "none" server backend has been removed.
                    The "process" server backend has been serving well as the
                    default for a long time now.</para></listitem>
                <listitem><para>
                    The <filename>bitbake-runtask</filename> script has been
                    removed.</para></listitem>
                <listitem><para>
                    <filename>${</filename><link linkend='var-P'><filename>P</filename></link><filename>}</filename>
                    and
                    <filename>${</filename><link linkend='var-PF'><filename>PF</filename></link><filename>}</filename>
                    are no longer added to
                    <link linkend='var-PROVIDES'><filename>PROVIDES</filename></link>
                    by default in <filename>bitbake.conf</filename>.
                    These version-specific <filename>PROVIDES</filename>
                    items were seldom used.
                    Attempting to use them could result in two versions being
                    built simultaneously rather than just one version due to
                    the way BitBake resolves dependencies.</para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.5-qa-warnings'>
        <title>QA Warnings</title>

        <para>
            The following changes have been made to the package QA checks:
            <itemizedlist>
                <listitem><para>
                    If you have customized
                    <link linkend='var-ERROR_QA'><filename>ERROR_QA</filename></link>
                    or <link linkend='var-WARN_QA'><filename>WARN_QA</filename></link>
                    values in your configuration, check that they contain all of
                    the issues that you wish to be reported.
                    Previous Yocto Project versions contained a bug that meant
                    that any item not mentioned in <filename>ERROR_QA</filename>
                    or <filename>WARN_QA</filename> would be treated as a
                    warning.
                    Consequently, several important items were not already in
                    the default value of <filename>WARN_QA</filename>.
                    All of the possible QA checks are now documented in the
                    "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
                    section.</para></listitem>
                <listitem><para>
                    An additional QA check has been added to check if
                    <filename>/usr/share/info/dir</filename> is being installed.
                    Your recipe should delete this file within
                    <link linkend='ref-tasks-install'><filename>do_install</filename></link>
                    if "make install" is installing it.
                    </para></listitem>
                <listitem><para>
                    If you are using the buildhistory class, the check for the
                    package version going backwards is now controlled using a
                    standard QA check.
                    Thus, if you have customized your
                    <filename>ERROR_QA</filename> or
                    <filename>WARN_QA</filename> values and still wish to have
                    this check performed, you should add
                    "version-going-backwards" to your value for one or the
                    other variables depending on how you wish it to be handled.
                    See the documented QA checks in the
                    "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
                    section.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.5-directory-layout-changes'>
        <title>Directory Layout Changes</title>

        <para>
            The following directory changes exist:
            <itemizedlist>
                <listitem><para>
                    Output SDK installer files are now named to include the
                    image name and tuning architecture through the
                    <link linkend='var-SDK_NAME'><filename>SDK_NAME</filename></link>
                    variable.</para></listitem>
                <listitem><para>
                    Images and related files are now installed into a directory
                    that is specific to the machine, instead of a parent
                    directory containing output files for multiple machines.
                    The
                    <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
                    variable continues to point to the directory containing
                    images for the current
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
                    and should be used anywhere there is a need to refer to
                    this directory.
                    The <filename>runqemu</filename> script now uses this
                    variable to find images and kernel binaries and will use
                    BitBake to determine the directory.
                    Alternatively, you can set the
                    <filename>DEPLOY_DIR_IMAGE</filename> variable in the
                    external environment.</para></listitem>
                <listitem><para>
                    When buildhistory is enabled, its output is now written
                    under the
                    <link linkend='build-directory'>Build Directory</link>
                    rather than
                    <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>.
                    Doing so makes it easier to delete
                    <filename>TMPDIR</filename> and preserve the build history.
                    Additionally, data for produced SDKs is now split by
                    <link linkend='var-IMAGE_NAME'><filename>IMAGE_NAME</filename></link>.
                    </para></listitem>
                <listitem><para>
                    The <filename>pkgdata</filename> directory produced as
                    part of the packaging process has been collapsed into a
                    single machine-specific directory.
                    This directory is located under
                    <filename>sysroots</filename> and uses a machine-specific
                    name (i.e.
                    <filename>tmp/sysroots/<replaceable>machine</replaceable>/pkgdata</filename>).
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.5-shortened-git-srcrev-values'>
        <title>Shortened Git <filename>SRCREV</filename> Values</title>

        <para>
            BitBake will now shorten revisions from Git repositories from the
            normal 40 characters down to 10 characters within
            <link linkend='var-SRCPV'><filename>SRCPV</filename></link>
            for improved usability in path and file names.
            This change should be safe within contexts where these revisions
            are used because the chances of spatially close collisions
            is very low.
            Distant collisions are not a major issue in the way
            the values are used.
        </para>
    </section>

    <section id='migration-1.5-image-features'>
        <title><filename>IMAGE_FEATURES</filename></title>

        <para>
            The following changes have been made that relate to
            <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>:
            <itemizedlist>
                <listitem><para>
                    The value of <filename>IMAGE_FEATURES</filename> is now
                    validated to ensure invalid feature items are not added.
                    Some users mistakenly add package names to this variable
                    instead of using
                    <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>
                    in order to have the package added to the image, which does
                    not work.
                    This change is intended to catch those kinds of situations.
                    Valid <filename>IMAGE_FEATURES</filename> are drawn from
                    <link linkend='var-PACKAGE_GROUP'><filename>PACKAGE_GROUP</filename></link>
                    definitions,
                    <link linkend='var-COMPLEMENTARY_GLOB'><filename>COMPLEMENTARY_GLOB</filename></link>
                    and a new "validitems" varflag on
                    <filename>IMAGE_FEATURES</filename>.
                    The "validitems" varflag change allows additional features
                    to be added if they are not provided using the previous
                    two mechanisms.
                    </para></listitem>
                <listitem><para>
                    The previously deprecated "apps-console-core"
                    <filename>IMAGE_FEATURES</filename> item is no longer
                    supported.
                    Add "splash" to <filename>IMAGE_FEATURES</filename> if you
                    wish to have the splash screen enabled, since this is
                    all that apps-console-core was doing.</para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.5-run'>
        <title><filename>/run</filename></title>

        <para>
            The <filename>/run</filename> directory from the Filesystem
            Hierarchy Standard 3.0 has been introduced.
            You can find some of the implications for this change
            <ulink url='http://cgit.openembedded.org/openembedded-core/commit/?id=0e326280a15b0f2c4ef2ef4ec441f63f55b75873'>here</ulink>.
            The change also means that recipes that install files to
            <filename>/var/run</filename> must be changed.
            You can find a guide on how to make these changes
            <ulink url='http://permalink.gmane.org/gmane.comp.handhelds.openembedded/58530'>here</ulink>.
        </para>
    </section>

    <section id='migration-1.5-removal-of-package-manager-database-within-image-recipes'>
        <title>Removal of Package Manager Database Within Image Recipes</title>

        <para>
            The image <filename>core-image-minimal</filename> no longer adds
            <filename>remove_packaging_data_files</filename> to
            <link linkend='var-ROOTFS_POSTPROCESS_COMMAND'><filename>ROOTFS_POSTPROCESS_COMMAND</filename></link>.
            This addition is now handled automatically when "package-management"
            is not in
            <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
            If you have custom image recipes that make this addition,
            you should remove the lines, as they are not needed and might
            interfere with correct operation of postinstall scripts.
        </para>
    </section>

    <section id='migration-1.5-images-now-rebuild-only-on-changes-instead-of-every-time'>
        <title>Images Now Rebuild Only on Changes Instead of Every Time</title>

        <para>
            The
            <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
            and other related image
            construction tasks are no longer marked as "nostamp".
            Consequently, they will only be re-executed when their inputs have
            changed.
            Previous versions of the OpenEmbedded build system always rebuilt
            the image when requested rather when necessary.
        </para>
    </section>

    <section id='migration-1.5-task-recipes'>
        <title>Task Recipes</title>

        <para>
            The previously deprecated <filename>task.bbclass</filename> has
            now been dropped.
            For recipes that previously inherited from this class, you should
            rename them from <filename>task-*</filename> to
            <filename>packagegroup-*</filename> and inherit packagegroup
            instead.
        </para>

        <para>
            For more information, see the
            "<link linkend='ref-classes-packagegroup'><filename>packagegroup.bbclass</filename></link>"
            section.
        </para>
    </section>

    <section id='migration-1.5-busybox'>
        <title>BusyBox</title>

        <para>
            By default, we now split BusyBox into two binaries:
            one that is suid root for those components that need it, and
            another for the rest of the components.
            Splitting BusyBox allows for optimization that eliminates the
            <filename>tinylogin</filename> recipe as recommended by upstream.
            You can disable this split by setting
            <link linkend='var-BUSYBOX_SPLIT_SUID'><filename>BUSYBOX_SPLIT_SUID</filename></link>
            to "0".
        </para>
    </section>

    <section id='migration-1.5-automated-image-testing'>
        <title>Automated Image Testing</title>

        <para>
            A new automated image testing framework has been added
            through the
            <link linkend='ref-classes-testimage*'><filename>testimage.bbclass</filename></link>
            class.
            This framework replaces the older
            <filename>imagetest-qemu</filename> framework.
        </para>

        <para>
            You can learn more about performing automated image tests in the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
            section in the Yocto Project Development Tasks Manual.
        </para>
    </section>

    <section id='migration-1.5-build-history'>
        <title>Build History</title>

        <para>
            Following are changes to Build History:
            <itemizedlist>
                <listitem><para>
                     Installed package sizes:
                     <filename>installed-package-sizes.txt</filename> for an
                     image now records the size of the files installed by each
                     package instead of the size of each compressed package
                     archive file.</para></listitem>
                <listitem><para>
                    The dependency graphs (<filename>depends*.dot</filename>)
                    now use the actual package names instead of replacing
                    dashes, dots and plus signs with underscores.
                    </para></listitem>
                <listitem><para>
                    The <filename>buildhistory-diff</filename> and
                    <filename>buildhistory-collect-srcrevs</filename>
                    utilities have improved command-line handling.
                    Use the <filename>--help</filename> option for
                    each utility for more information on the new syntax.
                    </para></listitem>
            </itemizedlist>
            For more information on Build History, see the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-build-output-quality'>Maintaining Build Output Quality</ulink>"
            section in the Yocto Project Development Tasks Manual.
        </para>
    </section>

    <section id='migration-1.5-udev'>
        <title><filename>udev</filename></title>

        <para>
            Following are changes to <filename>udev</filename>:
            <itemizedlist>
                <listitem><para>
                    <filename>udev</filename> no longer brings in
                    <filename>udev-extraconf</filename> automatically
                    through
                    <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
                    since this was originally intended to be optional.
                    If you need the extra rules, then add
                    <filename>udev-extraconf</filename> to your image.
                    </para></listitem>
                <listitem><para>
                    <filename>udev</filename> no longer brings in
                    <filename>pciutils-ids</filename> or
                    <filename>usbutils-ids</filename> through
                    <filename>RRECOMMENDS</filename>.
                    These are not needed by <filename>udev</filename> itself
                    and removing them saves around 350KB.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.5-removed-renamed-recipes'>
        <title>Removed and Renamed Recipes</title>

        <itemizedlist>
            <listitem><para>
                The <filename>linux-yocto</filename> 3.2 kernel has been
                removed.</para></listitem>
            <listitem><para>
                <filename>libtool-nativesdk</filename> has been renamed to
                <filename>nativesdk-libtool</filename>.</para></listitem>
            <listitem><para>
                <filename>tinylogin</filename> has been removed.
                It has been replaced by a suid portion of Busybox.
                See the
                "<link linkend='migration-1.5-busybox'>BusyBox</link>" section
                for more information.</para></listitem>
            <listitem><para>
                <filename>external-python-tarball</filename> has been renamed
                to <filename>buildtools-tarball</filename>.
                </para></listitem>
            <listitem><para>
                <filename>web-webkit</filename> has been removed.
                It has been functionally replaced by
                <filename>midori</filename>.</para></listitem>
            <listitem><para>
                <filename>imake</filename> has been removed.
                It is no longer needed by any other recipe.
                </para></listitem>
            <listitem><para>
                <filename>transfig-native</filename> has been removed.
                It is no longer needed by any other recipe.
                </para></listitem>
            <listitem><para>
                <filename>anjuta-remote-run</filename> has been removed.
                Anjuta IDE integration has not been officially supported for
                several releases.</para></listitem>
        </itemizedlist>
    </section>

    <section id='migration-1.5-other-changes'>
        <title>Other Changes</title>

        <para>
            Following is a list of short entries describing other changes:
            <itemizedlist>
                <listitem><para>
                    <filename>run-postinsts</filename>: Make this generic.
                    </para></listitem>
                <listitem><para>
                    <filename>base-files</filename>: Remove the unnecessary
                    <filename>media/</filename><replaceable>xxx</replaceable> directories.
                    </para></listitem>
                <listitem><para>
                    <filename>alsa-state</filename>: Provide an empty
                    <filename>asound.conf</filename> by default.
                    </para></listitem>
                <listitem><para>
                    <filename>classes/image</filename>: Ensure
                    <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
                    supports pre-renamed package names.</para></listitem>
                <listitem><para>
                    <filename>classes/rootfs_rpm</filename>: Implement
                    <filename>BAD_RECOMMENDATIONS</filename> for RPM.
                    </para></listitem>
                <listitem><para>
                    <filename>systemd</filename>: Remove
                    <filename>systemd_unitdir</filename> if
                    <filename>systemd</filename> is not in
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
                    </para></listitem>
                <listitem><para>
                    <filename>systemd</filename>: Remove
                    <filename>init.d</filename> dir if
                    <filename>systemd</filename> unit file is present and
                    <filename>sysvinit</filename> is not a distro feature.
                    </para></listitem>
                <listitem><para>
                    <filename>libpam</filename>: Deny all services for the
                    <filename>OTHER</filename> entries.
                    </para></listitem>
                <listitem><para>
                    <filename>image.bbclass</filename>: Move
                    <filename>runtime_mapping_rename</filename> to avoid
                    conflict with <filename>multilib</filename>.
                    See
                    <ulink url='https://bugzilla.yoctoproject.org/show_bug.cgi?id=4993'><filename>YOCTO #4993</filename></ulink>
                    in Bugzilla for more information.
                    </para></listitem>
                <listitem><para>
                    <filename>linux-dtb</filename>: Use kernel build system
                    to generate the <filename>dtb</filename> files.
                    </para></listitem>
                <listitem><para>
                    <filename>kern-tools</filename>: Switch from guilt to
                    new <filename>kgit-s2q</filename> tool.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-1.6-release'>
    <title>Moving to the Yocto Project 1.6 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 1.6 Release from the prior release.
    </para>


    <section id='migration-1.6-archiver-class'>
        <title><filename>archiver</filename> Class</title>

        <para>
            The
            <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
            class has been rewritten and its configuration has been simplified.
            For more details on the source archiver, see the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-open-source-license-compliance-during-your-products-lifecycle'>Maintaining Open Source License Compliance During Your Product's Lifecycle</ulink>"
            section in the Yocto Project Development Tasks Manual.
        </para>
    </section>

    <section id='migration-1.6-packaging-changes'>
        <title>Packaging Changes</title>

        <para>
            The following packaging changes have been made:
            <itemizedlist>
                <listitem><para>
                    The <filename>binutils</filename> recipe no longer produces
                    a <filename>binutils-symlinks</filename> package.
                    <filename>update-alternatives</filename> is now used to
                    handle the preferred <filename>binutils</filename>
                    variant on the target instead.
                    </para></listitem>
                <listitem><para>
                    The tc (traffic control) utilities have been split out of
                    the main <filename>iproute2</filename> package and put
                    into the <filename>iproute2-tc</filename> package.
                    </para></listitem>
                <listitem><para>
                    The <filename>gtk-engines</filename> schemas have been
                    moved to a dedicated
                    <filename>gtk-engines-schemas</filename> package.
                    </para></listitem>
                <listitem><para>
                    The <filename>armv7a</filename> with thumb package
                    architecture suffix has changed.
                    The suffix for these packages with the thumb
                    optimization enabled is "t2" as it should be.
                    Use of this suffix was not the case in the 1.5 release.
                    Architecture names will change within package feeds as a
                    result.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.6-bitbake'>
        <title>BitBake</title>

        <para>
            The following changes have been made to
            <link linkend='bitbake-term'>BitBake</link>.
        </para>

        <section id='migration-1.6-matching-branch-requirement-for-git-fetching'>
            <title>Matching Branch Requirement for Git Fetching</title>

            <para>
                When fetching source from a Git repository using
                <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>,
                BitBake will now validate the
                <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
                value against the branch.
                You can specify the branch using the following form:
                <literallayout class='monospaced'>
     SRC_URI = "git://server.name/repository;branch=<replaceable>branchname</replaceable>"
                </literallayout>
                If you do not specify a branch, BitBake looks
                in the default "master" branch.
            </para>

            <para>
                Alternatively, if you need to bypass this check (e.g.
                if you are fetching a revision corresponding to a tag that
                is not on any branch), you can add ";nobranch=1" to
                the end of the URL within <filename>SRC_URI</filename>.
            </para>
        </section>

        <section id='migration-1.6-bitbake-deps'>
            <title>Python Definition substitutions</title>

            <para>
                BitBake had some previously deprecated Python definitions
                within its <filename>bb</filename> module removed.
                You should use their sub-module counterparts instead:
                <itemizedlist>
                    <listitem><para><filename>bb.MalformedUrl</filename>:
                        Use <filename>bb.fetch.MalformedUrl</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.encodeurl</filename>:
                        Use <filename>bb.fetch.encodeurl</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.decodeurl</filename>:
                        Use <filename>bb.fetch.decodeurl</filename>
                        </para></listitem>
                    <listitem><para><filename>bb.mkdirhier</filename>:
                        Use <filename>bb.utils.mkdirhier</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.movefile</filename>:
                        Use <filename>bb.utils.movefile</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.copyfile</filename>:
                        Use <filename>bb.utils.copyfile</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.which</filename>:
                        Use <filename>bb.utils.which</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.vercmp_string</filename>:
                        Use <filename>bb.utils.vercmp_string</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.vercmp</filename>:
                        Use <filename>bb.utils.vercmp</filename>.
                        </para></listitem>
                </itemizedlist>
            </para>
        </section>

        <section id='migration-1.6-bitbake-fetcher'>
            <title>SVK Fetcher</title>

            <para>
                The SVK fetcher has been removed from BitBake.
            </para>
        </section>

        <section id='migration-1.6-bitbake-console-output'>
            <title>Console Output Error Redirection</title>

            <para>
                The BitBake console UI will now output errors to
                <filename>stderr</filename> instead of
                <filename>stdout</filename>.
                Consequently, if you are piping or redirecting the output of
                <filename>bitbake</filename> to somewhere else, and you wish
                to retain the errors, you will need to add
                <filename>2>&amp;1</filename> (or something similar) to the
                end of your <filename>bitbake</filename> command line.
            </para>
        </section>

        <section id='migration-1.6-task-taskname-overrides'>
            <title><filename>task-</filename><replaceable>taskname</replaceable> Overrides</title>

            <para>
                <filename>task-</filename><replaceable>taskname</replaceable> overrides have been
                adjusted so that tasks whose names contain underscores have the
                underscores replaced by hyphens for the override so that they
                now function properly.
                For example, the task override for
                <link linkend='ref-tasks-populate_sdk'><filename>do_populate_sdk</filename></link>
                is <filename>task-populate-sdk</filename>.
            </para>
        </section>
    </section>

    <section id='migration-1.6-variable-changes'>
        <title>Changes to Variables</title>

        <para>
            The following variables have changed.
            For information on the OpenEmbedded build system variables, see the
            "<link linkend='ref-variables-glos'>Variables Glossary</link>" Chapter.
        </para>

        <section id='migration-1.6-variable-changes-TMPDIR'>
            <title><filename>TMPDIR</filename></title>

            <para>
                <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
                can no longer be on an NFS mount.
                NFS does not offer full POSIX locking and inode consistency
                and can cause unexpected issues if used to store
                <filename>TMPDIR</filename>.
            </para>

            <para>
                The check for this occurs on startup.
                If <filename>TMPDIR</filename> is detected on an NFS mount,
                an error occurs.
            </para>
        </section>

        <section id='migration-1.6-variable-changes-PRINC'>
            <title><filename>PRINC</filename></title>

            <para>
                The <filename>PRINC</filename>
                variable has been deprecated and triggers a warning if
                detected during a build.
                For
                <link linkend='var-PR'><filename>PR</filename></link>
                increments on changes, use the PR service instead.
                You can find out more about this service in the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#working-with-a-pr-service'>Working With a PR Service</ulink>"
                section in the Yocto Project Development Tasks Manual.
            </para>
        </section>

        <section id='migration-1.6-variable-changes-IMAGE_TYPES'>
            <title><filename>IMAGE_TYPES</filename></title>

            <para>
                The "sum.jffs2" option for
                <link linkend='var-IMAGE_TYPES'><filename>IMAGE_TYPES</filename></link>
                has been replaced by the "jffs2.sum" option, which fits the
                processing order.
            </para>
        </section>

        <section id='migration-1.6-variable-changes-COPY_LIC_MANIFEST'>
            <title><filename>COPY_LIC_MANIFEST</filename></title>

            <para>
                The
                <link linkend='var-COPY_LIC_MANIFEST'><filename>COPY_LIC_MANIFEST</filename></link>
                variable must
                now be set to "1" rather than any value in order to enable
                it.
            </para>
        </section>

        <section id='migration-1.6-variable-changes-COPY_LIC_DIRS'>
            <title><filename>COPY_LIC_DIRS</filename></title>

            <para>
                The
                <link linkend='var-COPY_LIC_DIRS'><filename>COPY_LIC_DIRS</filename></link>
                variable must
                now be set to "1" rather than any value in order to enable
                it.
            </para>
        </section>

        <section id='migration-1.6-variable-changes-PACKAGE_GROUP'>
            <title><filename>PACKAGE_GROUP</filename></title>

            <para>
                The
                <link linkend='var-PACKAGE_GROUP'><filename>PACKAGE_GROUP</filename></link>
                variable has been renamed to
                <link linkend='var-FEATURE_PACKAGES'><filename>FEATURE_PACKAGES</filename></link>
                to more accurately reflect its purpose.
                You can still use <filename>PACKAGE_GROUP</filename> but
                the OpenEmbedded build system produces a warning message when
                it encounters the variable.
            </para>
        </section>

        <section id='migration-1.6-variable-changes-variable-entry-behavior'>
            <title>Preprocess and Post Process Command Variable Behavior</title>

            <para>
                The following variables now expect a semicolon separated
                list of functions to call and not arbitrary shell commands:
                <literallayout class='monospaced'>
     <link linkend='var-ROOTFS_PREPROCESS_COMMAND'>ROOTFS_PREPROCESS_COMMAND</link>
     <link linkend='var-ROOTFS_POSTPROCESS_COMMAND'>ROOTFS_POSTPROCESS_COMMAND</link>
     <link linkend='var-SDK_POSTPROCESS_COMMAND'>SDK_POSTPROCESS_COMMAND</link>
     <link linkend='var-POPULATE_SDK_POST_TARGET_COMMAND'>POPULATE_SDK_POST_TARGET_COMMAND</link>
     <link linkend='var-POPULATE_SDK_POST_HOST_COMMAND'>POPULATE_SDK_POST_HOST_COMMAND</link>
     <link linkend='var-IMAGE_POSTPROCESS_COMMAND'>IMAGE_POSTPROCESS_COMMAND</link>
     <link linkend='var-IMAGE_PREPROCESS_COMMAND'>IMAGE_PREPROCESS_COMMAND</link>
     <link linkend='var-ROOTFS_POSTUNINSTALL_COMMAND'>ROOTFS_POSTUNINSTALL_COMMAND</link>
     <link linkend='var-ROOTFS_POSTINSTALL_COMMAND'>ROOTFS_POSTINSTALL_COMMAND</link>
                </literallayout>
                For migration purposes, you can simply wrap shell commands in
                a shell function and then call the function.
                Here is an example:
                <literallayout class='monospaced'>
     my_postprocess_function() {
        echo "hello" > ${IMAGE_ROOTFS}/hello.txt
     }
     ROOTFS_POSTPROCESS_COMMAND += "my_postprocess_function; "
                </literallayout>
            </para>
        </section>
    </section>

    <section id='migration-1.6-package-test-ptest'>
        <title>Package Test (ptest)</title>

        <para>
            Package Tests (ptest) are built but not installed by default.
            For information on using Package Tests, see the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Testing Packages with ptest</ulink>"
            section in the Yocto Project Development Tasks Manual.
            For information on the <filename>ptest</filename> class, see the
            "<link linkend='ref-classes-ptest'><filename>ptest.bbclass</filename></link>"
            section.
        </para>
    </section>

    <section id='migration-1.6-build-changes'>
        <title>Build Changes</title>

        <para>
            Separate build and source directories have been enabled
            by default for selected recipes where it is known to work
            (a whitelist) and for all recipes that inherit the
            <link linkend='ref-classes-cmake'><filename>cmake</filename></link>
            class.
            In future releases the
            <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
            class will enable a separate build directory by default as
            well.
            Recipes building Autotools-based
            software that fails to build with a separate build directory
            should be changed to inherit from the
            <link linkend='ref-classes-autotools'><filename>autotools-brokensep</filename></link>
            class instead of the <filename>autotools</filename> or
            <filename>autotools_stage</filename>classes.
        </para>
    </section>

    <section id='migration-1.6-building-qemu-native'>
        <title><filename>qemu-native</filename></title>

        <para>
            <filename>qemu-native</filename> now builds without
            SDL-based graphical output support by default.
            The following additional lines are needed in your
            <filename>local.conf</filename> to enable it:
            <literallayout class='monospaced'>
     PACKAGECONFIG_pn-qemu-native = "sdl"
     ASSUME_PROVIDED += "libsdl-native"
            </literallayout>
            <note>
                The default <filename>local.conf</filename>
                contains these statements.
                Consequently, if you are building a headless system and using
                a default <filename>local.conf</filename> file, you will need
                comment these two lines out.
            </note>
        </para>
    </section>

    <section id='migration-1.6-core-image-basic'>
        <title><filename>core-image-basic</filename></title>

        <para>
            <filename>core-image-basic</filename> has been renamed to
            <filename>core-image-full-cmdline</filename>.
        </para>

        <para>
            In addition to <filename>core-image-basic</filename> being renamed,
            <filename>packagegroup-core-basic</filename> has been renamed to
            <filename>packagegroup-core-full-cmdline</filename> to match.
        </para>
    </section>

    <section id='migration-1.6-licensing'>
        <title>Licensing</title>

        <para>
            The top-level <filename>LICENSE</filename> file has been changed
            to better describe the license of the various components of
            <link linkend='oe-core'>OE-Core</link>.
            However, the licensing itself remains unchanged.
        </para>

        <para>
            Normally, this change would not cause any side-effects.
            However, some recipes point to this file within
            <link linkend='var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></link>
            (as <filename>${COREBASE}/LICENSE</filename>) and thus the
            accompanying checksum must be changed from
            3f40d7994397109285ec7b81fdeb3b58 to
            4d92cd373abda3937c2bc47fbc49d690.
            A better alternative is to have
            <filename>LIC_FILES_CHKSUM</filename> point to a file
            describing the license that is distributed with the source
            that the recipe is building, if possible, rather than pointing
            to <filename>${COREBASE}/LICENSE</filename>.
        </para>
    </section>

    <section id='migration-1.6-cflags-options'>
        <title><filename>CFLAGS</filename> Options</title>

        <para>
            The "-fpermissive" option has been removed from the default
            <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
            value.
            You need to take action on individual recipes that fail when
            building with this option.
            You need to either patch the recipes to fix the issues reported by
            the compiler, or you need to add "-fpermissive" to
            <filename>CFLAGS</filename> in the recipes.
        </para>
    </section>

    <section id='migration-1.6-custom-images'>
        <title>Custom Image Output Types</title>

        <para>
            Custom image output types, as selected using
            <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>,
            must declare their dependencies on other image types (if any) using
            a new
            <link linkend='var-IMAGE_TYPEDEP'><filename>IMAGE_TYPEDEP</filename></link>
            variable.
        </para>
    </section>

    <section id='migration-1.6-do-package-write-task'>
        <title>Tasks</title>

        <para>
            The <filename>do_package_write</filename> task has been removed.
            The task is no longer needed.
        </para>
    </section>

    <section id='migration-1.6-update-alternatives-provider'>
        <title><filename>update-alternative</filename> Provider</title>

        <para>
            The default <filename>update-alternatives</filename> provider has
            been changed from <filename>opkg</filename> to
            <filename>opkg-utils</filename>.
            This change resolves some troublesome circular dependencies.
            The runtime package has also been renamed from
            <filename>update-alternatives-cworth</filename>
            to <filename>update-alternatives-opkg</filename>.
        </para>
    </section>

    <section id='migration-1.6-virtclass-overrides'>
        <title><filename>virtclass</filename> Overrides</title>

        <para>
            The <filename>virtclass</filename> overrides are now deprecated.
            Use the equivalent class overrides instead (e.g.
            <filename>virtclass-native</filename> becomes
            <filename>class-native</filename>.)
        </para>
    </section>

    <section id='migration-1.6-removed-renamed-recipes'>
        <title>Removed and Renamed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para><filename>packagegroup-toolset-native</filename> -
                    This recipe is largely unused.
                    </para></listitem>
                <listitem><para><filename>linux-yocto-3.8</filename> -
                    Support for the Linux yocto 3.8 kernel has been dropped.
                    Support for the 3.10 and 3.14 kernels have been added
                    with the <filename>linux-yocto-3.10</filename> and
                    <filename>linux-yocto-3.14</filename> recipes.
                    </para></listitem>
                <listitem><para><filename>ocf-linux</filename> -
                    This recipe has been functionally replaced using
                    <filename>cryptodev-linux</filename>.
                    </para></listitem>
                <listitem><para><filename>genext2fs</filename> -
                    <filename>genext2fs</filename> is no longer used by the
                    build system and is unmaintained upstream.
                    </para></listitem>
                <listitem><para><filename>js</filename> -
                    This provided an ancient version of Mozilla's javascript
                    engine that is no longer needed.
                    </para></listitem>
                <listitem><para><filename>zaurusd</filename> -
                    The recipe has been moved to the
                    <filename>meta-handheld</filename> layer.
                    </para></listitem>
                <listitem><para><filename>eglibc 2.17</filename> -
                    Replaced by the <filename>eglibc 2.19</filename>
                    recipe.
                    </para></listitem>
                <listitem><para><filename>gcc 4.7.2</filename> -
                    Replaced by the now stable
                    <filename>gcc 4.8.2</filename>.
                    </para></listitem>
                <listitem><para><filename>external-sourcery-toolchain</filename> -
                    this recipe is now maintained in the
                    <filename>meta-sourcery</filename> layer.
                    </para></listitem>
                <listitem><para><filename>linux-libc-headers-yocto 3.4+git</filename> -
                    Now using version 3.10 of the
                    <filename>linux-libc-headers</filename> by default.
                    </para></listitem>
                <listitem><para><filename>meta-toolchain-gmae</filename> -
                    This recipe is obsolete.
                    </para></listitem>
                <listitem><para><filename>packagegroup-core-sdk-gmae</filename> -
                    This recipe is obsolete.
                    </para></listitem>
                <listitem><para><filename>packagegroup-core-standalone-gmae-sdk-target</filename> -
                    This recipe is obsolete.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.6-removed-classes'>
        <title>Removed Classes</title>

        <para>
            The following classes have become obsolete and have been removed:
            <itemizedlist>
                <listitem><para><filename>module_strip</filename>
                    </para></listitem>
                <listitem><para><filename>pkg_metainfo</filename>
                    </para></listitem>
                <listitem><para><filename>pkg_distribute</filename>
                    </para></listitem>
                <listitem><para><filename>image-empty</filename>
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.6-reference-bsps'>
        <title>Reference Board Support Packages (BSPs)</title>

        <para>
            The following reference BSPs changes occurred:
            <itemizedlist>
                <listitem><para>The BeagleBoard
                    (<filename>beagleboard</filename>) ARM reference hardware
                    has been replaced by the BeagleBone
                    (<filename>beaglebone</filename>) hardware.
                    </para></listitem>
                <listitem><para>The RouterStation Pro
                    (<filename>routerstationpro</filename>) MIPS reference
                    hardware has been replaced by the EdgeRouter Lite
                    (<filename>edgerouter</filename>) hardware.
                    </para></listitem>
            </itemizedlist>
            The previous reference BSPs for the
            <filename>beagleboard</filename> and
            <filename>routerstationpro</filename> machines are still available
            in a new <filename>meta-yocto-bsp-old</filename> layer in the
            <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink>
            at
            <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/meta-yocto-bsp-old/'>http://git.yoctoproject.org/cgit/cgit.cgi/meta-yocto-bsp-old/</ulink>.
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-1.7-release'>
    <title>Moving to the Yocto Project 1.7 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 1.7 Release from the prior release.
    </para>

    <section id='migration-1.7-changes-to-setting-qemu-packageconfig-options'>
        <title>Changes to Setting QEMU <filename>PACKAGECONFIG</filename> Options in <filename>local.conf</filename></title>

        <para>
            The QEMU recipe now uses a number of
            <link linkend='var-PACKAGECONFIG'><filename>PACKAGECONFIG</filename></link>
            options to enable various optional features.
            The method used to set defaults for these options means that
            existing
            <filename>local.conf</filename> files will need to be be
            modified to append to <filename>PACKAGECONFIG</filename> for
            <filename>qemu-native</filename> and
            <filename>nativesdk-qemu</filename> instead of setting it.
            In other words, to enable graphical output for QEMU, you should
            now have these lines in <filename>local.conf</filename>:
            <literallayout class='monospaced'>
     PACKAGECONFIG_append_pn-qemu-native = " sdl"
     PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
            </literallayout>
        </para>
    </section>

    <section id='migration-1.7-minimum-git-version'>
        <title>Minimum Git version</title>

        <para>
            The minimum
            <ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink> version
            required on the build host is now 1.7.8 because the
            <filename>--list</filename> option is now required by
            BitBake's Git fetcher.
            As always, if your host distribution does not provide a version of
            Git that meets this requirement, you can use the
            <filename>buildtools-tarball</filename> that does.
            See the
            "<link linkend='required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</link>"
            section for more information.
        </para>
    </section>

    <section id='migration-1.7-autotools-class-changes'>
        <title>Autotools Class Changes</title>

        <para>
            The following
            <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
            class changes occurred:
            <itemizedlist>
                <listitem><para><emphasis>
                    A separate build directory is now used by default:</emphasis>
                    The <filename>autotools</filename> class has been changed
                    to use a directory for building
                    (<link linkend='var-B'><filename>B</filename></link>),
                    which is separate from the source directory
                    (<link linkend='var-S'><filename>S</filename></link>).
                    This is commonly referred to as
                    <filename>B != S</filename>, or an out-of-tree build.</para>
                    <para>If the software being built is already capable of
                    building in a directory separate from the source, you
                    do not need to do anything.
                    However, if the software is not capable of being built
                    in this manner, you will
                    need to either patch the software so that it can build
                    separately, or you will need to change the recipe to
                    inherit the
                    <link linkend='ref-classes-autotools'><filename>autotools-brokensep</filename></link>
                    class instead of the <filename>autotools</filename> or
                    <filename>autotools_stage</filename> classes.
                    </para></listitem>
                <listitem><para><emphasis>
                    The <filename>--foreign</filename> option is
                    no longer passed to <filename>automake</filename> when
                    running <filename>autoconf</filename>:</emphasis>
                    This option tells <filename>automake</filename> that a
                    particular software package does not follow the GNU
                    standards and therefore should not be expected
                    to distribute certain files such as
                    <filename>ChangeLog</filename>,
                    <filename>AUTHORS</filename>, and so forth.
                    Because the majority of upstream software packages already
                    tell <filename>automake</filename> to enable foreign mode
                    themselves, the option is mostly superfluous.
                    However, some recipes will need patches for this change.
                    You can easily make the change by patching
                    <filename>configure.ac</filename> so that it passes
                    "foreign" to <filename>AM_INIT_AUTOMAKE()</filename>.
                    See
                    <ulink url='http://cgit.openembedded.org/openembedded-core/commit/?id=01943188f85ce6411717fb5bf702d609f55813f2'>this commit</ulink>
                    for an example showing how to make the patch.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.7-binary-configuration-scripts-disabled'>
        <title>Binary Configuration Scripts Disabled</title>

        <para>
            Some of the core recipes that package binary configuration scripts
            now disable the scripts due to the
            scripts previously requiring error-prone path substitution.
            Software that links against these libraries using these scripts
            should use the much more robust <filename>pkg-config</filename>
            instead.
            The list of recipes changed in this version (and their
            configuration scripts) is as follows:
            <literallayout class='monospaced'>
     directfb (directfb-config)
     freetype (freetype-config)
     gpgme (gpgme-config)
     libassuan (libassuan-config)
     libcroco (croco-6.0-config)
     libgcrypt (libgcrypt-config)
     libgpg-error (gpg-error-config)
     libksba (ksba-config)
     libpcap (pcap-config)
     libpcre (pcre-config)
     libpng (libpng-config, libpng16-config)
     libsdl (sdl-config)
     libusb-compat (libusb-config)
     libxml2 (xml2-config)
     libxslt (xslt-config)
     ncurses (ncurses-config)
     neon (neon-config)
     npth (npth-config)
     pth (pth-config)
     taglib (taglib-config)
            </literallayout>
            Additionally, support for <filename>pkg-config</filename> has been
            added to some recipes in the previous list in the rare cases
            where the upstream software package does not already provide
            it.
        </para>
    </section>

    <section id='migration-1.7-glibc-replaces-eglibc'>
        <title><filename>eglibc 2.19</filename> Replaced with <filename>glibc 2.20</filename></title>

        <para>
            Because <filename>eglibc</filename> and
            <filename>glibc</filename> were already fairly close, this
            replacement should not require any significant changes to other
            software that links to <filename>eglibc</filename>.
            However, there were a number of minor changes in
            <filename>glibc 2.20</filename> upstream that could require
            patching some software (e.g. the removal of the
            <filename>_BSD_SOURCE</filename> feature test macro).
        </para>

        <para>
            <filename>glibc 2.20</filename> requires version 2.6.32 or greater
            of the Linux kernel.
            Thus, older kernels will no longer be usable in conjunction with it.
        </para>

        <para>
            For full details on the changes in <filename>glibc 2.20</filename>,
            see the upstream release notes
            <ulink url='https://sourceware.org/ml/libc-alpha/2014-09/msg00088.html'>here</ulink>.
        </para>
    </section>

    <section id='migration-1.7-kernel-module-autoloading'>
        <title>Kernel Module Autoloading</title>

        <para>
            The
            <link linkend='var-module_autoload'><filename>module_autoload_*</filename></link>
            variable is now deprecated and a new
            <link linkend='var-KERNEL_MODULE_AUTOLOAD'><filename>KERNEL_MODULE_AUTOLOAD</filename></link>
            variable should be used instead.
            Also,
            <link linkend='var-module_conf'><filename>module_conf_*</filename></link>
            must now be used in conjunction with a new
            <link linkend='var-KERNEL_MODULE_PROBECONF'><filename>KERNEL_MODULE_PROBECONF</filename></link>
            variable.
            The new variables no longer require you to specify the module name
            as part of the variable name.
            This change not only simplifies usage but also allows the values
            of these variables to be appropriately incorporated into task
            signatures and thus trigger the appropriate tasks to re-execute
            when changed.
            You should replace any references to
            <filename>module_autoload_*</filename> with
            <filename>KERNEL_MODULE_AUTOLOAD</filename>, and add any modules
            for which <filename>module_conf_*</filename> is specified to
            <filename>KERNEL_MODULE_PROBECONF</filename>.
        </para>
    </section>

    <section id='migration-1.7-qa-check-changes'>
        <title>QA Check Changes</title>

        <para>
            The following changes have occurred to the QA check process:
            <itemizedlist>
                <listitem><para>
                    Additional QA checks <filename>file-rdeps</filename>
                    and <filename>build-deps</filename> have been added in
                    order to verify that file dependencies are satisfied
                    (e.g. package contains a script requiring
                    <filename>/bin/bash</filename>) and build-time dependencies
                    are declared, respectively.
                    For more information, please see the
                    "<link linkend='ref-qa-checks'>QA Error and Warning Messages</link>"
                    chapter.
                    </para></listitem>
                <listitem><para>
                    Package QA checks are now performed during a new
                    <link linkend='ref-tasks-package_qa'><filename>do_package_qa</filename></link>
                    task rather than being part of the
                    <link linkend='ref-tasks-package'><filename>do_package</filename></link>
                    task.
                    This allows more parallel execution.
                    This change is unlikely to be an issue except for highly
                    customized recipes that disable packaging tasks themselves
                    by marking them as <filename>noexec</filename>.
                    For those packages, you will need to disable the
                    <filename>do_package_qa</filename> task as well.
                    </para></listitem>
                <listitem><para>
                    Files being overwritten during the
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task now trigger an error instead of a warning.
                    Recipes should not be overwriting files written to the
                    sysroot by other recipes.
                    If you have these types of recipes, you need to alter them
                    so that they do not overwrite these files.</para>
                    <para>You might now receive this error after changes in
                    configuration or metadata resulting in orphaned files
                    being left in the sysroot.
                    If you do receive this error, the way to resolve the issue
                    is to delete your
                    <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
                    or to move it out of the way and then re-start the build.
                    Anything that has been fully built up to that point and
                    does not need rebuilding will be restored from the shared
                    state cache and the rest of the build will be able to
                    proceed as normal.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.7-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para>
                    <filename>x-load</filename>:
                    This recipe has been superseded by
                    U-boot SPL for all Cortex-based TI SoCs.
                    For legacy boards, the <filename>meta-ti</filename>
                    layer, which contains a maintained recipe, should be used
                    instead.
                    </para></listitem>
                <listitem><para>
                    <filename>ubootchart</filename>:
                    This recipe is obsolete.
                    A <filename>bootchart2</filename> recipe has been added
                    to functionally replace it.
                    </para></listitem>
                <listitem><para>
                    <filename>linux-yocto 3.4</filename>:
                    Support for the linux-yocto 3.4 kernel has been dropped.
                    Support for the 3.10 and 3.14 kernels remains, while
                    support for version 3.17 has been added.
                    </para></listitem>
                <listitem><para>
                    <filename>eglibc</filename> has been removed in favor of
                    <filename>glibc</filename>.
                    See the
                    "<link linkend='migration-1.7-glibc-replaces-eglibc'><filename>eglibc 2.19</filename> Replaced with <filename>glibc 2.20</filename></link>"
                    section for more information.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.7-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following miscellaneous change occurred:
            <itemizedlist>
                <listitem><para>
                    The build history feature now writes
                    <filename>build-id.txt</filename> instead of
                    <filename>build-id</filename>.
                    Additionally, <filename>build-id.txt</filename>
                    now contains the full build header as printed by
                    BitBake upon starting the build.
                    You should manually remove old "build-id" files from your
                    existing build history repositories to avoid confusion.
                    For information on the build history feature, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-build-output-quality'>Maintaining Build Output Quality</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-1.8-release'>
    <title>Moving to the Yocto Project 1.8 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 1.8 Release from the prior release.
    </para>

    <section id='migration-1.8-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para><filename>owl-video</filename>:
                    Functionality replaced by <filename>gst-player</filename>.
                    </para></listitem>
                <listitem><para><filename>gaku</filename>:
                    Functionality replaced by <filename>gst-player</filename>.
                    </para></listitem>
                <listitem><para><filename>gnome-desktop</filename>:
                    This recipe is now available in
                    <filename>meta-gnome</filename> and is no longer needed.
                    </para></listitem>
                <listitem><para><filename>gsettings-desktop-schemas</filename>:
                    This recipe is now available in
                    <filename>meta-gnome</filename> and is no longer needed.
                    </para></listitem>
                <listitem><para><filename>python-argparse</filename>:
                    The <filename>argparse</filename> module is already
                    provided in the default Python distribution in a
                    package named <filename>python-argparse</filename>.
                    Consequently, the separate
                    <filename>python-argparse</filename> recipe is no
                    longer needed.
                    </para></listitem>
                <listitem><para><filename>telepathy-python, libtelepathy, telepathy-glib, telepathy-idle, telepathy-mission-control</filename>:
                    All these recipes have moved to
                    <filename>meta-oe</filename> and are consequently no
                    longer needed by any recipes in OpenEmbedded-Core.
                    </para></listitem>
                <listitem><para><filename>linux-yocto_3.10</filename> and <filename>linux-yocto_3.17</filename>:
                    Support for the linux-yocto 3.10 and 3.17 kernels has been
                    dropped.
                    Support for the 3.14 kernel remains, while support for
                    3.19 kernel has been added.
                    </para></listitem>
                <listitem><para><filename>poky-feed-config-opkg</filename>:
                    This recipe has become obsolete and is no longer needed.
                    Use <filename>distro-feed-config</filename> from
                    <filename>meta-oe</filename> instead.
                    </para></listitem>
                <listitem><para><filename>libav 0.8.x</filename>:
                    <filename>libav 9.x</filename> is now used.
                    </para></listitem>
                <listitem><para><filename>sed-native</filename>:
                    No longer needed.
                    A working version of <filename>sed</filename> is expected
                    to be provided by the host distribution.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.8-bluez'>
        <title>BlueZ 4.x / 5.x Selection</title>

        <para>
            Proper built-in support for selecting BlueZ 5.x in preference
            to the default of 4.x now exists.
            To use BlueZ 5.x, simply add "bluez5" to your
            <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
            value.
            If you had previously added append files
            (<filename>*.bbappend</filename>) to make this selection, you can
            now remove them.
        </para>

        <para>
            Additionally, a <filename>bluetooth</filename> class has been added
            to make selection of the appropriate bluetooth support within a
            recipe a little easier.
            If you wish to make use of this class in a recipe, add something
            such as the following:
            <literallayout class='monospaced'>
     inherit bluetooth
     PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', '${BLUEZ}', '', d)}
     PACKAGECONFIG[bluez4] = "--enable-bluetooth,--disable-bluetooth,bluez4"
     PACKAGECONFIG[bluez5] = "--enable-bluez5,--disable-bluez5,bluez5"
            </literallayout>
        </para>
    </section>

    <section id='migration-1.8-kernel-build-changes'>
        <title>Kernel Build Changes</title>

        <para>
            The kernel build process was changed to place the source
            in a common shared work area and to place build artifacts
            separately in the source code tree.
            In theory, migration paths have been provided for most common
            usages in kernel recipes but this might not work in all cases.
            In particular, users need to ensure that
            <filename>${S}</filename> (source files) and
            <filename>${B}</filename> (build artifacts) are used
            correctly in functions such as
            <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
            and
            <link linkend='ref-tasks-install'><filename>do_install</filename></link>.
            For kernel recipes that do not inherit from
            <filename>kernel-yocto</filename> or include
            <filename>linux-yocto.inc</filename>, you might wish to
            refer to the <filename>linux.inc</filename> file in the
            <filename>meta-oe</filename> layer for the kinds of changes you
            need to make.
            For reference, here is the
            <ulink url='http://cgit.openembedded.org/meta-openembedded/commit/meta-oe/recipes-kernel/linux/linux.inc?id=fc7132ede27ac67669448d3d2845ce7d46c6a1ee'>commit</ulink>
            where the <filename>linux.inc</filename> file in
            <filename>meta-oe</filename> was updated.
        </para>

        <para>
            Recipes that rely on the kernel source code and do not inherit
            the module classes might need to add explicit dependencies on
            the <filename>do_shared_workdir</filename> kernel task, for example:
            <literallayout class='monospaced'>
     do_configure[depends] += "virtual/kernel:do_shared_workdir"
            </literallayout>
        </para>
    </section>

    <section id='migration-1.8-ssl'>
        <title>SSL 3.0 is Now Disabled in OpenSSL</title>

        <para>
            SSL 3.0 is now disabled when building OpenSSL.
            Disabling SSL 3.0 avoids any lingering instances of the POODLE
            vulnerability.
            If you feel you must re-enable SSL 3.0, then you can add an
            append file (<filename>*.bbappend</filename>) for the
            <filename>openssl</filename> recipe to remove "-no-ssl3"
            from
            <link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>.
        </para>
    </section>

    <section id='migration-1.8-default-sysroot-poisoning'>
        <title>Default Sysroot Poisoning</title>

        <para>
            <filename>gcc's</filename> default sysroot and include directories
            are now "poisoned".
            In other words, the sysroot and include directories are being
            redirected to a non-existent location in order to catch when
            host directories are being used due to the correct options not
            being passed.
            This poisoning applies both to the cross-compiler used within the
            build and to the cross-compiler produced in the SDK.
        </para>

        <para>
            If this change causes something in the build to fail, it almost
            certainly means the various compiler flags and commands are not
            being passed correctly to the underlying piece of software.
            In such cases, you need to take corrective steps.
        </para>
    </section>

    <section id='migration-1.8-rebuild-improvements'>
        <title>Rebuild Improvements</title>

        <para>
            Changes have been made to the
            <link linkend='ref-classes-base'><filename>base</filename></link>,
            <link linkend='ref-classes-autotools'><filename>autotools</filename></link>,
            and
            <link linkend='ref-classes-cmake'><filename>cmake</filename></link>
            classes to clean out generated files when the
            <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
            task needs to be re-executed.
        </para>

        <para>
            One of the improvements is to attempt to run "make clean" during
            the <filename>do_configure</filename> task if a
            <filename>Makefile</filename> exists.
            Some software packages do not provide a working clean target
            within their make files.
            If you have such recipes, you need to set
            <link linkend='var-CLEANBROKEN'><filename>CLEANBROKEN</filename></link>
            to "1" within the recipe, for example:
            <literallayout class='monospaced'>
     CLEANBROKEN = "1"
            </literallayout>
        </para>
    </section>

    <section id='migration-1.8-qa-check-and-validation-changes'>
        <title>QA Check and Validation Changes</title>

        <para>
            The following QA Check and Validation Changes have occurred:
            <itemizedlist>
                <listitem><para>
                    Usage of <filename>PRINC</filename>
                    previously triggered a warning.
                    It now triggers an error.
                    You should remove any remaining usage of
                    <filename>PRINC</filename> in any recipe or append file.
                    </para></listitem>
                <listitem><para>
                    An additional QA check has been added to detect usage of
                    <filename>${D}</filename> in
                    <link linkend='var-FILES'><filename>FILES</filename></link>
                    values where
                    <link linkend='var-D'><filename>D</filename></link> values
                    should not be used at all.
                    The same check ensures that <filename>$D</filename> is used
                    in
                    <filename>pkg_preinst/pkg_postinst/pkg_prerm/pkg_postrm</filename>
                    functions instead of <filename>${D}</filename>.
                    </para></listitem>
                <listitem><para>
                    <link linkend='var-S'><filename>S</filename></link> now
                    needs to be set to a valid value within a recipe.
                    If <filename>S</filename> is not set in the recipe, the
                    directory is not automatically created.
                    If <filename>S</filename> does not point to a directory
                    that exists at the time the
                    <link linkend='ref-tasks-unpack'><filename>do_unpack</filename></link>
                    task finishes, a warning will be shown.
                    </para></listitem>
                <listitem><para>
                    <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
                    is now validated for correct formatting of multiple
                    licenses.
                    If the format is invalid (e.g. multiple licenses are
                    specified with no operators to specify how the multiple
                    licenses interact), then a warning will be shown.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.8-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following miscellaneous changes have occurred:
            <itemizedlist>
                <listitem><para>
                    The <filename>send-error-report</filename> script now
                    expects a "-s" option to be specified before the server
                    address.
                    This assumes a server address is being specified.
                    </para></listitem>
                <listitem><para>
                    The <filename>oe-pkgdata-util</filename> script now
                    expects a "-p" option to be specified before the
                    <filename>pkgdata</filename> directory, which is now
                    optional.
                    If the <filename>pkgdata</filename> directory is not
                    specified, the script will run BitBake to query
                    <link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link>
                    from the build environment.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.0-release'>
    <title>Moving to the Yocto Project 2.0 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.0 Release from the prior release.
    </para>

    <section id='migration-2.0-gcc-5'>
        <title>GCC 5</title>

        <para>
            The default compiler is now GCC 5.2.
            This change has required fixes for compilation errors in a number
            of other recipes.
        </para>

        <para>
            One important example is a fix for when the Linux kernel freezes at
            boot time on ARM when built with GCC 5.
            If you are using your own kernel recipe or source tree and
            building for ARM, you will likely need to apply this
            <ulink url='https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit?id=a077224fd35b2f7fbc93f14cf67074fc792fbac2'>patch</ulink>.
            The standard <filename>linux-yocto</filename> kernel source tree
            already has a workaround for the same issue.
        </para>

        <para>
            For further details, see
            <ulink url='https://gcc.gnu.org/gcc-5/changes.html'></ulink> and
            the porting guide at
            <ulink url='https://gcc.gnu.org/gcc-5/porting_to.html'></ulink>.
        </para>

        <para>
            Alternatively, you can switch back to GCC 4.9 or 4.8 by
            setting <filename>GCCVERSION</filename> in your configuration,
            as follows:
            <literallayout class='monospaced'>
     GCCVERSION = "4.9%"
            </literallayout>
        </para>
    </section>

    <section id='migration-2.0-Gstreamer-0.10-removed'>
        <title>Gstreamer 0.10 Removed</title>

        <para>
            Gstreamer 0.10 has been removed in favor of Gstreamer 1.x.
            As part of the change, recipes for Gstreamer 0.10 and related
            software are now located
            in <filename>meta-multimedia</filename>.
            This change results in Qt4 having Phonon and Gstreamer
            support in QtWebkit disabled by default.
        </para>
    </section>

    <section id='migration-2.0-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been moved or removed:
            <itemizedlist>
                <listitem><para>
                    <filename>bluez4</filename>: The recipe is obsolete and
                    has been moved due to <filename>bluez5</filename>
                    becoming fully integrated.
                    The <filename>bluez4</filename> recipe now resides in
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>gamin</filename>: The recipe is obsolete and
                    has been removed.
                    </para></listitem>
                <listitem><para>
                    <filename>gnome-icon-theme</filename>: The recipe's
                    functionally has been replaced by
                    <filename>adwaita-icon-theme</filename>.
                    </para></listitem>
                <listitem><para>
                    Gstreamer 0.10 Recipes: Recipes for Gstreamer 0.10 have
                    been removed in favor of the recipes for Gstreamer 1.x.
                    </para></listitem>
                <listitem><para>
                    <filename>insserv</filename>: The recipe is obsolete and
                    has been removed.
                    </para></listitem>
                <listitem><para>
                    <filename>libunique</filename>: The recipe is no longer
                    used and has been moved to <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>midori</filename>: The recipe's functionally
                    has been replaced by <filename>epiphany</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>python-gst</filename>: The recipe is obsolete
                    and has been removed since it only contains bindings for
                    Gstreamer 0.10.
                    </para></listitem>
                <listitem><para>
                    <filename>qt-mobility</filename>: The recipe is obsolete and
                    has been removed since it requires
                    <filename>Gstreamer 0.10</filename>, which has been
                    replaced.
                    </para></listitem>
                <listitem><para>
                    <filename>subversion</filename>: All 1.6.x versions of this
                    recipe have been removed.
                    </para></listitem>
                <listitem><para>
                    <filename>webkit-gtk</filename>: The older 1.8.3 version
                    of this recipe has been removed in favor of
                    <filename>webkitgtk</filename>.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.0-bitbake-datastore-improvements'>
        <title>BitBake datastore improvements</title>

        <para>
            The method by which BitBake's datastore handles overrides has
            changed.
            Overrides are now applied dynamically and
            <filename>bb.data.update_data()</filename> is now a no-op.
            Thus, <filename>bb.data.update_data()</filename> is no longer
            required in order to apply the correct overrides.
            In practice, this change is unlikely to require any changes to
            Metadata.
            However, these minor changes in behavior exist:
            <itemizedlist>
                <listitem><para>
                    All potential overrides are now visible in the variable
                    history as seen when you run the following:
                    <literallayout class='monospaced'>
     $ bitbake -e
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    <filename>d.delVar('</filename><replaceable>VARNAME</replaceable><filename>')</filename> and
                    <filename>d.setVar('</filename><replaceable>VARNAME</replaceable><filename>', None)</filename>
                    result in the variable and all of its overrides being
                    cleared out.
                    Before the change, only the non-overridden values
                    were cleared.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.0-shell-message-function-changes'>
        <title>Shell Message Function Changes</title>

        <para>
            The shell versions of the BitBake message functions (i.e.
            <filename>bbdebug</filename>, <filename>bbnote</filename>,
            <filename>bbwarn</filename>, <filename>bbplain</filename>,
            <filename>bberror</filename>, and <filename>bbfatal</filename>)
            are now connected through to their BitBake equivalents
            <filename>bb.debug()</filename>, <filename>bb.note()</filename>,
            <filename>bb.warn()</filename>, <filename>bb.plain()</filename>,
            <filename>bb.error()</filename>, and
            <filename>bb.fatal()</filename>, respectively.
            Thus, those message functions that you would expect to be printed
            by the BitBake UI are now actually printed.
            In practice, this change means two things:
            <itemizedlist>
                <listitem><para>
                    If you now see messages on the console that you did not
                    previously see as a result of this change, you might
                    need to clean up the calls to
                    <filename>bbwarn</filename>, <filename>bberror</filename>,
                    and so forth.
                    Or, you might want to simply remove the calls.
                    </para></listitem>
                <listitem><para>
                    The <filename>bbfatal</filename> message function now
                    suppresses the full error log in the UI, which means any
                    calls to <filename>bbfatal</filename> where you still
                    wish to see the full error log should be replaced by
                    <filename>die</filename> or
                    <filename>bbfatal_log</filename>.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.0-extra-development-debug-package-cleanup'>
        <title>Extra Development/Debug Package Cleanup</title>

        <para>
            The following recipes have had extra
            <filename>dev/dbg</filename> packages removed:
            <itemizedlist>
                <listitem><para>
                    <filename>acl</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>apmd</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>aspell</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>attr</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>augeas</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>bzip2</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>cogl</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>curl</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>elfutils</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>gcc-target</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>libgcc</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>libtool</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>libxmu</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>opkg</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>pciutils</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>rpm</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>sysfsutils</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>tiff</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>xz</filename>
                    </para></listitem>
            </itemizedlist>
            All of the above recipes now conform to the standard packaging
            scheme where a single <filename>-dev</filename>,
            <filename>-dbg</filename>, and <filename>-staticdev</filename>
            package exists per recipe.
        </para>
    </section>

    <section id='migration-2.0-recipe-maintenance-tracking-data-moved-to-oe-core'>
        <title>Recipe Maintenance Tracking Data Moved to OE-Core</title>

        <para>
            Maintenance tracking data for recipes that was previously part
            of <filename>meta-yocto</filename> has been moved to
            <link linkend='oe-core'>OE-Core</link>.
            The change includes <filename>package_regex.inc</filename> and
            <filename>distro_alias.inc</filename>, which are typically enabled
            when using the <filename>distrodata</filename> class.
            Additionally, the contents of
            <filename>upstream_tracking.inc</filename> has now been split out
            to the relevant recipes.
        </para>
    </section>

    <section id='migration-2.0-automatic-stale-sysroot-file-cleanup'>
        <title>Automatic Stale Sysroot File Cleanup</title>

        <para>
            Stale files from recipes that no longer exist in the current
            configuration are now automatically removed from
            sysroot as well as removed from
            any other place managed by shared state.
            This automatic cleanup means that the build system now properly
            handles situations such as renaming the build system side of
            recipes, removal of layers from
            <filename>bblayers.conf</filename>, and
            <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
            changes.
        </para>

        <para>
            Additionally, work directories for old versions of recipes are
            now pruned.
            If you wish to disable pruning old work directories, you can set
            the following variable in your configuration:
            <literallayout class='monospaced'>
     SSTATE_PRUNE_OBSOLETEWORKDIR = "0"
            </literallayout>
        </para>
    </section>

    <section id='migration-2.0-linux-yocto-kernel-metadata-repository-now-split-from-source'>
        <title><filename>linux-yocto</filename> Kernel Metadata Repository Now Split from Source</title>

        <para>
            The <filename>linux-yocto</filename> tree has up to now been a
            combined set of kernel changes and configuration (meta) data
            carried in a single tree.
            While this format is effective at keeping kernel configuration and
            source modifications synchronized, it is not always obvious to
            developers how to manipulate the Metadata as compared to the
            source.
        </para>

        <para>
            Metadata processing has now been removed from the
            <link linkend='ref-classes-kernel-yocto'><filename>kernel-yocto</filename></link>
            class and the external Metadata repository
            <filename>yocto-kernel-cache</filename>, which has always been used
            to seed the <filename>linux-yocto</filename> "meta" branch.
            This separate <filename>linux-yocto</filename> cache repository
            is now the primary location for this data.
            Due to this change, <filename>linux-yocto</filename> is no longer
            able to process combined trees.
            Thus, if you need to have your own combined kernel repository,
            you must do the split there as well and update your recipes
            accordingly.
            See the <filename>meta/recipes-kernel/linux/linux-yocto_4.1.bb</filename>
            recipe for an example.
        </para>
    </section>

    <section id='migration-2.0-additional-qa-checks'>
        <title>Additional QA checks</title>

        <para>
            The following QA checks have been added:
            <itemizedlist>
                <listitem><para>
                    Added a "host-user-contaminated" check for ownership
                    issues for packaged files outside of
                    <filename>/home</filename>.
                    The check looks for files that are incorrectly owned by the
                    user that ran BitBake instead of owned by a valid user in
                    the target system.
                    </para></listitem>
                <listitem><para>
                    Added an "invalid-chars" check for invalid (non-UTF8)
                    characters in recipe metadata variable values
                    (i.e.
                    <link linkend='var-DESCRIPTION'><filename>DESCRIPTION</filename></link>,
                    <link linkend='var-SUMMARY'><filename>SUMMARY</filename></link>,
                    <link linkend='var-LICENSE'><filename>LICENSE</filename></link>,
                    and
                    <link linkend='var-SECTION'><filename>SECTION</filename></link>).
                    Some package managers do not support these characters.
                    </para></listitem>
                <listitem><para>
                    Added an "invalid-packageconfig" check for any options
                    specified in
                    <link linkend='var-PACKAGECONFIG'><filename>PACKAGECONFIG</filename></link>
                    that do not match any <filename>PACKAGECONFIG</filename>
                    option defined for the recipe.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.0-miscellaneous'>
        <title>Miscellaneous Changes</title>

        <para>
            These additional changes exist:
            <itemizedlist>
                <listitem><para>
                    <filename>gtk-update-icon-cache</filename> has been
                    renamed to <filename>gtk-icon-utils</filename>.
                    </para></listitem>
                <listitem><para>
                    The <filename>tools-profile</filename>
                    <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
                    item as well as its corresponding packagegroup and
                    <filename>packagegroup-core-tools-profile</filename> no
                    longer bring in <filename>oprofile</filename>.
                    Bringing in <filename>oprofile</filename> was originally
                    added to aid compilation on resource-constrained
                    targets.
                    However, this aid has not been widely used and is not
                    likely to be used going forward due to the more powerful
                    target platforms and the existence of better
                    cross-compilation tools.
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    variable's default value now specifies
                    <filename>ext4</filename> instead of
                    <filename>ext3</filename>.
                    </para></listitem>
                <listitem><para>
                    All support for the <filename>PRINC</filename>
                    variable has been removed.
                    </para></listitem>
                <listitem><para>
                    The <filename>packagegroup-core-full-cmdline</filename>
                    packagegroup no longer brings in
                    <filename>lighttpd</filename> due to the fact that
                    bringing in <filename>lighttpd</filename> is not really in
                    line with the packagegroup's purpose, which is to add full
                    versions of command-line tools that by default are
                    provided by <filename>busybox</filename>.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.1-release'>
    <title>Moving to the Yocto Project 2.1 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.1 Release from the prior release.
    </para>

    <section id='migration-2.1-variable-expansion-in-python-functions'>
        <title>Variable Expansion in Python Functions</title>

        <para>
            Variable expressions, such as
            <filename>${</filename><replaceable>VARNAME</replaceable><filename>}</filename>
            no longer expand automatically within Python functions.
            Suppressing expansion was done to allow Python functions to
            construct shell scripts or other code for situations in which you
            do not want such expressions expanded.
            For any existing code that relies on these expansions, you need to
            change the expansions to expand the value of individual
            variables through <filename>d.getVar()</filename>.
            To alternatively expand more complex expressions,
            use <filename>d.expand()</filename>.
        </para>
    </section>

    <section id='migration-2.1-overrides-must-now-be-lower-case'>
        <title>Overrides Must Now be Lower-Case</title>

        <para>
            The convention for overrides has always been for them to be
            lower-case characters.
            This practice is now a requirement as BitBake's datastore now
            assumes lower-case characters in order to give a slight performance
            boost during parsing.
            In practical terms, this requirement means that anything that ends
            up in
            <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
            must now appear in lower-case characters (e.g. values for
            <filename>MACHINE</filename>, <filename>TARGET_ARCH</filename>,
            <filename>DISTRO</filename>, and also recipe names if
            <filename>_pn-</filename><replaceable>recipename</replaceable>
            overrides are to be effective).
        </para>
    </section>

    <section id='migration-2.1-expand-parameter-to-getvar-and-getvarflag-now-mandatory'>
        <title>Expand Parameter to <filename>getVar()</filename> and
            <filename>getVarFlag()</filename> is Now Mandatory</title>

        <para>
            The expand parameter to <filename>getVar()</filename> and
            <filename>getVarFlag()</filename> previously defaulted to
            False if not specified.
            Now, however, no default exists so one must be specified.
            You must change any <filename>getVar()</filename> calls that
            do not specify the final expand parameter to calls that do specify
            the parameter.
            You can run the following <filename>sed</filename> command at the
            base of a layer to make this change:
            <literallayout class='monospaced'>
     sed -e 's:\(\.getVar([^,()]*\)):\1, False):g' -i `grep -ril getVar *`
     sed -e 's:\(\.getVarFlag([^,()]*, [^,()]*\)):\1, False):g' -i `grep -ril getVarFlag *`
            </literallayout>
            <note>
                The reason for this change is that it prepares the way for
                changing the default to True in a future Yocto Project release.
                This future change is a much more sensible default than False.
                However, the change needs to be made gradually as a sudden
                change of the default would potentially cause side-effects
                that would be difficult to detect.
            </note>
        </para>
    </section>

    <section id='migration-2.1-makefile-environment-changes'>
        <title>Makefile Environment Changes</title>

        <para>
            <link linkend='var-EXTRA_OEMAKE'><filename>EXTRA_OEMAKE</filename></link>
            now defaults to "" instead of "-e MAKEFLAGS=".
            Setting <filename>EXTRA_OEMAKE</filename> to "-e MAKEFLAGS=" by
            default was a historical accident that has required many classes
            (e.g. <filename>autotools</filename>, <filename>module</filename>)
            and recipes to override this default in order to work with
            sensible build systems.
            When upgrading to the release, you must edit any recipe that
            relies upon this old default by either setting
            <filename>EXTRA_OEMAKE</filename> back to "-e MAKEFLAGS=" or by
            explicitly setting any required variable value overrides using
            <filename>EXTRA_OEMAKE</filename>, which is typically only needed
            when a Makefile sets a default value for a variable that is
            inappropriate for cross-compilation using the "=" operator rather
            than the "?=" operator.
        </para>
    </section>

    <section id='migration-2.1-libexecdir-reverted-to-prefix-libexec'>
        <title><filename>libexecdir</filename> Reverted to <filename>${prefix}/libexec</filename></title>

        <para>
            The use of <filename>${libdir}/${BPN}</filename> as
            <filename>libexecdir</filename> is different as compared to all
            other mainstream distributions, which either uses
            <filename>${prefix}/libexec</filename> or
            <filename>${libdir}</filename>.
            The use is also contrary to the GNU Coding Standards
            (i.e. <ulink url='https://www.gnu.org/prep/standards/html_node/Directory-Variables.html'></ulink>)
            that suggest <filename>${prefix}/libexec</filename> and also
            notes that any package-specific nesting should be done by the
            package itself.
            Finally, having <filename>libexecdir</filename> change between
            recipes makes it very difficult for different recipes to invoke
            binaries that have been installed into
            <filename>libexecdir</filename>.
            The Filesystem Hierarchy Standard
            (i.e. <ulink url='http://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s07.html'></ulink>)
            now recognizes the use of <filename>${prefix}/libexec/</filename>,
            giving distributions the choice between
            <filename>${prefix}/lib</filename> or
            <filename>${prefix}/libexec</filename> without breaking FHS.
        </para>
    </section>

    <section id='migration-2.1-ac-cv-sizeof-off-t-no-longer-cached-in-site-files'>
        <title><filename>ac_cv_sizeof_off_t</filename> is No Longer Cached in Site Files</title>

        <para>
            For recipes inheriting the
            <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
            class, <filename>ac_cv_sizeof_off_t</filename> is no longer cached
            in the site files for <filename>autoconf</filename>.
            The reason for this change is because the
            <filename>ac_cv_sizeof_off_t</filename> value is not necessarily
            static per architecture as was previously assumed.
            Rather, the value changes based on whether large file support is
            enabled.
            For most software that uses <filename>autoconf</filename>, this
            change should not be a problem.
            However, if you have a recipe that bypasses the standard
            <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
            task from the <filename>autotools</filename> class and the software
            the recipe is building uses a very old version of
            <filename>autoconf</filename>, the recipe might be incapable of
            determining the correct size of <filename>off_t</filename> during
            <filename>do_configure</filename>.
        </para>

        <para>
            The best course of action is to patch the software as necessary
            to allow the default implementation from the
            <filename>autotools</filename> class to work such that
            <filename>autoreconf</filename> succeeds and produces a working
            configure script, and to remove the
            overridden <filename>do_configure</filename> task such that the
            default implementation does get used.
        </para>
    </section>

    <section id='migration-2.1-image-generation-split-out-from-filesystem-generation'>
        <title>Image Generation is Now Split Out from Filesystem Generation</title>

        <para>
            Previously, for image recipes the
            <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
            task assembled the filesystem and then from that filesystem
            generated images.
            With this Yocto Project release, image generation is split into
            separate
            <link linkend='ref-tasks-image'><filename>do_image_*</filename></link>
            tasks for clarity both in operation and in the code.
        </para>

        <para>
            For most cases, this change does not present any problems.
            However, if you have made customizations that directly modify the
            <filename>do_rootfs</filename> task or that mention
            <filename>do_rootfs</filename>, you might need to update those
            changes.
            In particular, if you had added any tasks after
            <filename>do_rootfs</filename>, you should make edits so that
            those tasks are after the
            <link linkend='ref-tasks-image-complete'><filename>do_image_complete</filename></link>
            task rather than after <filename>do_rootfs</filename>
            so that the your added tasks
            run at the correct time.
        </para>

        <para>
            A minor part of this restructuring is that the post-processing
            definitions and functions have been moved from the
            <link linkend='ref-classes-image'><filename>image</filename></link>
            class to the
            <link linkend='ref-classes-rootfs*'><filename>rootfs-postcommands</filename></link>
            class.
            Functionally, however, they remain unchanged.
        </para>
    </section>

    <section id='migration-2.1-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed in the 2.1 release:
            <itemizedlist>
                <listitem><para><filename>gcc</filename> version 4.8:
                    Versions 4.9 and 5.3 remain.
                    </para></listitem>
                <listitem><para><filename>qt4</filename>:
                    All support for Qt 4.x has been moved out to a separate
                    <filename>meta-qt4</filename> layer because Qt 4 is no
                    longer supported upstream.
                    </para></listitem>
                <listitem><para><filename>x11vnc</filename>:
                    Moved to the <filename>meta-oe</filename> layer.
                    </para></listitem>
                <listitem><para><filename>linux-yocto-3.14</filename>:
                    No longer supported.
                    </para></listitem>
                <listitem><para><filename>linux-yocto-3.19</filename>:
                    No longer supported.
                    </para></listitem>
                <listitem><para><filename>libjpeg</filename>:
                    Replaced by the <filename>libjpeg-turbo</filename> recipe.
                    </para></listitem>
                <listitem><para><filename>pth</filename>:
                    Became obsolete.
                    </para></listitem>
                <listitem><para><filename>liboil</filename>:
                    Recipe is no longer needed and has been moved to the
                    <filename>meta-multimedia</filename> layer.
                    </para></listitem>
                <listitem><para><filename>gtk-theme-torturer</filename>:
                    Recipe is no longer needed and has been moved to the
                    <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><filename>gnome-mime-data</filename>:
                    Recipe is no longer needed and has been moved to the
                    <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><filename>udev</filename>:
                    Replaced by the <filename>eudev</filename> recipe for
                    compatibility when using <filename>sysvinit</filename>
                    with newer kernels.
                    </para></listitem>
                <listitem><para><filename>python-pygtk</filename>:
                    Recipe became obsolete.
                    </para></listitem>
                <listitem><para><filename>adt-installer</filename>:
                    Recipe became obsolete.
                    See the
                    "<link linkend='migration-2.1-adt-removed'>ADT Removed</link>"
                    section for more information.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.1-class-changes'>
        <title>Class Changes</title>

        <para>
            The following classes have changed:
            <itemizedlist>
                <listitem><para><filename>autotools_stage</filename>:
                    Removed because the
                    <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
                    class now provides its functionality.
                    Recipes that inherited from
                    <filename>autotools_stage</filename> should now inherit
                    from <filename>autotools</filename> instead.
                    </para></listitem>
                <listitem><para><filename>boot-directdisk</filename>:
                    Merged into the <filename>image-vm</filename>
                    class.
                    The <filename>boot-directdisk</filename> class was rarely
                    directly used.
                    Consequently, this change should not cause any issues.
                    </para></listitem>
                <listitem><para><filename>bootimg</filename>:
                    Merged into the
                    <link linkend='ref-classes-image-live'><filename>image-live</filename></link>
                    class.
                    The <filename>bootimg</filename> class was rarely
                    directly used.
                    Consequently, this change should not cause any issues.
                    </para></listitem>
                <listitem><para><filename>packageinfo</filename>:
                    Removed due to its limited use by the Hob UI, which has
                    itself been removed.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.1-build-system-ui-changes'>
        <title>Build System User Interface Changes</title>

        <para>
            The following changes have been made to the build system user
            interface:
            <itemizedlist>
                <listitem><para><emphasis>Hob GTK+-based UI</emphasis>:
                    Removed because it is unmaintained and based on the
                    outdated GTK+ 2 library.
                    The Toaster web-based UI is much more capable and is
                    actively maintained.
                    See the
                    "<ulink url='&YOCTO_DOCS_TOAST_URL;#using-the-toaster-web-interface'>Using the Toaster Web Interface</ulink>"
                    section in the Toaster User Manual for more
                    information on this interface.
                    </para></listitem>
                <listitem><para><emphasis>"puccho" BitBake UI</emphasis>:
                    Removed because is unmaintained and no longer useful.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.1-adt-removed'>
        <title>ADT Removed</title>

        <para>
            The Application Development Toolkit (ADT) has been removed
            because its functionality almost completely overlapped with the
            <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-using-the-standard-sdk'>standard SDK</ulink>
            and the
            <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-extensible'>extensible SDK</ulink>.
            For information on these SDKs and how to build and use them, see the
            <ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
            manual.
            <note>
                The Yocto Project Eclipse IDE Plug-in is still supported and
                is not affected by this change.
            </note>
        </para>
    </section>

    <section id='migration-2.1-poky-reference-distribution-changes'>
        <title>Poky Reference Distribution Changes</title>

        <para>
            The following changes have been made for the Poky distribution:
            <itemizedlist>
                <listitem><para>
                    The <filename>meta-yocto</filename> layer has been renamed
                    to <filename>meta-poky</filename> to better match its
                    purpose, which is to provide the Poky reference
                    distribution.
                    The <filename>meta-yocto-bsp</filename> layer retains its
                    original name since it provides reference machines for
                    the Yocto Project and it is otherwise unrelated to Poky.
                    References to <filename>meta-yocto</filename> in your
                    <filename>conf/bblayers.conf</filename> should
                    automatically be updated, so you should not need to change
                    anything unless you are relying on this naming elsewhere.
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='ref-classes-uninative'><filename>uninative</filename></link>
                    class is now enabled by default in Poky.
                    This class attempts to isolate the build system from the
                    host distribution's C library and makes re-use of native
                    shared state artifacts across different host distributions
                    practical.
                    With this class enabled, a tarball containing a pre-built
                    C library is downloaded at the start of the build.</para>

                    <para>The <filename>uninative</filename> class is enabled
                    through the
                    <filename>meta/conf/distro/include/yocto-uninative.inc</filename>
                    file, which for those not using the Poky distribution, can
                    include to easily enable the same functionality.</para>

                    <para>Alternatively, if you wish to build your own
                    <filename>uninative</filename> tarball, you can do so by
                    building the <filename>uninative-tarball</filename> recipe,
                    making it available to your build machines
                    (e.g. over HTTP/HTTPS) and setting a similar configuration
                    as the one set by <filename>yocto-uninative.inc</filename>.
                    </para></listitem>
                <listitem><para>
                    Static library generation, for most cases, is now disabled
                    by default in the Poky distribution.
                    Disabling this generation saves some build time as well
                    as the size used for build output artifacts.</para>

                    <para>Disabling this library generation is accomplished
                    through a
                    <filename>meta/conf/distro/include/no-static-libs.inc</filename>,
                    which for those not using the Poky distribution can
                    easily include to enable the same functionality.</para>

                    <para>Any recipe that needs to opt-out of having the
                    "--disable-static" option specified on the configure
                    command line either because it is not a supported option
                    for the configure script or because static libraries are
                    needed should set the following variable:
                    <literallayout class='monospaced'>
     DISABLE_STATIC = ""
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    The separate <filename>poky-tiny</filename> distribution
                    now uses the musl C library instead of a heavily pared
                    down <filename>glibc</filename>.
                    Using musl results in a smaller
                    distribution and facilitates much greater maintainability
                    because musl is designed to have a small footprint.</para>

                    <para>If you have used <filename>poky-tiny</filename> and
                    have customized the <filename>glibc</filename>
                    configuration you will need to redo those customizations
                    with musl when upgrading to the new release.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.1-packaging-changes'>
        <title>Packaging Changes</title>

        <para>
            The following changes have been made to packaging:
            <itemizedlist>
                <listitem><para>
                    The <filename>runuser</filename> and
                    <filename>mountpoint</filename> binaries, which were
                    previously in the main <filename>util-linux</filename>
                    package, have been split out into the
                    <filename>util-linux-runuser</filename> and
                    <filename>util-linux-mountpoint</filename> packages,
                    respectively.
                    </para></listitem>
                <listitem><para>
                    The <filename>python-elementtree</filename> package has
                    been merged into the <filename>python-xml</filename>
                    package.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.1-tuning-file-changes'>
        <title>Tuning File Changes</title>

        <para>
            The following changes have been made to the tuning files:
            <itemizedlist>
                <listitem><para>
                    The "no-thumb-interwork" tuning feature has been dropped
                    from the ARM tune include files.
                    Because interworking is required for ARM EABI, attempting
                    to disable it through a tuning feature no longer makes
                    sense.
                    <note>
                        Support for ARM OABI was deprecated in gcc 4.7.
                    </note>
                    </para></listitem>
                <listitem><para>
                    The <filename>tune-cortexm*.inc</filename> and
                    <filename>tune-cortexr4.inc</filename> files have been
                    removed because they are poorly tested.
                    Until the OpenEmbedded build system officially gains
                    support for CPUs without an MMU, these tuning files would
                    probably be better maintained in a separate layer
                    if needed.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.1-supporting-gobject-introspection'>
        <title>Supporting GObject Introspection</title>

        <para>
            This release supports generation of GLib Introspective
            Repository (GIR) files through GObject introspection, which is
            the standard mechanism for accessing GObject-based software from
            runtime environments.
            You can enable, disable, and test the generation of this data.
            See the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#enabling-gobject-introspection-support'>Enabling GObject Introspection Support</ulink>"
            section in the Yocto Project Development Tasks Manual
            for more information.
        </para>
    </section>

    <section id='migration-2.1-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            These additional changes exist:
            <itemizedlist>
                <listitem><para>
                    The minimum Git version has been increased to 1.8.3.1.
                    If your host distribution does not provide a sufficiently
                    recent version, you can install the buildtools, which
                    will provide it.
                    See the
                    "<link linkend='required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</link>"
                    section for more information on the buildtools tarball.
                    </para></listitem>
                <listitem><para>
                    The buggy and incomplete support for the RPM version 4
                    package manager has been removed.
                    The well-tested and maintained support for RPM version 5
                    remains.
                    </para></listitem>
                <listitem><para>
                    Previously, the following list of packages were removed
                    if package-management was not in
                    <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>,
                    regardless of any dependencies:
                    <literallayout class='monospaced'>
     update-rc.d
     base-passwd
     shadow
     update-alternatives
     run-postinsts
                    </literallayout>
                    With the Yocto Project 2.1 release, these packages are only
                    removed if "read-only-rootfs" is in
                    <filename>IMAGE_FEATURES</filename>, since they might
                    still be needed for a read-write image even in the absence
                    of a package manager (e.g. if users need to be added,
                    modified, or removed at runtime).
                    </para></listitem>
                <listitem><para>
                    The
                    <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-devtool-use-devtool-modify-to-modify-the-source-of-an-existing-component'><filename>devtool modify</filename></ulink>
                    command now defaults to extracting the source since that
                    is most commonly expected.
                    The "-x" or "--extract" options are now no-ops.
                    If you wish to provide your own existing source tree, you
                    will now need to specify either the "-n" or
                    "--no-extract" options when running
                    <filename>devtool modify</filename>.
                    </para></listitem>
                <listitem><para>
                    If the formfactor for a machine is either not supplied
                    or does not specify whether a keyboard is attached, then
                    the default is to assume a keyboard is attached rather
                    than assume no keyboard.
                    This change primarily affects the Sato UI.
                   </para></listitem>
                <listitem><para>
                    The <filename>.debug</filename> directory packaging is
                    now automatic.
                    If your recipe builds software that installs binaries into
                    directories other than the standard ones, you no longer
                    need to take care of setting
                    <filename>FILES_${PN}-dbg</filename> to pick up the
                    resulting <filename>.debug</filename> directories as these
                    directories are automatically found and added.
                    </para></listitem>
                <listitem><para>
                    Inaccurate disk and CPU percentage data has been dropped
                    from <filename>buildstats</filename> output.
                    This data has been replaced with
                    <filename>getrusage()</filename> data and corrected IO
                    statistics.
                    You will probably need to update any custom code that reads
                    the <filename>buildstats</filename> data.
                    </para></listitem>
                <listitem><para>
                    The
                    <filename>meta/conf/distro/include/package_regex.inc</filename>
                    is now deprecated.
                    The contents of this file have been moved to individual
                    recipes.
                    <note><title>Tip</title>
                        Because this file will likely be removed in a future
                        Yocto Project release, it is suggested that you remove
                        any references to the file that might be in your
                        configuration.
                    </note>
                    </para></listitem>
                <listitem><para>
                    The <filename>v86d/uvesafb</filename> has been removed from
                    the <filename>genericx86</filename> and
                    <filename>genericx86-64</filename> reference machines,
                    which are provided by the
                    <filename>meta-yocto-bsp</filename> layer.
                    Most modern x86 boards do not rely on this file and it only
                    adds kernel error messages during startup.
                    If you do still need to support
                    <filename>uvesafb</filename>, you can
                    simply add <filename>v86d</filename> to your image.
                    </para></listitem>
                <listitem><para>
                     Build sysroot paths are now removed from debug symbol
                     files.
                     Removing these paths means that remote GDB using an
                     unstripped build system sysroot will no longer work
                     (although this was never documented to work).
                     The supported method to accomplish something similar is
                     to set <filename>IMAGE_GEN_DEBUGFS</filename> to "1",
                     which will generate a companion debug image
                     containing unstripped binaries and associated debug
                     sources alongside the image.
                     </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.2-release'>
    <title>Moving to the Yocto Project 2.2 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.2 Release from the prior release.
    </para>

    <section id='migration-2.2-minimum-kernel-version'>
        <title>Minimum Kernel Version</title>

        <para>
            The minimum kernel version for the target system and for SDK
            is now 3.2.0, due to the upgrade
            to <filename>glibc 2.24</filename>.
            Specifically, for AArch64-based targets the version is
            3.14.
            For Nios II-based targets, the minimum kernel version is 3.19.
            <note>
                For x86 and x86_64, you can reset
                <link linkend='var-OLDEST_KERNEL'><filename>OLDEST_KERNEL</filename></link>
                to anything down to 2.6.32 if desired.
            </note>
        </para>
    </section>

    <section id='migration-2.2-staging-directories-in-sysroot-simplified'>
        <title>Staging Directories in Sysroot Has Been Simplified</title>

        <para>
            The way directories are staged in sysroot has been simplified and
            introduces the new
            <link linkend='var-SYSROOT_DIRS'><filename>SYSROOT_DIRS</filename></link>,
            <link linkend='var-SYSROOT_DIRS_NATIVE'><filename>SYSROOT_DIRS_NATIVE</filename></link>,
            and
            <link linkend='var-SYSROOT_DIRS_BLACKLIST'><filename>SYSROOT_DIRS_BLACKLIST</filename></link>.
            See the
            <ulink url='http://lists.openembedded.org/pipermail/openembedded-core/2016-May/121365.html'>v2 patch series on the OE-Core Mailing List</ulink>
            for additional information.
        </para>
    </section>

    <section id='migration-2.2-removal-of-old-images-from-tmp-deploy-now-enabled'>
        <title>Removal of Old Images and Other Files in <filename>tmp/deploy</filename> Now Enabled</title>

        <para>
            Removal of old images and other files in
            <filename>tmp/deploy/</filename> is now enabled by default due
            to a new staging method used for those files.
            As a result of this change, the
            <filename>RM_OLD_IMAGE</filename> variable is now redundant.
        </para>
    </section>

    <section id='migration-2.2-python-changes'>
        <title>Python Changes</title>

        <para>
            The following changes for Python occurred:
        </para>

        <section id='migration-2.2-bitbake-now-requires-python-3.4'>
            <title>BitBake Now Requires Python 3.4+</title>

            <para>
                BitBake requires Python 3.4 or greater.
            </para>
        </section>

        <section id='migration-2.2-utf-8-locale-required-on-build-host'>
            <title>UTF-8 Locale Required on Build Host</title>

            <para>
                A UTF-8 locale is required on the build host due to Python 3.
                Since C.UTF-8 is not a standard, the default is en_US.UTF-8.
            </para>
        </section>

        <section id='migration-2.2-metadata-now-must-use-python-3-syntax'>
            <title>Metadata Must Now Use Python 3 Syntax</title>

            <para>
                The metadata is now required to use Python 3 syntax.
                For help preparing metadata, see any of the many Python 3 porting
                guides available.
                Alternatively, you can reference the conversion commits for Bitbake
                and you can use
                <link linkend='oe-core'>OE-Core</link> as a guide for changes.
                Following are particular areas of interest:
                <literallayout class='monospaced'>
     * subprocess command-line pipes needing locale decoding
     * the syntax for octal values changed
     * the <filename>iter*()</filename> functions changed name
     * iterators now return views, not lists
     * changed names for Python modules
                </literallayout>
            </para>
        </section>

        <section id='migration-2.2-target-python-recipes-switched-to-python-3'>
            <title>Target Python Recipes Switched to Python 3</title>

            <para>
                Most target Python recipes have now been switched to Python 3.
                Unfortunately, systems using RPM as a package manager and
                providing online package-manager support through SMART still
                require Python 2.
                <note>
                    Python 2 and recipes that use it can still be built for the
                    target as with previous versions.
                </note>
            </para>
        </section>

        <section id='migration-2.2-buildtools-tarball-includes-python-3'>
            <title><filename>buildtools-tarball</filename> Includes Python 3</title>

            <para>
                <filename>buildtools-tarball</filename> now includes Python 3.
            </para>
        </section>
    </section>

    <section id='migration-2.2-uclibc-replaced-by-musl'>
        <title>uClibc Replaced by musl</title>

        <para>
            uClibc has been removed in favor of musl.
            Musl has matured, is better maintained, and is compatible with a
            wider range of applications as compared to uClibc.
        </para>
    </section>

    <section id='migration-2.2-B-no-longer-default-working-directory-for-tasks'>
        <title><filename>${B}</filename> No Longer Default Working Directory for Tasks</title>

        <para>
            <filename>${</filename><link linkend='var-B'><filename>B</filename></link><filename>}</filename>
            is no longer the default working directory for tasks.
            Consequently, any custom tasks you define now need to either
            have the
            <filename>[</filename><ulink url='&YOCTO_DOCS_BB_URL;#variable-flags'><filename>dirs</filename></ulink><filename>]</filename> flag set, or the task needs to change into the
            appropriate working directory manually (e.g using
            <filename>cd</filename> for a shell task).
            <note>
                The preferred method is to use the
                <filename>[dirs]</filename> flag.
            </note>
        </para>
    </section>

    <section id='migration-2.2-runqemu-ported-to-python'>
        <title><filename>runqemu</filename> Ported to Python</title>

        <para>
            <filename>runqemu</filename> has been ported to Python and has
            changed behavior in some cases.
            Previous usage patterns continue to be supported.
        </para>

        <para>
            The new <filename>runqemu</filename> is a Python script.
            Machine knowledge is no longer hardcoded into
            <filename>runqemu</filename>.
            You can choose to use the <filename>qemuboot</filename>
            configuration file to define the BSP's own arguments and to make
            it bootable with <filename>runqemu</filename>.
            If you use a configuration file, use the following form:
            <literallayout class='monospaced'>
     <replaceable>image-name</replaceable>-<replaceable>machine</replaceable>.qemuboot.conf
            </literallayout>
            The configuration file enables fine-grained tuning of options
            passed to QEMU without the <filename>runqemu</filename> script
            hard-coding any knowledge about different machines.
            Using a configuration file is particularly convenient when trying
            to use QEMU with machines other than the
            <filename>qemu*</filename> machines in
            <link linkend='oe-core'>OE-Core</link>.
            The <filename>qemuboot.conf</filename> file is generated by the
            <filename>qemuboot</filename>
            class when the root filesystem is being build (i.e.
            build rootfs).
            QEMU boot arguments can be set in BSP's configuration file and
            the <filename>qemuboot</filename> class will save them to
            <filename>qemuboot.conf</filename>.
        </para>


        <para>
            If you want to use <filename>runqemu</filename> without a
            configuration file, use the following command form:
            <literallayout class='monospaced'>
     $ runqemu <replaceable>machine</replaceable> <replaceable>rootfs</replaceable> <replaceable>kernel</replaceable> [<replaceable>options</replaceable>]
            </literallayout>
            Supported <replaceable>machines</replaceable> are as follows:
            <literallayout class='monospaced'>
     qemuarm
     qemuarm64
     qemux86
     qemux86-64
     qemuppc
     qemumips
     qemumips64
     qemumipsel
     qemumips64el
            </literallayout>
            Consider the following example, which uses the
            <filename>qemux86-64</filename> machine,
            provides a root filesystem, provides an image, and uses
            the <filename>nographic</filename> option:
            <literallayout class='monospaced'>
$ runqemu qemux86-64 tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.ext4 tmp/deploy/images/qemux86-64/bzImage nographic
            </literallayout>
        </para>

        <para>
            Following is a list of variables that can be set in configuration
            files such as <filename>bsp.conf</filename> to enable the BSP
            to be booted by <filename>runqemu</filename>:
            <note>
                "QB" means "QEMU Boot".
            </note>
            <literallayout class='monospaced'>
     QB_SYSTEM_NAME: QEMU name (e.g. "qemu-system-i386")
     QB_OPT_APPEND: Options to append to QEMU (e.g. "-show-cursor")
     QB_DEFAULT_KERNEL: Default kernel to boot (e.g. "bzImage")
     QB_DEFAULT_FSTYPE: Default FSTYPE to boot (e.g. "ext4")
     QB_MEM: Memory (e.g. "-m 512")
     QB_MACHINE: QEMU machine (e.g. "-machine virt")
     QB_CPU: QEMU cpu (e.g. "-cpu qemu32")
     QB_CPU_KVM: Similar to QB_CPU except used for kvm support (e.g. "-cpu kvm64")
     QB_KERNEL_CMDLINE_APPEND: Options to append to the kernel's -append
                               option (e.g. "console=ttyS0 console=tty")
     QB_DTB: QEMU dtb name
     QB_AUDIO_DRV: QEMU audio driver (e.g. "alsa", set it when support audio)
     QB_AUDIO_OPT: QEMU audio option (e.g. "-soundhw ac97,es1370"), which is used
                   when QB_AUDIO_DRV is set.
     QB_KERNEL_ROOT: Kernel's root (e.g. /dev/vda)
     QB_TAP_OPT: Network option for 'tap' mode (e.g.
                 "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no -device virtio-net-device,netdev=net0").
                  runqemu will replace "@TAP@" with the one that is used, such as tap0, tap1 ...
     QB_SLIRP_OPT: Network option for SLIRP mode (e.g. "-netdev user,id=net0 -device virtio-net-device,netdev=net0")
     QB_ROOTFS_OPT: Used as rootfs (e.g.
                    "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0").
                    runqemu will replace "@ROOTFS@" with the one which is used, such as
                    core-image-minimal-qemuarm64.ext4.
     QB_SERIAL_OPT: Serial port (e.g. "-serial mon:stdio")
     QB_TCPSERIAL_OPT: tcp serial port option (e.g.
                       " -device virtio-serial-device -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1 -device      virtconsole,chardev=virtcon"
                       runqemu will replace "@PORT@" with the port number which is used.
            </literallayout>
        </para>

        <para>
            To use <filename>runqemu</filename>, set
            <link linkend='var-IMAGE_CLASSES'><filename>IMAGE_CLASSES</filename></link>
            as follows and run <filename>runqemu</filename>:
            <note>
                For command-line syntax, use
                <filename>runqemu help</filename>.
            </note>
            <literallayout class='monospaced'>
     IMAGE_CLASSES += "qemuboot"
            </literallayout>
        </para>
    </section>

    <section id='migration-2.2-default-linker-hash-style-changed'>
        <title>Default Linker Hash Style Changed</title>

        <para>
            The default linker hash style for <filename>gcc-cross</filename>
            is now "sysv" in order to catch recipes that are building software
            without using the OpenEmbedded
            <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>.
            This change could result in seeing some "No GNU_HASH in the elf
            binary" QA issues when building such recipes.
            You need to fix these recipes so that they use the expected
            <filename>LDFLAGS</filename>.
            Depending on how the software is built, the build system used by
            the software (e.g. a Makefile) might need to be patched.
            However, sometimes making this fix is as simple as adding the
            following to the recipe:
            <literallayout class='monospaced'>
     TARGET_CC_ARCH += "${LDFLAGS}"
            </literallayout>
        </para>
    </section>

    <section id='migration-2.2-kernel-image-base-name-no-longer-uses-kernel-imagetype'>
        <title><filename>KERNEL_IMAGE_BASE_NAME</filename> no Longer Uses <filename>KERNEL_IMAGETYPE</filename></title>

        <para>
            The
            <filename>KERNEL_IMAGE_BASE_NAME</filename>
            variable no longer uses the
            <link linkend='var-KERNEL_IMAGETYPE'><filename>KERNEL_IMAGETYPE</filename></link>
            variable to create the image's base name.
            Because the OpenEmbedded build system can now build multiple kernel
            image types, this part of the kernel image base name as been
            removed leaving only the following:
            <literallayout class='monospaced'>
     KERNEL_IMAGE_BASE_NAME ?= "${PKGE}-${PKGV}-${PKGR}-${MACHINE}-${DATETIME}
            </literallayout>
            If you have recipes or classes that use
            <filename>KERNEL_IMAGE_BASE_NAME</filename> directly, you might
            need to update the references to ensure they continue to work.
        </para>
    </section>

    <section id='migration-2.2-bitbake-changes'>
        <title>BitBake Changes</title>

        <para>
            The following changes took place for BitBake:
            <itemizedlist>
                <listitem><para>
                    The "goggle" UI and standalone image-writer tool have
                    been removed as they both require GTK+ 2.0 and
                    were not being maintained.
                    </para></listitem>
                <listitem><para>
                    The Perforce fetcher now supports
                    <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
                    for specifying the source revision to use, be it
                    <filename>${</filename><link linkend='var-AUTOREV'><filename>AUTOREV</filename></link><filename>}</filename>,
                    changelist number, p4date, or label, in preference to
                    separate
                    <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
                    parameters to specify these.
                    This change is more in-line with how the other fetchers
                    work for source control systems.
                    Recipes that fetch from Perforce will need to be updated
                    to use <filename>SRCREV</filename> in place of specifying
                    the source revision within
                    <filename>SRC_URI</filename>.
                    </para></listitem>
                <listitem><para>
                    Some of BitBake's internal code structures for accessing
                    the recipe cache needed to be changed to support the new
                    multi-configuration functionality.
                    These changes will affect external tools that use BitBake's
                    tinfoil module.
                    For information on these changes, see the changes made to
                    the scripts supplied with OpenEmbedded-Core:
                    <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=189371f8393971d00bca0fceffd67cc07784f6ee'>1</ulink>
                    and
                    <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=4a5aa7ea4d07c2c90a1654b174873abb018acc67'>2</ulink>.
                    </para></listitem>
                <listitem><para>
                    The task management code has been rewritten to avoid using
                    ID indirection in order to improve performance.
                    This change is unlikely to cause any problems for most
                    users.
                    However, the setscene verification function as pointed to
                    by <filename>BB_SETSCENE_VERIFY_FUNCTION</filename>
                    needed to change signature.
                    Consequently, a new variable named
                    <filename>BB_SETSCENE_VERIFY_FUNCTION2</filename>
                    has been added allowing multiple versions of BitBake
                    to work with suitably written metadata, which includes
                    OpenEmbedded-Core and Poky.
                    Anyone with custom BitBake task scheduler code might also
                    need to update the code to handle the new structure.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.2-swabber-has-been-removed'>
        <title>Swabber has Been Removed</title>

        <para>
            Swabber, a tool that was intended to detect host contamination in
            the build process, has been removed, as it has been unmaintained
            and unused for some time and was never particularly effective.
            The OpenEmbedded build system has since incorporated a number of
            mechanisms including enhanced QA checks that mean that there is
            less of a need for such a tool.
        </para>
    </section>

    <section id='migration-2.2-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para>
                    <filename>augeas</filename>:
                    No longer needed and has been moved to
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>directfb</filename>:
                    Unmaintained and has been moved to
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>gcc</filename>:
                    Removed 4.9 version.
                    Versions 5.4 and 6.2 are still present.
                    </para></listitem>
                <listitem><para>
                    <filename>gnome-doc-utils</filename>:
                    No longer needed.
                    </para></listitem>
                <listitem><para>
                    <filename>gtk-doc-stub</filename>:
                    Replaced by <filename>gtk-doc</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>gtk-engines</filename>:
                    No longer needed and has been moved to
                    <filename>meta-gnome</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>gtk-sato-engine</filename>:
                    Became obsolete.
                    </para></listitem>
                <listitem><para>
                    <filename>libglade</filename>:
                    No longer needed and has been moved to
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>libmad</filename>:
                    Unmaintained and functionally replaced by
                    <filename>libmpg123</filename>.
                    <filename>libmad</filename> has been moved to
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>libowl</filename>:
                    Became obsolete.
                    </para></listitem>
                <listitem><para>
                    <filename>libxsettings-client</filename>:
                    No longer needed.
                    </para></listitem>
                <listitem><para>
                    <filename>oh-puzzles</filename>:
                    Functionally replaced by
                    <filename>puzzles</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>oprofileui</filename>:
                    Became obsolete.
                    OProfile has been largely supplanted by perf.
                    </para></listitem>
                <listitem><para>
                    <filename>packagegroup-core-directfb.bb</filename>:
                    Removed.
                    </para></listitem>
                <listitem><para>
                    <filename>core-image-directfb.bb</filename>:
                    Removed.
                    </para></listitem>
                <listitem><para>
                    <filename>pointercal</filename>:
                    No longer needed and has been moved to
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>python-imaging</filename>:
                    No longer needed and moved to
                    <filename>meta-python</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>python-pyrex</filename>:
                    No longer needed and moved to
                    <filename>meta-python</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>sato-icon-theme</filename>:
                    Became obsolete.
                    </para></listitem>
                <listitem><para>
                    <filename>swabber-native</filename>:
                    Swabber has been removed.
                    See the
                    <link linkend='migration-2.2-swabber-has-been-removed'>entry on Swabber</link>.
                    </para></listitem>
                <listitem><para>
                    <filename>tslib</filename>:
                    No longer needed and has been moved to
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>uclibc</filename>:
                    Removed in favor of musl.
                    </para></listitem>
                <listitem><para>
                    <filename>xtscal</filename>:
                    No longer needed and moved to
                    <filename>meta-oe</filename>
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.2-removed-classes'>
        <title>Removed Classes</title>

        <para>
            The following classes have been removed:
            <itemizedlist>
                <listitem><para>
                    <filename>distutils-native-base</filename>:
                    No longer needed.
                    </para></listitem>
                <listitem><para>
                    <filename>distutils3-native-base</filename>:
                    No longer needed.
                    </para></listitem>
                <listitem><para>
                    <filename>sdl</filename>:
                    Only set
                    <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
                    and
                    <link linkend='var-SECTION'><filename>SECTION</filename></link>,
                    which are better set within the recipe instead.
                    </para></listitem>
                <listitem><para>
                    <filename>sip</filename>:
                    Mostly unused.
                    </para></listitem>
                <listitem><para>
                    <filename>swabber</filename>:
                    See the
                    <link linkend='migration-2.2-swabber-has-been-removed'>entry on Swabber</link>.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.2-minor-packaging-changes'>
        <title>Minor Packaging Changes</title>

        <para>
            The following minor packaging changes have occurred:
            <itemizedlist>
                <listitem><para>
                    <filename>grub</filename>:
                    Split <filename>grub-editenv</filename> into its own
                    package.
                    </para></listitem>
                <listitem><para>
                    <filename>systemd</filename>:
                    Split container and vm related units into a new package,
                    systemd-container.
                    </para></listitem>
                <listitem><para>
                    <filename>util-linux</filename>:
                    Moved <filename>prlimit</filename> to a separate
                    <filename>util-linux-prlimit</filename> package.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.2-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following miscellaneous changes have occurred:
            <itemizedlist>
                <listitem><para>
                    <filename>package_regex.inc</filename>:
                    Removed because the definitions
                    <filename>package_regex.inc</filename> previously contained
                    have been moved to their respective recipes.
                    </para></listitem>
                <listitem><para>
                    Both <filename>devtool add</filename> and
                    <filename>recipetool create</filename> now use a fixed
                    <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
                    by default when fetching from a Git repository.
                    You can override this in either case to use
                    <filename>${</filename><link linkend='var-AUTOREV'><filename>AUTOREV</filename></link><filename>}</filename>
                    instead by using the <filename>-a</filename> or
                    <filename>&dash;&dash;autorev</filename> command-line
                    option
                    </para></listitem>
                <listitem><para>
                    <filename>distcc</filename>:
                    GTK+ UI is now disabled by default.
                    </para></listitem>
                <listitem><para>
                    <filename>packagegroup-core-tools-testapps</filename>:
                    Removed Piglit.
                    </para></listitem>
                <listitem><para>
                    <filename>image.bbclass</filename>:
                    Renamed COMPRESS(ION) to CONVERSION.
                    This change means that
                    <filename>COMPRESSIONTYPES</filename>,
                    <filename>COMPRESS_DEPENDS</filename> and
                    <filename>COMPRESS_CMD</filename> are deprecated in favor
                    of <filename>CONVERSIONTYPES</filename>,
                    <filename>CONVERSION_DEPENDS</filename> and
                    <filename>CONVERSION_CMD</filename>.
                    The <filename>COMPRESS*</filename> variable names will
                    still work in the 2.2 release but metadata that does not
                    need to be backwards-compatible should be changed to
                    use the new names as the <filename>COMPRESS*</filename>
                    ones will be removed in a future release.
                    </para></listitem>
                <listitem><para>
                    <filename>gtk-doc</filename>:
                    A full version of <filename>gtk-doc</filename> is now
                    made available.
                    However, some old software might not be capable of using
                    the current version of <filename>gtk-doc</filename>
                    to build documentation.
                    You need to change recipes that build such software so that
                    they explicitly disable building documentation with
                    <filename>gtk-doc</filename>.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.3-release'>
    <title>Moving to the Yocto Project 2.3 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.3 Release from the prior release.
    </para>

    <section id='migration-2.3-recipe-specific-sysroots'>
        <title>Recipe-specific Sysroots</title>

        <para>
            The OpenEmbedded build system now uses one sysroot per
            recipe to resolve long-standing issues with configuration
            script auto-detection of undeclared dependencies.
            Consequently, you might find that some of your previously
            written custom recipes are missing declared dependencies,
            particularly those dependencies that are incidentally built
            earlier in a typical build process and thus are already likely
            to be present in the shared sysroot in previous releases.
        </para>

        <para>
            Consider the following:
            <itemizedlist>
                <listitem><para>
                    <emphasis>Declare Build-Time Dependencies:</emphasis>
                    Because of this new feature, you must explicitly
                    declare all build-time dependencies for your recipe.
                    If you do not declare these dependencies, they are not
                    populated into the sysroot for the recipe.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Specify Pre-Installation and Post-Installation
                    Native Tool Dependencies:</emphasis>
                    You must specifically specify any special native tool
                    dependencies of <filename>pkg_preinst</filename> and
                    <filename>pkg_postinst</filename> scripts by using the
                    <link linkend='var-PACKAGE_WRITE_DEPS'><filename>PACKAGE_WRITE_DEPS</filename></link>
                    variable.
                    Specifying these dependencies ensures that these tools
                    are available if these scripts need to be run on the
                    build host during the
                    <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
                    task.</para>

                    <para>As an example, see the <filename>dbus</filename>
                    recipe.
                    You will see that this recipe has a
                    <filename>pkg_postinst</filename> that calls
                    <filename>systemctl</filename> if "systemd" is in
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
                    In the example,
                    <filename>systemd-systemctl-native</filename> is added to
                    <filename>PACKAGE_WRITE_DEPS</filename>, which is also
                    conditional on "systemd" being in
                    <filename>DISTRO_FEATURES</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Examine Recipes that Use
                    <filename>SSTATEPOSTINSTFUNCS</filename>:</emphasis>
                    You need to examine any recipe that uses
                    <filename>SSTATEPOSTINSTFUNCS</filename> and determine
                    steps to take.</para>

                    <para>Functions added to
                    <filename>SSTATEPOSTINSTFUNCS</filename> are still
                    called as they were in previous Yocto Project releases.
                    However, since a separate sysroot is now being populated
                    for every recipe and if existing functions being called
                    through <filename>SSTATEPOSTINSTFUNCS</filename> are
                    doing relocation, then you will need to change these
                    to use a post-installation script that is installed by a
                    function added to
                    <link linkend='var-SYSROOT_PREPROCESS_FUNCS'><filename>SYSROOT_PREPROCESS_FUNCS</filename></link>.
                    </para>

                    <para>For an example, see the
                    <filename>pixbufcache</filename> class in
                    <filename>meta/classes/</filename> in the Yocto Project
                    <ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>.
                    <note>
                        The <filename>SSTATEPOSTINSTFUNCS</filename> variable
                        itself is now deprecated in favor of the
                        <filename>do_populate_sysroot[postfuncs]</filename>
                        task.
                        Consequently, if you do still have any function or
                        functions that need to be called after the sysroot
                        component is created for a recipe, then you would be
                        well advised to take steps to use a post installation
                        script as described previously.
                        Taking these steps prepares your code for when
                        <filename>SSTATEPOSTINSTFUNCS</filename> is
                        removed in a future Yocto Project release.
                    </note>
                    </para></listitem>
                <listitem><para>
                    <emphasis>Specify the Sysroot when Using Certain
                    External Scripts:</emphasis>
                    Because the shared sysroot is now gone, the scripts
                    <filename>oe-find-native-sysroot</filename> and
                    <filename>oe-run-native</filename> have been changed such
                    that you need to specify which recipe's
                    <link linkend='var-STAGING_DIR_NATIVE'><filename>STAGING_DIR_NATIVE</filename></link>
                    is used.
                    </para></listitem>
            </itemizedlist>
            <note>
                You can find more information on how recipe-specific sysroots
                work in the
                "<link linkend='ref-classes-staging'><filename>staging.bbclass</filename></link>"
                section.
            </note>
        </para>
    </section>

    <section id='migration-2.3-path-variable'>
        <title><filename>PATH</filename> Variable</title>

        <para>
            Within the environment used to run build tasks, the environment
            variable <filename>PATH</filename> is now sanitized such that
            the normal native binary paths
            (<filename>/bin</filename>, <filename>/sbin</filename>,
            <filename>/usr/bin</filename> and so forth) are
            removed and a directory containing symbolic links linking only
            to the binaries from the host mentioned in the
            <link linkend='var-HOSTTOOLS'><filename>HOSTTOOLS</filename></link>
            and
            <link linkend='var-HOSTTOOLS_NONFATAL'><filename>HOSTTOOLS_NONFATAL</filename></link>
            variables is added to <filename>PATH</filename>.
        </para>

        <para>
            Consequently, any native binaries provided by the host that you
            need to call needs to be in one of these two variables at
            the configuration level.
        </para>

        <para>
            Alternatively, you can add a native recipe (i.e.
            <filename>-native</filename>) that provides the
            binary to the recipe's
            <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
            value.
            <note>
                <filename>PATH</filename> is not sanitized in the same way
                within <filename>devshell</filename>.
                If it were, you would have difficulty running host tools for
                development and debugging within the shell.
            </note>
        </para>
    </section>

    <section id='migration-2.3-scripts'>
        <title>Changes to Scripts</title>

        <para>
            The following changes to scripts took place:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>oe-find-native-sysroot</filename>:</emphasis>
                    The usage for the
                    <filename>oe-find-native-sysroot</filename> script has
                    changed to the following:
                    <literallayout class='monospaced'>
     $ . oe-find-native-sysroot <replaceable>recipe</replaceable>
                    </literallayout>
                    You must now supply a recipe for
                    <replaceable>recipe</replaceable> as part of the command.
                    Prior to the Yocto Project &DISTRO; release, it was not
                    necessary to provide the script with the command.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>oe-run-native</filename>:</emphasis>
                    The usage for the
                    <filename>oe-run-native</filename> script has changed
                    to the following:
                    <literallayout class='monospaced'>
     $ oe-run-native <replaceable>native_recipe</replaceable> <replaceable>tool</replaceable>
                    </literallayout>
                    You must supply the name of the native recipe and the tool
                    you want to run as part of the command.
                    Prior to the Yocto Project &DISTRO; release, it was not
                    necessary to provide the native recipe with the command.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>cleanup-workdir</filename>:</emphasis>
                    The <filename>cleanup-workdir</filename> script has been
                    removed because the script was found to be deleting
                    files it should not have, which lead to broken build
                    trees.
                    Rather than trying to delete portions of
                    <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
                    and getting it wrong, it is recommended that you
                    delete <filename>TMPDIR</filename> and have it restored
                    from shared state (sstate) on subsequent builds.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>wipe-sysroot</filename>:</emphasis>
                    The <filename>wipe-sysroot</filename> script has been
                    removed as it is no longer needed with recipe-specific
                    sysroots.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.3-functions'>
        <title>Changes to Functions</title>

        <para>
            The previously deprecated
            <filename>bb.data.getVar()</filename>,
            <filename>bb.data.setVar()</filename>, and
            related functions have been removed in favor of
            <filename>d.getVar()</filename>,
            <filename>d.setVar()</filename>, and so forth.
        </para>

        <para>
            You need to fix any references to these old functions.
        </para>
    </section>

    <section id='migration-2.3-bitbake-changes'>
        <title>BitBake Changes</title>

        <para>
            The following changes took place for BitBake:
            <itemizedlist>
                <listitem><para>
                    <emphasis>BitBake's Graphical Dependency Explorer UI Replaced:</emphasis>
                    BitBake's graphical dependency explorer UI
                    <filename>depexp</filename> was replaced by
                    <filename>taskexp</filename> ("Task Explorer"), which
                    provides a graphical way of exploring the
                    <filename>task-depends.dot</filename> file.
                    The data presented by Task Explorer is much more
                    accurate than the data that was presented by
                    <filename>depexp</filename>.
                    Being able to visualize the data is an often requested
                    feature as standard <filename>*.dot</filename> file
                    viewers cannot usual cope with the size of
                    the <filename>task-depends.dot</filename> file.
                    </para></listitem>
                <listitem><para>
                    <emphasis>BitBake "-g" Output Changes:</emphasis>
                    The <filename>package-depends.dot</filename> and
                    <filename>pn-depends.dot</filename> files as previously
                    generated using the <filename>bitbake -g</filename> command
                    have been removed.
                    A <filename>recipe-depends.dot</filename> file
                    is now generated as a collapsed version of
                    <filename>task-depends.dot</filename> instead.
                    </para>

                    <para>The reason for this change is because
                    <filename>package-depends.dot</filename> and
                    <filename>pn-depends.dot</filename> largely date back
                    to a time before task-based execution and do not take
                    into account task-level dependencies between recipes,
                    which could be misleading.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Mirror Variable Splitting Changes:</emphasis>
                    Mirror variables including
                    <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link>,
                    <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>,
                    and
                    <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>
                    can now separate values entirely with spaces.
                    Consequently, you no longer need "\\n".
                    BitBake looks for pairs of values, which simplifies usage.
                    There should be no change required to existing mirror
                    variable values themselves.
                    </para></listitem>
                <listitem><para>
                    <emphasis>The Subversion (SVN) Fetcher Uses an "ssh" Parameter and Not an "rsh" Parameter:</emphasis>
                    The SVN fetcher now takes an "ssh" parameter instead of an
                    "rsh" parameter.
                    This new optional parameter is used when the "protocol"
                    parameter is set to "svn+ssh".
                    You can only use the new parameter to specify the
                    <filename>ssh</filename> program used by SVN.
                    The SVN fetcher passes the new parameter through the
                    <filename>SVN_SSH</filename> environment variable during
                    the
                    <link linkend='ref-tasks-fetch'><filename>do_fetch</filename></link>
                    task.</para>

                    <para>See the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#svn-fetcher'>Subversion (SVN) Fetcher (svn://)</ulink>"
                    section in the BitBake User Manual for additional
                    information.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>BB_SETSCENE_VERIFY_FUNCTION</filename>
                    and <filename>BB_SETSCENE_VERIFY_FUNCTION2</filename>
                    Removed:</emphasis>
                    Because the mechanism they were part of is no longer
                    necessary with recipe-specific sysroots, the
                    <filename>BB_SETSCENE_VERIFY_FUNCTION</filename> and
                    <filename>BB_SETSCENE_VERIFY_FUNCTION2</filename>
                    variables have been removed.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.3-absolute-symlinks'>
        <title>Absolute Symbolic Links</title>

        <para>
            Absolute symbolic links (symlinks) within staged files are no
            longer permitted and now trigger an error.
            Any explicit creation of symlinks can use the
            <filename>lnr</filename> script, which is a replacement for
            <filename>ln -r</filename>.
        </para>

        <para>
            If the build scripts in the software that the recipe is building
            are creating a number of absolute symlinks that need to be
            corrected, you can inherit
            <filename>relative_symlinks</filename> within the recipe to turn
            those absolute symlinks into relative symlinks.
        </para>
    </section>

    <section id='migration-2.3-gplv2-and-gplv3-moves'>
        <title>GPLv2 Versions of GPLv3 Recipes Moved</title>

        <para>
            Older GPLv2 versions of GPLv3 recipes have moved to a
            separate <filename>meta-gplv2</filename> layer.
        </para>

        <para>
            If you use
            <link linkend='var-INCOMPATIBLE_LICENSE'><filename>INCOMPATIBLE_LICENSE</filename></link>
            to exclude GPLv3 or set
            <link linkend='var-PREFERRED_VERSION'><filename>PREFERRED_VERSION</filename></link>
            to substitute a GPLv2 version of a GPLv3 recipe, then you must add
            the <filename>meta-gplv2</filename> layer to your configuration.
            <note>
                You can find <filename>meta-gplv2</filename> layer in the
                OpenEmbedded layer index at
                <ulink url='https://layers.openembedded.org/layerindex/branch/master/layer/meta-gplv2/'></ulink>.
            </note>
        </para>

        <para>
            These relocated GPLv2 recipes do not receive the same level of
            maintenance as other core recipes.
            The recipes do not get security fixes and upstream no longer
            maintains them.
            In fact, the upstream community is actively hostile towards people
            that use the old versions of the recipes.
            Moving these recipes into a separate layer both makes the different
            needs of the recipes clearer and clearly identifies the number of
            these recipes.
            <note>
                The long-term solution might be to move to BSD-licensed
                replacements of the GPLv3 components for those that need to
                exclude GPLv3-licensed components from the target system.
                This solution will be investigated for future Yocto
                Project releases.
            </note>
        </para>
    </section>

    <section id='migration-2.3-package-management-changes'>
        <title>Package Management Changes</title>

        <para>
            The following package management changes took place:
            <itemizedlist>
                <listitem><para>
                    Smart package manager is replaced by DNF package manager.
                    Smart has become unmaintained upstream, is not ported
                    to Python 3.x.
                    Consequently, Smart needed to be replaced.
                    DNF is the only feasible candidate.</para>
                    <para>The change in functionality is that the on-target
                    runtime package management from remote package feeds is
                    now done with a different tool that has a
                    different set of command-line options.
                    If you have scripts that call the
                    tool directly, or use its API, they need to be fixed.</para>
                    <para>For more information, see the
                    <ulink url='http://dnf.readthedocs.io/en/latest/'>DNF Documentation</ulink>.
                    </para></listitem>
                <listitem><para>
                    Rpm 5.x is replaced with Rpm 4.x.
                    This is done for two major reasons:
                    <itemizedlist>
                        <listitem><para>
                            DNF is API-incompatible with Rpm 5.x and porting
                            it and maintaining the port is non-trivial.
                            </para></listitem>
                        <listitem><para>
                            Rpm 5.x itself has limited maintenance upstream,
                            and the Yocto Project is one of the very few
                            remaining users.
                            </para></listitem>
                    </itemizedlist>
                    </para></listitem>
                <listitem><para>
                    Berkeley DB 6.x is removed and Berkeley DB 5.x becomes
                    the default:
                    <itemizedlist>
                        <listitem><para>
                            Version 6.x of Berkeley DB has largely been
                            rejected by the open source community due to its
                            AGPLv3 license.
                            As a result, most mainstream open source projects
                            that require DB are still developed and tested with
                            DB 5.x.
                            </para></listitem>
                        <listitem><para>
                            In OE-core, the only thing that was requiring
                            DB 6.x was Rpm 5.x.
                            Thus, no reason exists to continue carrying DB 6.x
                            in OE-core.
                            </para></listitem>
                    </itemizedlist>
                    </para></listitem>
                <listitem><para>
                    <filename>createrepo</filename> is replaced with
                    <filename>createrepo_c</filename>.</para>
                    <para><filename>createrepo_c</filename> is the current
                    incarnation of the tool that generates remote repository
                    metadata.
                    It is written in C as compared to
                    <filename>createrepo</filename>, which is written in
                    Python.
                    <filename>createrepo_c</filename> is faster and is
                    maintained.
                    </para></listitem>
                <listitem><para>
                    Architecture-independent RPM packages are "noarch"
                    instead of "all".</para>
                    <para>This change was made because too many places in
                    DNF/RPM4 stack already make that assumption.
                    Only the filenames and the architecture tag has changed.
                    Nothing else has changed in OE-core system, particularly
                    in the
                    <link linkend='ref-classes-allarch'><filename>allarch.bbclass</filename></link>
                    class.
                    </para></listitem>
                <listitem><para>
                    Signing of remote package feeds using
                    <filename>PACKAGE_FEED_SIGN</filename>
                    is not currently supported.
                    This issue will be fully addressed in a future
                    Yocto Project release.
                    See <ulink url='https://bugzilla.yoctoproject.org/show_bug.cgi?id=11209'>defect 11209</ulink>
                    for more information on a solution to package feed
                    signing with RPM in the Yocto Project 2.3 release.
                    </para></listitem>
                <listitem><para>
                    OPKG now uses the libsolv backend for resolving package
                    dependencies by default.
                    This is vastly superior to OPKG's internal ad-hoc solver
                    that was previously used.
                    This change does have a small impact on disk (around
                    500 KB) and memory footprint.
                    <note>
                        For further details on this change, see the
                        <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?
id=f4d4f99cfbc2396e49c1613a7d237b9e57f06f81'>commit message</ulink>.
                    </note>
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.3-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>linux-yocto 4.8:</filename></emphasis>
                    Version 4.8 has been removed.
                    Versions 4.1 (LTSI), 4.4 (LTS), 4.9 (LTS/LTSI) and 4.10
                    are now present.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-smartpm:</filename></emphasis>
                    Functionally replaced by <filename>dnf</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>createrepo:</filename></emphasis>
                    Replaced by the <filename>createrepo-c</filename> recipe.
                    </para></listitem>
                 <listitem><para>
                    <emphasis><filename>rpmresolve:</filename></emphasis>
                    No longer needed with the move to RPM 4 as RPM itself is
                    used instead.
                    </para></listitem>
                 <listitem><para>
                    <emphasis><filename>gstreamer:</filename></emphasis>
                    Removed the GStreamer Git version recipes as they have
                    been stale.
                    <filename>1.10.</filename><replaceable>x</replaceable>
                    recipes are still present.
                    </para></listitem>
                 <listitem><para>
                    <emphasis><filename>alsa-conf-base:</filename></emphasis>
                    Merged into <filename>alsa-conf</filename> since
                    <filename>libasound</filename> depended on both.
                    Essentially, no way existed to install only one of these.
                    </para></listitem>
                 <listitem><para>
                    <emphasis><filename>tremor:</filename></emphasis>
                    Moved to <filename>meta-multimedia</filename>.
                    Fixed-integer Vorbis decoding is not
                    needed by current hardware.
                    Thus, GStreamer's ivorbis plugin has been disabled
                    by default eliminating the need for the
                    <filename>tremor</filename> recipe in
                    <link linkend='oe-core'>OE-Core</link>.
                    </para></listitem>
                 <listitem><para>
                    <emphasis><filename>gummiboot:</filename></emphasis>
                    Replaced by <filename>systemd-boot</filename>.
                    </para></listitem>
           </itemizedlist>
        </para>
    </section>

    <section id='migration-2.3-wic-changes'>
        <title>Wic Changes</title>

        <para>
            The following changes have been made to Wic:
            <note>
                For more information on Wic, see the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-partitioned-images-using-wic'>Creating Partitioned Images Using Wic</ulink>"
                section in the Yocto Project Development Tasks Manual.
            </note>
            <itemizedlist>
                <listitem><para>
                    <emphasis>Default Output Directory Changed:</emphasis>
                    Wic's default output directory is now the current directory
                    by default instead of the unusual
                    <filename>/var/tmp/wic</filename>.</para>

                    <para>The "-o" and "--outdir" options remain unchanged
                    and are used to specify your preferred output directory
                    if you do not want to use the default directory.
                    </para></listitem>
                <listitem><para>
                    <emphasis>fsimage Plug-in Removed:</emphasis>
                    The Wic fsimage plugin has been removed as it duplicates
                    functionality of the rawcopy plugin.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.3-qa-changes'>
        <title>QA Changes</title>

        <para>
            The following QA checks have changed:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>unsafe-references-in-binaries</filename>:</emphasis>
                    The <filename>unsafe-references-in-binaries</filename>
                    QA check, which was disabled by default, has now been
                    removed.
                    This check was intended to detect binaries in
                    <filename>/bin</filename> that link to libraries in
                    <filename>/usr/lib</filename> and have the case where
                    the user has <filename>/usr</filename> on a separate
                    filesystem to <filename>/</filename>.</para>

                    <para>The removed QA check was buggy.
                    Additionally, <filename>/usr</filename> residing on a
                    separate partition from <filename>/</filename> is now
                    a rare configuration.
                    Consequently,
                    <filename>unsafe-references-in-binaries</filename> was
                    removed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>file-rdeps</filename>:</emphasis>
                    The <filename>file-rdeps</filename> QA check is now an
                    error by default instead of a warning.
                    Because it is an error instead of a warning, you need to
                    address missing runtime dependencies.</para>

                    <para>For additional information, see the
                    <link linkend='ref-classes-insane'><filename>insane</filename></link>
                    class and the
                    "<link linkend='qa-errors-and-warnings'>Errors and Warnings</link>"
                    section.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.3-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following miscellaneous changes have occurred:
            <itemizedlist>
                <listitem><para>
                    In this release, a number of recipes have been changed to
                    ignore the <filename>largefile</filename>
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
                    item, enabling large file support unconditionally.
                    This feature has always been enabled by default.
                    Disabling the feature has not been widely tested.
                    <note>
                        Future releases of the Yocto Project will remove
                        entirely the ability to disable the
                        <filename>largefile</filename> feature,
                        which would make it unconditionally enabled everywhere.
                    </note>
                    </para></listitem>
                <listitem><para>
                    If the
                    <link linkend='var-DISTRO_VERSION'><filename>DISTRO_VERSION</filename></link>
                    value contains the value of the
                    <link linkend='var-DATE'><filename>DATE</filename></link>
                    variable, which is the default between Poky releases,
                    the <filename>DATE</filename> value is explicitly excluded
                    from <filename>/etc/issue</filename> and
                    <filename>/etc/issue.net</filename>, which is displayed at
                    the login prompt, in order to avoid conflicts with
                    Multilib enabled.
                    Regardless, the <filename>DATE</filename> value is
                    inaccurate if the <filename>base-files</filename>
                    recipe is restored from shared state (sstate) rather
                    than rebuilt.</para>

                    <para>If you need the build date recorded in
                    <filename>/etc/issue*</filename> or anywhere else in your
                    image, a better method is to define a post-processing
                    function to do it and have the function called from
                    <link linkend='var-ROOTFS_POSTPROCESS_COMMAND'><filename>ROOTFS_POSTPROCESS_COMMAND</filename></link>.
                    Doing so ensures the value is always up-to-date with the
                    created image.
                    </para></listitem>
                <listitem><para>
                    Dropbear's <filename>init</filename> script now disables
                    DSA host keys by default.
                    This change is in line with the systemd service
                    file, which supports RSA keys only, and with recent
                    versions of OpenSSH, which deprecates DSA host keys.
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
                    class now correctly uses tabs as separators between all
                    columns in <filename>installed-package-sizes.txt</filename>
                    in order to aid import into other tools.
                    </para></listitem>
                <listitem><para>
                    The <filename>USE_LDCONFIG</filename> variable has been
                    replaced with the "ldconfig"
                    <filename>DISTRO_FEATURES</filename> feature.
                    Distributions that previously set:
                    <literallayout class='monospaced'>
     USE_LDCONFIG = "0"
                    </literallayout>
                    should now instead use the following:
                    <literallayout class='monospaced'>
     DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " ldconfig"
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    The default value of
                    <link linkend='var-COPYLEFT_LICENSE_INCLUDE'><filename>COPYLEFT_LICENSE_INCLUDE</filename></link>
                    now includes all versions of AGPL licenses in addition
                    to GPL and LGPL.
                    <note>
                        The default list is not intended to be guaranteed
                        as a complete safe list.
                        You should seek legal advice based on what you are
                        distributing if you are unsure.
                    </note>
                    </para></listitem>
                <listitem><para>
                    Kernel module packages are now suffixed with the kernel
                    version in order to allow module packages from multiple
                    kernel versions to co-exist on a target system.
                    If you wish to return to the previous naming scheme
                    that does not include the version suffix, use the
                    following:
                    <literallayout class='monospaced'>
     KERNEL_MODULE_PACKAGE_SUFFIX to ""
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    Removal of <filename>libtool</filename>
                    <filename>*.la</filename> files is now enabled by default.
                    The <filename>*.la</filename> files are not actually
                    needed on Linux and relocating them is an unnecessary
                    burden.</para>

                    <para>If you need to preserve these
                    <filename>.la</filename> files (e.g. in a custom
                    distribution), you must change
                    <link linkend='var-INHERIT_DISTRO'><filename>INHERIT_DISTRO</filename></link>
                    such that "remove-libtool" is not included in the value.
                    </para></listitem>
                <listitem><para>
                    Extensible SDKs built for GCC 5+ now refuse to install on a
                    distribution where the host GCC version is 4.8 or 4.9.
                    This change resulted from the fact that the installation
                    is known to fail due to the way the
                    <filename>uninative</filename> shared state (sstate)
                    package is built.
                    See the
                    <link linkend='ref-classes-uninative'><filename>uninative</filename></link>
                    class for additional information.
                    </para></listitem>
                <listitem><para>
                    All native and nativesdk recipes now use a separate
                    <filename>DISTRO_FEATURES</filename> value instead of
                    sharing the value used by recipes for the target, in order
                    to avoid unnecessary rebuilds.</para>

                    <para>The <filename>DISTRO_FEATURES</filename> for
                    <filename>native</filename> recipes is
                    <link linkend='var-DISTRO_FEATURES_NATIVE'><filename>DISTRO_FEATURES_NATIVE</filename></link>
                    added to an intersection of
                    <filename>DISTRO_FEATURES</filename> and
                    <link linkend='var-DISTRO_FEATURES_FILTER_NATIVE'><filename>DISTRO_FEATURES_FILTER_NATIVE</filename></link>.
                    </para>

                    <para>For nativesdk recipes, the
                    corresponding variables are
                    <link linkend='var-DISTRO_FEATURES_NATIVESDK'><filename>DISTRO_FEATURES_NATIVESDK</filename></link>
                    and
                    <link linkend='var-DISTRO_FEATURES_FILTER_NATIVESDK'><filename>DISTRO_FEATURES_FILTER_NATIVESDK</filename></link>.
                    </para></listitem>
                <listitem><para>
                    The <filename>FILESDIR</filename>
                    variable, which was previously deprecated and rarely used,
                    has now been removed.
                    You should change any recipes that set
                    <filename>FILESDIR</filename> to set
                    <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
                    instead.
                    </para></listitem>
                <listitem><para>
                    The <filename>MULTIMACH_HOST_SYS</filename>
                    variable has been removed as it is no longer needed
                    with recipe-specific sysroots.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.4-release'>
    <title>Moving to the Yocto Project 2.4 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.4 Release from the prior release.
    </para>

    <section id='migration-2.4-memory-resident-mode'>
        <title>Memory Resident Mode</title>

        <para>
            A persistent mode is now available in BitBake's default operation,
            replacing its previous "memory resident mode" (i.e.
            <filename>oe-init-build-env-memres</filename>).
            Now you only need to set
            <link linkend='var-BB_SERVER_TIMEOUT'><filename>BB_SERVER_TIMEOUT</filename></link>
            to a timeout (in seconds) and BitBake's server stays resident for
            that amount of time between invocations.
            The <filename>oe-init-build-env-memres</filename> script has been
            removed since a separate environment setup script is no longer
            needed.
        </para>
    </section>

    <section id='migration-2.4-packaging-changes'>
        <title>Packaging Changes</title>

        <para>
            This section provides information about packaging changes that have
            occurred:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>python3</filename> Changes:</emphasis>
                    <itemizedlist>
                        <listitem><para>
                            The main "python3" package now brings in all of the
                            standard Python 3 distribution rather than a subset.
                            This behavior matches what is expected based on
                            traditional Linux distributions.
                            If you wish to install a subset of Python 3, specify
                            <filename>python-core</filename> plus one or more of
                            the individual packages that are still produced.
                            </para></listitem>
                        <listitem><para>
                            <emphasis><filename>python3</filename>:</emphasis>
                            The <filename>bz2.py</filename>,
                            <filename>lzma.py</filename>, and
                            <filename>_compression.py</filename> scripts have
                            been moved from the
                            <filename>python3-misc</filename> package to
                            the <filename>python3-compression</filename> package.
                            </para></listitem>
                    </itemizedlist>
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>binutils</filename>:</emphasis>
                    The <filename>libbfd</filename> library is now packaged in
                    a separate "libbfd" package.
                    This packaging saves space when certain tools
                    (e.g. <filename>perf</filename>) are installed.
                    In such cases, the tools only need
                    <filename>libbfd</filename> rather than all the packages in
                    <filename>binutils</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>util-linux</filename> Changes:</emphasis>
                    <itemizedlist>
                        <listitem><para>
                            The <filename>su</filename> program is now packaged
                            in a separate "util-linux-su" package, which is only
                            built when "pam" is listed in the
                            <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
                            variable.
                            <filename>util-linux</filename> should not be
                            installed unless it is needed because
                            <filename>su</filename> is normally provided through
                            the shadow file format.
                            The main <filename>util-linux</filename> package has
                            runtime dependencies (i.e.
                            <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>)
                            on the <filename>util-linux-su</filename> package
                            when "pam" is in
                            <filename>DISTRO_FEATURES</filename>.
                            </para></listitem>
                        <listitem><para>
                            The <filename>switch_root</filename> program is now
                            packaged in a separate "util-linux-switch-root"
                            package for small initramfs images that do not need
                            the whole <filename>util-linux</filename> package or
                            the busybox binary, which are both much larger than
                            <filename>switch_root</filename>.
                            The main <filename>util-linux</filename> package has
                            a recommended runtime dependency (i.e.
                            <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>)
                            on the <filename>util-linux-switch-root</filename> package.
                            </para></listitem>
                        <listitem><para>
                            The <filename>ionice</filename> program is now
                            packaged in a separate "util-linux-ionice" package.
                            The main <filename>util-linux</filename> package has
                            a recommended runtime dependency (i.e.
                            <filename>RRECOMMENDS</filename>)
                            on the <filename>util-linux-ionice</filename> package.
                            </para></listitem>
                    </itemizedlist>
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>initscripts</filename>:</emphasis>
                    The <filename>sushell</filename> program is now packaged in
                    a separate "initscripts-sushell" package.
                    This packaging change allows systems to pull
                    <filename>sushell</filename> in when
                    <filename>selinux</filename> is enabled.
                    The change also eliminates needing to pull in the entire
                    <filename>initscripts</filename> package.
                    The main <filename>initscripts</filename> package has a
                    runtime dependency (i.e. <filename>RDEPENDS</filename>)
                    on the <filename>sushell</filename> package when
                    "selinux" is in <filename>DISTRO_FEATURES</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>glib-2.0</filename>:</emphasis>
                    The <filename>glib-2.0</filename> package now has a
                    recommended runtime dependency (i.e.
                    <filename>RRECOMMENDS</filename>) on the
                    <filename>shared-mime-info</filename> package, since large
                    portions of GIO are not useful without the MIME database.
                    You can remove the dependency by using the
                    <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
                    variable if <filename>shared-mime-info</filename> is too
                    large and is not required.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Go Standard Runtime:</emphasis>
                    The Go standard runtime has been split out from the main
                    <filename>go</filename> recipe into a separate
                    <filename>go-runtime</filename> recipe.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.4-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>acpitests</filename>:</emphasis>
                    This recipe is not maintained.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>autogen-native</filename>:</emphasis>
                    No longer required by Grub, oe-core, or meta-oe.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>bdwgc</filename>:</emphasis>
                    Nothing in OpenEmbedded-Core requires this recipe.
                    It has moved to meta-oe.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>byacc</filename>:</emphasis>
                    This recipe was only needed by rpm 5.x and has moved to
                    meta-oe.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>gcc (5.4)</filename>:</emphasis>
                    The 5.4 series dropped the recipe in favor of 6.3 / 7.2.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>gnome-common</filename>:</emphasis>
                    Deprecated upstream and no longer needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>go-bootstrap-native</filename>:</emphasis>
                    Go 1.9 does its own bootstrapping so this recipe has been
                    removed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>guile</filename>:</emphasis>
                    This recipe was only needed by
                    <filename>autogen-native</filename> and
                    <filename>remake</filename>.
                    The recipe is no longer needed by either of these programs.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libclass-isa-perl</filename>:</emphasis>
                    This recipe was previously needed for LSB 4, no longer
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libdumpvalue-perl</filename>:</emphasis>
                    This recipe was previously needed for LSB 4, no longer
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libenv-perl</filename>:</emphasis>
                    This recipe was previously needed for LSB 4, no longer
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libfile-checktree-perl</filename>:</emphasis>
                    This recipe was previously needed for LSB 4, no longer
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libi18n-collate-perl</filename>:</emphasis>
                    This recipe was previously needed for LSB 4, no longer
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libiconv</filename>:</emphasis>
                    This recipe was only needed for <filename>uclibc</filename>,
                    which was removed in the previous release.
                    <filename>glibc</filename> and <filename>musl</filename>
                    have their own implementations.
                    <filename>meta-mingw</filename> still needs
                    <filename>libiconv</filename>, so it has
                    been moved to <filename>meta-mingw</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libpng12</filename>:</emphasis>
                    This recipe was previously needed for LSB. The current
                    <filename>libpng</filename> is 1.6.x.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libpod-plainer-perl</filename>:</emphasis>
                    This recipe was previously needed for LSB 4, no longer
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>linux-yocto (4.1)</filename>:</emphasis>
                    This recipe was removed in favor of 4.4, 4.9, 4.10 and 4.12.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>mailx</filename>:</emphasis>
                    This recipe was previously only needed for LSB
                    compatibility, and upstream is defunct.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>mesa (git version only)</filename>:</emphasis>
                    The git version recipe was stale with respect to the release
                    version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>ofono (git version only)</filename>:</emphasis>
                    The git version recipe was stale with respect to the release
                    version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>portmap</filename>:</emphasis>
                    This recipe is obsolete and is superseded by
                    <filename>rpcbind</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python3-pygpgme</filename>:</emphasis>
                    This recipe is old and unmaintained. It was previously
                    required by <filename>dnf</filename>, which has switched
                    to official <filename>gpgme</filename> Python bindings.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-async</filename>:</emphasis>
                    This recipe has been removed in favor of the Python 3
                    version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-gitdb</filename>:</emphasis>
                    This recipe has been removed in favor of the Python 3
                    version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-git</filename>:</emphasis>
                    This recipe was removed in favor of the Python 3
                    version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-mako</filename>:</emphasis>
                    This recipe was removed in favor of the Python 3
                    version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-pexpect</filename>:</emphasis>
                    This recipe was removed in favor of the Python 3 version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-ptyprocess</filename>:</emphasis>
                    This recipe was removed in favor of Python the 3 version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-pycurl</filename>:</emphasis>
                    Nothing is using this recipe in OpenEmbedded-Core
                    (i.e. <filename>meta-oe</filename>).
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-six</filename>:</emphasis>
                    This recipe was removed in favor of the Python 3 version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-smmap</filename>:</emphasis>
                    This recipe was removed in favor of the Python 3 version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>remake</filename>:</emphasis>
                    Using <filename>remake</filename> as the provider of
                    <filename>virtual/make</filename> is broken.
                    Consequently, this recipe is not needed in OpenEmbedded-Core.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.4-kernel-device-tree-move'>
        <title>Kernel Device Tree Move</title>

        <para>
            Kernel Device Tree support is now easier to enable in a kernel
            recipe.
            The Device Tree code has moved to a
            <link linkend='ref-classes-kernel-devicetree'><filename>kernel-devicetree</filename></link>
            class.
            Functionality is automatically enabled for any recipe that inherits
            the
            <link linkend='ref-classes-kernel'><filename>kernel</filename></link>
            class and sets the
            <link linkend='var-KERNEL_DEVICETREE'><filename>KERNEL_DEVICETREE</filename></link>
            variable.
            The previous mechanism for doing this,
            <filename>meta/recipes-kernel/linux/linux-dtb.inc</filename>,
            is still available to avoid breakage, but triggers a
            deprecation warning.
            Future releases of the Yocto Project will remove
            <filename>meta/recipes-kernel/linux/linux-dtb.inc</filename>.
            It is advisable to remove any <filename>require</filename>
            statements that request
            <filename>meta/recipes-kernel/linux/linux-dtb.inc</filename>
            from any custom kernel recipes you might have.
            This will avoid breakage in post 2.4 releases.
        </para>
    </section>

    <section id='migration-2.4-package-qa-changes'>
        <title>Package QA Changes</title>

        <para>
            The following package QA changes took place:
            <itemizedlist>
                <listitem><para>
                    The "unsafe-references-in-scripts" QA check has been
                    removed.
                    </para></listitem>
                <listitem><para>
                    If you refer to <filename>${COREBASE}/LICENSE</filename>
                    within
                    <link linkend='var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></link>
                    you receive a warning because this file is a description of
                    the license for OE-Core.
                    Use <filename>${COMMON_LICENSE_DIR}/MIT</filename>
                    if your recipe is MIT-licensed and you cannot use the
                    preferred method of referring to a file within the source
                    tree.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.4-readme-changes'>
        <title><filename>README</filename> File Changes</title>

        <para>
            The following are changes to <filename>README</filename> files:
            <itemizedlist>
                <listitem><para>
                    The main Poky <filename>README</filename> file has been
                    moved to the <filename>meta-poky</filename> layer and
                    has been renamed <filename>README.poky</filename>.
                    A symlink has been created so that references to the old
                    location work.
                    </para></listitem>
                <listitem><para>
                    The <filename>README.hardware</filename> file has been moved
                    to <filename>meta-yocto-bsp</filename>.
                    A symlink has been created so that references to the old
                    location work.
                    </para></listitem>
                <listitem><para>
                    A <filename>README.qemu</filename> file has been created
                    with coverage of the <filename>qemu*</filename> machines.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.4-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following are additional changes:
            <itemizedlist>
                <listitem><para>
                    The <filename>ROOTFS_PKGMANAGE_BOOTSTRAP</filename>
                    variable and any references to it have been removed.
                    You should remove this variable from any custom recipes.
                    </para></listitem>
                <listitem><para>
                    The <filename>meta-yocto</filename> directory has been
                    removed.
                    <note>
                        In the Yocto Project 2.1 release
                        <filename>meta-yocto</filename> was renamed to
                        <filename>meta-poky</filename> and the
                        <filename>meta-yocto</filename> subdirectory remained
                        to avoid breaking existing configurations.
                    </note>
                    </para></listitem>
                <listitem><para>
                    The <filename>maintainers.inc</filename> file, which tracks
                    maintainers by listing a primary person responsible for each
                    recipe in OE-Core, has been moved from
                    <filename>meta-poky</filename> to OE-Core (i.e. from
                    <filename>meta-poky/conf/distro/include</filename> to
                    <filename>meta/conf/distro/include</filename>).
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
                    class now makes a single commit per build rather than one
                    commit per subdirectory in the repository.
                    This behavior assumes the commits are enabled with
                    <link linkend='var-BUILDHISTORY_COMMIT'><filename>BUILDHISTORY_COMMIT</filename></link>
                    = "1", which is typical.
                    Previously, the <filename>buildhistory</filename> class made
                    one commit per subdirectory in the repository in order to
                    make it easier to see the changes for a particular
                    subdirectory.
                    To view a particular change, specify that subdirectory as
                    the last parameter on the <filename>git show</filename>
                    or <filename>git diff</filename> commands.
                    </para></listitem>
                <listitem><para>
                    The <filename>x86-base.inc</filename> file, which is
                    included by all x86-based machine configurations, now sets
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    using <filename>?=</filename> to "live" rather than
                    appending with <filename>+=</filename>.
                    This change makes the default easier to override.
                    </para></listitem>
                <listitem><para>
                    BitBake fires multiple "BuildStarted" events when
                    multiconfig is enabled (one per configuration).
                    For more information, see the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#events'>Events</ulink>"
                    section in the BitBake User Manual.
                    </para></listitem>
                <listitem><para>
                    By default, the <filename>security_flags.inc</filename> file
                    sets a
                    <link linkend='var-GCCPIE'><filename>GCCPIE</filename></link>
                    variable with an option to enable Position Independent
                    Executables (PIE) within <filename>gcc</filename>.
                    Enabling PIE in the GNU C Compiler (GCC), makes Return
                    Oriented Programming (ROP) attacks much more difficult to
                    execute.
                    </para></listitem>
                <listitem><para>
                    OE-Core now provides a
                    <filename>bitbake-layers</filename> plugin that implements
                    a "create-layer" subcommand.
                    The implementation of this subcommand has resulted in the
                    <filename>yocto-layer</filename> script being deprecated and
                    will likely be removed in the next Yocto Project release.
                    </para></listitem>
                <listitem><para>
                      The <filename>vmdk</filename>, <filename>vdi</filename>,
                      and <filename>qcow2</filename> image file types are now
                      used in conjunction with the "wic" image type through
                      <filename>CONVERSION_CMD</filename>.
                      Consequently, the equivalent image types are now
                      <filename>wic.vmdk</filename>, <filename>wic.vdi</filename>,
                      and <filename>wic.qcow2</filename>, respectively.
                    </para></listitem>
                <listitem><para>
                    <filename>do_image_&lt;type&gt;[depends]</filename> has
                    replaced <filename>IMAGE_DEPENDS_&lt;type&gt;</filename>.
                    If you have your own classes that implement custom image
                    types, then you need to update them.
                    </para></listitem>
                <listitem><para>
                    OpenSSL 1.1 has been introduced.
                    However, the default is still 1.0.x through the
                    <link linkend='var-PREFERRED_VERSION'><filename>PREFERRED_VERSION</filename></link>
                    variable.
                    This preference is set is due to the remaining compatibility
                    issues with other software.
                    The
                    <link linkend='var-PROVIDES'><filename>PROVIDES</filename></link>
                    variable  in the openssl 1.0 recipe now includes "openssl10"
                    as a marker that can be used in
                    <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
                    within recipes that build software that still depend on
                    OpenSSL 1.0.
                    </para></listitem>
                <listitem><para>
                    To ensure consistent behavior, BitBake's "-r" and "-R"
                    options (i.e. prefile and postfile), which are used to
                    read or post-read additional configuration files from the
                    command line, now only affect the current BitBake command.
                    Before these BitBake changes, these options would "stick"
                    for future executions.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.5-release'>
    <title>Moving to the Yocto Project 2.5 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.5 Release from the prior release.
    </para>

    <section id='migration-2.5-packaging-changes'>
        <title>Packaging Changes</title>

        <para>
            This section provides information about packaging changes that have
            occurred:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>bind-libs</filename>:</emphasis>
                    The libraries packaged by the bind recipe are in a
                    separate <filename>bind-libs</filename> package.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libfm-gtk</filename>:</emphasis>
                    The <filename>libfm</filename> GTK+ bindings are split into
                    a separate <filename>libfm-gtk</filename> package.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>flex-libfl</filename>:</emphasis>
                    The flex recipe splits out libfl into a separate
                    <filename>flex-libfl</filename> package to avoid too many
                    dependencies being pulled in where only the library is
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>grub-efi</filename>:</emphasis>
                    The <filename>grub-efi</filename> configuration is split
                    into a separate <filename>grub-bootconf</filename>
                    recipe.
                    However, the dependency relationship from
                    <filename>grub-efi</filename> is through a
                    virtual/grub-bootconf provider making it possible to have
                    your own recipe provide the dependency.
                    Alternatively, you can use a BitBake append file to bring
                    the configuration back into the
                    <filename>grub-efi</filename> recipe.
                    </para></listitem>
                <listitem><para>
                    <emphasis>armv7a Legacy Package Feed Support:</emphasis>
                    Legacy support is removed for transitioning from
                    <filename>armv7a</filename> to
                    <filename>armv7a-vfp-neon</filename> in package feeds,
                    which was previously enabled by setting
                    <filename>PKGARCHCOMPAT_ARMV7A</filename>.
                    This transition occurred in 2011 and active package feeds
                    should by now be updated to the new naming.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.5-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>gcc</filename>:</emphasis>
                    The version 6.4 recipes are replaced by 7.x.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>gst-player</filename>:</emphasis>
                    Renamed to <filename>gst-examples</filename> as per
                    upstream.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>hostap-utils</filename>:</emphasis>
                    This software package is obsolete.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>latencytop</filename>:</emphasis>
                    This recipe is no longer maintained upstream.
                    The last release was in 2009.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libpfm4</filename>:</emphasis>
                    The only file that requires this recipe is
                    <filename>oprofile</filename>, which has been removed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>linux-yocto</filename>:</emphasis>
                    The version 4.4, 4.9, and 4.10 recipes have been removed.
                    Versions 4.12, 4.14, and 4.15 remain.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>man</filename>:</emphasis>
                    This recipe has been replaced by modern
                    <filename>man-db</filename>
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>mkelfimage</filename>:</emphasis>
                    This tool has been removed in the upstream coreboot project,
                    and is no longer needed with the removal of the ELF image
                    type.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>nativesdk-postinst-intercept</filename>:</emphasis>
                    This recipe is not maintained.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>neon</filename>:</emphasis>
                    This software package is no longer maintained upstream and
                    is no longer needed by anything in OpenEmbedded-Core.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>oprofile</filename>:</emphasis>
                    The functionality of this recipe is replaced by
                    <filename>perf</filename> and keeping compatibility on
                    an ongoing basis with <filename>musl</filename> is
                    difficult.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>pax</filename>:</emphasis>
                    This software package is obsolete.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>stat</filename>:</emphasis>
                    This software package is not maintained upstream.
                    <filename>coreutils</filename> provides a modern stat binary.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>zisofs-tools-native</filename>:</emphasis>
                    This recipe is no longer needed because the compressed
                    ISO image feature has been removed.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.5-scripts-and-tools-changes'>
        <title>Scripts and Tools Changes</title>

        <para>
            The following are changes to scripts and tools:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>yocto-bsp</filename>,
                    <filename>yocto-kernel</filename>, and
                    <filename>yocto-layer</filename></emphasis>:
                    The <filename>yocto-bsp</filename>,
                    <filename>yocto-kernel</filename>, and
                    <filename>yocto-layer</filename> scripts previously shipped
                    with poky but not in OpenEmbedded-Core have been removed.
                    These scripts are not maintained and are outdated.
                    In many cases, they are also limited in scope.
                    The <filename>bitbake-layers create-layer</filename> command
                    is a direct replacement for <filename>yocto-layer</filename>.
                    See the documentation to create a BSP or kernel recipe in
                    the
                    "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-kernel-recipe-example'>BSP Kernel Recipe Example</ulink>"
                     section.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>devtool finish</filename>:</emphasis>
                    <filename>devtool finish</filename> now exits with an error
                    if there are uncommitted changes or a rebase/am in progress
                    in the recipe's source repository.
                    If this error occurs, there might be uncommitted changes
                    that will not be included in updates to the patches applied
                    by the recipe.
                    A -f/--force option is provided for situations that the
                    uncommitted changes are inconsequential and you want to
                    proceed regardless.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>scripts/oe-setup-rpmrepo</filename> script:</emphasis>
                    The functionality of
                    <filename>scripts/oe-setup-rpmrepo</filename> is replaced by
                    <filename>bitbake package-index</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>scripts/test-dependencies.sh</filename> script:</emphasis>
                    The script is largely made obsolete by the
                    recipe-specific sysroots functionality introduced in the
                    previous release.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.5-bitbake-changes'>
        <title>BitBake Changes</title>

        <para>
            The following are BitBake changes:
            <itemizedlist>
                <listitem><para>
                    The <filename>--runall</filename> option has changed.
                    There are two different behaviors people might want:
                    <itemizedlist>
                        <listitem><para>
                            <emphasis>Behavior A:</emphasis>
                            For a given target (or set of targets) look through
                            the task graph and run task X only if it is present
                            and will be built.
                            </para></listitem>
                        <listitem><para>
                            <emphasis>Behavior B:</emphasis>
                            For a given target (or set of targets) look through
                            the task graph and run task X if any recipe in the
                            taskgraph has such a target, even if it is not in
                            the original task graph.
                            </para></listitem>
                    </itemizedlist>
                    The <filename>--runall</filename> option now performs
                    "Behavior B".
                    Previously <filename>--runall</filename> behaved like
                    "Behavior A".
                    A <filename>--runonly</filename> option has been added to
                    retain the ability to perform "Behavior A".
                    </para></listitem>
                <listitem><para>
                    Several explicit "run this task for all recipes in the
                    dependency tree" tasks have been removed (e.g.
                    <filename>fetchall</filename>,
                    <filename>checkuriall</filename>, and the
                    <filename>*all</filename> tasks provided by the
                    <filename>distrodata</filename> and
                    <filename>archiver</filename> classes).
                    There is a BitBake option to complete this for any arbitrary
                    task. For example:
                    <literallayout class='monospaced'>
     bitbake &lt;target&gt; -c fetchall
                    </literallayout>
                    should now be replaced with:
                    <literallayout class='monospaced'>
     bitbake &lt;target&gt; --runall=fetch
                    </literallayout>
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.5-python-and-python3-changes'>
        <title>Python and Python 3 Changes</title>

        <para>
            The following are auto-packaging changes to Python and Python 3:
        </para>
        <para>
            The script-managed <filename>python-*-manifest.inc</filename> files
            that were previously used to generate Python and Python 3
            packages have been replaced with a JSON-based file that is
            easier to read and maintain.
            A new task is available for maintainers of the Python recipes to
            update the JSON file when upgrading to new Python versions.
            You can now edit the file directly instead of having to edit a
            script and run it to update the file.
        </para>
        <para>
            One particular change to note is that the Python recipes no longer
            have build-time provides for their packages.
            This assumes <filename>python-foo</filename> is one of the packages
            provided by the Python recipe.
            You can no longer run <filename>bitbake python-foo</filename> or
            have a <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink> on
            <filename>python-foo</filename>, but doing either of the following
            causes the package to work as expected:
            <literallayout class='monospaced'>
     IMAGE_INSTALL_append = " python-foo"
            </literallayout>
            or
            <literallayout class='monospaced'>
     RDEPENDS_${PN} = "python-foo"
            </literallayout>
            The earlier build-time provides behavior was a quirk of the way the
            Python manifest file was created.
            For more information on this change please see
            <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=8d94b9db221d1def42f091b991903faa2d1651ce'>this commit</ulink>.
        </para>
    </section>

    <section id='migration-2.5-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following are additional changes:
            <itemizedlist>
                <listitem><para>
                    The <filename>kernel</filename> class supports building
                    packages for multiple kernels.
                    If your kernel recipe or <filename>.bbappend</filename> file
                    mentions packaging at all, you should replace references to
                    the kernel in package names with
                    <filename>${KERNEL_PACKAGE_NAME}</filename>.
                    For example, if you disable automatic installation of the
                    kernel image using
                    <filename>RDEPENDS_kernel-base = ""</filename> you can avoid
                    warnings using
                    <filename>RDEPENDS_${KERNEL_PACKAGE_NAME}-base = ""</filename>
                    instead.
                    </para></listitem>
                <listitem><para>
                    The <filename>buildhistory</filename> class commits changes
                    to the repository by default so you no longer need to set
                    <filename>BUILDHISTORY_COMMIT = "1"</filename>.
                    If you want to disable commits you need to set
                    <filename>BUILDHISTORY_COMMIT = "0"</filename> in your
                    configuration.
                    </para></listitem>
                <listitem><para>
                    The <filename>beaglebone</filename> reference machine has
                    been renamed to <filename>beaglebone-yocto</filename>.
                    The <filename>beaglebone-yocto</filename> BSP is a reference
                    implementation using only mainline components available in
                    OpenEmbedded-Core and <filename>meta-yocto-bsp</filename>,
                    whereas Texas Instruments maintains a full-featured BSP in
                    the <filename>meta-ti</filename> layer.
                    This rename avoids the previous name clash that existed
                    between the two BSPs.
                    </para></listitem>
                <listitem><para>
                    The <filename>update-alternatives</filename> class no longer
                    works with SysV <filename>init</filename> scripts because
                    this usage has been problematic.
                    Also, the <filename>sysklogd</filename> recipe no longer
                    uses <filename>update-alternatives</filename> because it is
                    incompatible with other implementations.
                    </para></listitem>
                <listitem><para>
                    By default, the
                    <link linkend='ref-classes-cmake'><filename>cmake</filename></link>
                    class uses <filename>ninja</filename> instead of
                    <filename>make</filename> for building.
                    This improves build performance.
                    If a recipe is broken with <filename>ninja</filename>, then
                    the recipe can set
                    <filename>OECMAKE_GENERATOR = "Unix Makefiles"</filename>
                    to change back to <filename>make</filename>.
                    </para></listitem>
                <listitem><para>
                    The previously deprecated <filename>base_*</filename>
                    functions have been removed in favor of their replacements
                    in <filename>meta/lib/oe</filename> and
                    <filename>bitbake/lib/bb</filename>.
                    These are typically used from recipes and classes.
                    Any references to the old functions must be updated.
                    The following table shows the removed functions and their
                    replacements:

                    <literallayout class='monospaced'>
     <emphasis>Removed</emphasis>                                 <emphasis>Replacement</emphasis>
     ============================            ============================
     base_path_join()                        oe.path.join()
     base_path_relative()                    oe.path.relative()
     base_path_out()                         oe.path.format_display()
     base_read_file()                        oe.utils.read_file()
     base_ifelse()                           oe.utils.ifelse()
     base_conditional()                      oe.utils.conditional()
     base_less_or_equal()                    oe.utils.less_or_equal()
     base_version_less_or_equal()            oe.utils.version_less_or_equal()
     base_contains()                         bb.utils.contains()
     base_both_contain()                     oe.utils.both_contain()
     base_prune_suffix()                     oe.utils.prune_suffix()
     oe_filter()                             oe.utils.str_filter()
     oe_filter_out()                         oe.utils.str_filter_out() (or use the _remove operator).
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    Using <filename>exit 1</filename> to explicitly defer a
                    postinstall script until first boot is now deprecated since
                    it is not an obvious mechanism and can mask actual errors.
                    If you want to explicitly defer a postinstall to first boot
                    on the target rather than at <filename>rootfs</filename>
                    creation time, use
                    <filename>pkg_postinst_ontarget()</filename>
                    or call
                    <filename>postinst-intercepts defer_to_first_boot</filename>
                    from <filename>pkg_postinst()</filename>.
                    Any failure of a <filename>pkg_postinst()</filename>
                    script (including <filename>exit 1</filename>)
                    will trigger a warning during
                    <filename>do_rootfs</filename>.</para>

                    <para>For more information, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-post-installation-scripts'>Post-Installation Scripts</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                    </para></listitem>
                <listitem><para>
                    The <filename>elf</filename> image type has been removed.
                    This image type was removed because the
                    <filename>mkelfimage</filename> tool
                    that was required to create it is no longer provided by
                    coreboot upstream and required updating every time
                    <filename>binutils</filename> updated.
                    </para></listitem>
                <listitem><para>
                    Support for .iso image compression (previously enabled
                    through <filename>COMPRESSISO = "1"</filename>) has been
                    removed.
                    The userspace tools (<filename>zisofs-tools</filename>) are
                    unmaintained and <filename>squashfs</filename> provides
                    better performance and compression.
                    In order to build a live image with squashfs+lz4 compression
                    enabled you should now set
                    <filename>LIVE_ROOTFS_TYPE = "squashfs-lz4"</filename>
                    and ensure that <filename>live</filename>
                    is in <filename>IMAGE_FSTYPES</filename>.
                    </para></listitem>
                <listitem><para>
                    Recipes with an unconditional dependency on
                    <filename>libpam</filename> are only buildable with
                    <filename>pam</filename> in
                    <filename>DISTRO_FEATURES</filename>.
                    If the dependency is truly optional then it is recommended
                    that the dependency be conditional upon
                    <filename>pam</filename> being in
                    <filename>DISTRO_FEATURES</filename>.
                    </para></listitem>
                <listitem><para>
                    For EFI-based machines, the bootloader
                    (<filename>grub-efi</filename> by default) is installed into
                    the image at /boot.
                    Wic can be used to split the bootloader into separate boot
                    and rootfs partitions if necessary.
                    </para></listitem>
                <listitem><para>
                    Patches whose context does not match exactly (i.e. where
                    patch reports "fuzz" when applying) will generate a
                    warning.
                    For an example of this see
                    <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=cc97bc08125b63821ce3f616771830f77c456f57'>this commit</ulink>.
                    </para></listitem>
                <listitem><para>
                    Layers are expected to set
                    <filename>LAYERSERIES_COMPAT_layername</filename>
                    to match the version(s) of OpenEmbedded-Core they are
                    compatible with.
                    This is specified as codenames using spaces to separate
                    multiple values (e.g. "rocko sumo").
                    If a layer does not set
                    <filename>LAYERSERIES_COMPAT_layername</filename>, a warning
                    will is shown.
                    If a layer sets a value that does not include the current
                    version ("sumo" for the 2.5 release), then an error will be
                    produced.
                    </para></listitem>
                <listitem><para>
                    The <filename>TZ</filename> environment variable is set to
                    "UTC" within the build environment in order to fix
                    reproducibility problems in some recipes.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.6-release'>
    <title>Moving to the Yocto Project 2.6 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.6 Release from the prior release.
    </para>

    <section id='migration-2.6-gcc-changes'>
        <title>GCC 8.2 is Now Used by Default</title>

        <para>
            The GNU Compiler Collection version 8.2 is now used by default
            for compilation.
            For more information on what has changed in the GCC 8.x release,
            see
            <ulink url='https://gcc.gnu.org/gcc-8/changes.html'></ulink>.
        </para>

        <para>
            If you still need to compile with version 7.x, GCC 7.3 is
            also provided.
            You can select this version by setting the
            and can be selected by setting the
            <link linkend='var-GCCVERSION'><filename>GCCVERSION</filename></link>
            variable to "7.%" in your configuration.
        </para>
    </section>

    <section id='migration-2.6-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <literallayout class='monospaced'>
     <emphasis><filename>beecrypt</filename>:</emphasis> No longer needed since moving to RPM 4.
     <emphasis><filename>bigreqsproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>calibrateproto</filename>:</emphasis> Removed in favor of <filename>xinput</filename>.
     <emphasis><filename>compositeproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>damageproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>dmxproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>dri2proto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>dri3proto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>eee-acpi-scripts</filename>:</emphasis> Became obsolete.
     <emphasis><filename>fixesproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>fontsproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>fstests</filename>:</emphasis> Became obsolete.
     <emphasis><filename>gccmakedep</filename>:</emphasis> No longer used.
     <emphasis><filename>glproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>gnome-desktop3</filename>:</emphasis> No longer needed.  This recipe has moved to <filename>meta-oe</filename>.
     <emphasis><filename>icon-naming-utils</filename>:</emphasis> No longer used since the Sato theme was removed in 2016.
     <emphasis><filename>inputproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>kbproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>libusb-compat</filename>:</emphasis> Became obsolete.
     <emphasis><filename>libuser</filename>:</emphasis> Became obsolete.
     <emphasis><filename>libnfsidmap</filename>:</emphasis> No longer an external requirement since <filename>nfs-utils</filename> 2.2.1.  <filename>libnfsidmap</filename> is now integrated.
     <emphasis><filename>libxcalibrate</filename>:</emphasis> No longer needed with <filename>xinput</filename>
     <emphasis><filename>mktemp</filename>:</emphasis> Became obsolete. The <filename>mktemp</filename> command is provided by both <filename>busybox</filename> and <filename>coreutils</filename>.
     <emphasis><filename>ossp-uuid</filename>:</emphasis> Is not being maintained and has mostly been replaced by <filename>uuid.h</filename> in <filename>util-linux</filename>.
     <emphasis><filename>pax-utils</filename>:</emphasis> No longer needed.  Previous QA tests that did use this recipe are now done at build time.
     <emphasis><filename>pcmciautils</filename>:</emphasis> Became obsolete.
     <emphasis><filename>pixz</filename>:</emphasis> No longer needed. <filename>xz</filename> now supports multi-threaded compression.
     <emphasis><filename>presentproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>randrproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>recordproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>renderproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>resourceproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>scrnsaverproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>trace-cmd</filename>:</emphasis> Became obsolete.  <filename>perf</filename> replaced this recipe's functionally.
     <emphasis><filename>videoproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>wireless-tools</filename>:</emphasis> Became obsolete.  Superseded by <filename>iw</filename>.
     <emphasis><filename>xcmiscproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xextproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xf86dgaproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xf86driproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xf86miscproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xf86-video-omapfb</filename>:</emphasis> Became obsolete.  Use kernel modesetting driver instead.
     <emphasis><filename>xf86-video-omap</filename>:</emphasis> Became obsolete.  Use kernel modesetting driver instead.
     <emphasis><filename>xf86vidmodeproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xineramaproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>yasm</filename>:</emphasis> No longer needed since previous usages are now satisfied by <filename>nasm</filename>.
            </literallayout>
        </para>
    </section>

    <section id='migration-2.6-packaging-changes'>
        <title>Packaging Changes</title>

        <para>
            The following packaging changes have been made:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>cmake</filename>:</emphasis>
                    <filename>cmake.m4</filename> and
                    <filename>toolchain</filename> files have been moved to the
                    main package.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>iptables</filename>:</emphasis>
                    The <filename>iptables</filename> modules have been split
                    into separate packages.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>alsa-lib</filename>:</emphasis>
                    <filename>libasound</filename> is now in the main
                    <filename>alsa-lib</filename> package instead of
                    <filename>libasound</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>glibc</filename>:</emphasis>
                    <filename>libnss-db</filename> is now in its own package
                    along with a <filename>/var/db/makedbs.sh</filename>
                    script to update databases.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python</filename> and <filename>python3</filename>:</emphasis>
                    The main package has been removed from the recipe.
                    You must install specific packages or
                    <filename>python-modules</filename> /
                    <filename>python3-modules</filename> for everything.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>systemtap</filename>:</emphasis>
                    Moved <filename>systemtap-exporter</filename> into its own
                    package.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.6-xorg-protocol-dependencies'>
        <title>XOrg Protocol dependencies</title>

        <para>
            The "*proto" upstream repositories have been combined into one
            "xorgproto" repository.
            Thus, the corresponding recipes have also been combined into a
            single <filename>xorgproto</filename> recipe.
            Any recipes that depend upon the older <filename>*proto</filename>
            recipes need to be changed to depend on the newer
            <filename>xorgproto</filename> recipe instead.
        </para>

        <para>
            For names of recipes removed because of this repository change,
            see the
            <link linkend="migration-2.6-removed-recipes">Removed Recipes</link>
            section.
        </para>
    </section>

    <section id='migration-2.6-distutils-distutils3-fetching-dependencies'>
        <title><filename>distutils</filename> and <filename>distutils3</filename> Now Prevent Fetching Dependencies During the <filename>do_configure</filename> Task</title>

        <para>
            Previously, it was possible for Python recipes that inherited
            the
            <link linkend='ref-classes-distutils'><filename>distutils</filename></link>
            and
            <link linkend='ref-classes-distutils3'><filename>distutils3</filename></link>
            classes to fetch code during the
            <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
            task to satisfy dependencies mentioned in
            <filename>setup.py</filename> if those dependencies were not
            provided in the sysroot (i.e. recipes providing the dependencies
            were missing from
            <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>).
            <note>
                This change affects classes beyond just the two mentioned
                (i.e. <filename>distutils</filename> and
                <filename>distutils3</filename>).
                Any recipe that inherits <filename>distutils*</filename>
                classes are affected.
                For example, the <filename>setuptools</filename> and
                <filename>setuptools3</filename> recipes are affected since
                they inherit the <filename>distutils*</filename> classes.
            </note>
        </para>

        <para>
            Fetching these types of dependencies that are not provided in the
            sysroot negatively affects the ability to reproduce builds.
            This type of fetching is now explicitly disabled.
            Consequently, any missing dependencies in Python recipes that
            use these classes now result in an error during the
            <filename>do_configure</filename> task.
        </para>
    </section>

    <section id='migration-2.6-linux-yocto-configuration-audit-issues-now-correctly-reported'>
        <title><filename>linux-yocto</filename> Configuration Audit Issues Now Correctly Reported</title>

        <para>
            Due to a bug, the kernel configuration audit functionality was
            not writing out any resulting warnings during the build.
            This issue is now corrected.
            You might notice these warnings now if you have a custom kernel
            configuration with a <filename>linux-yocto</filename> style
            kernel recipe.
        </para>
    </section>

    <section id='migration-2.6-image-kernel-artifact-naming-changes'>
        <title>Image/Kernel Artifact Naming Changes</title>

        <para>
            The following changes have been made:
            <itemizedlist>
                <listitem><para>
                    Name variables (e.g.
                    <link linkend='var-IMAGE_NAME'><filename>IMAGE_NAME</filename></link>)
                    use a new <filename>IMAGE_VERSION_SUFFIX</filename>
                    variable instead of
                    <link linkend='var-DATETIME'><filename>DATETIME</filename></link>.
                    Using <filename>IMAGE_VERSION_SUFFIX</filename> allows
                    easier and more direct changes.</para>

                    <para>The <filename>IMAGE_VERSION_SUFFIX</filename>
                    variable is set in the
                    <filename>bitbake.conf</filename> configuration file as
                    follows:
                    <literallayout class='monospaced'>
     IMAGE_VERSION_SUFFIX = "-${DATETIME}"
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    Several variables have changed names for consistency:
                    <literallayout class='monospaced'>
    Old Variable Name               New Variable Name
    ========================================================
    KERNEL_IMAGE_BASE_NAME          <link linkend='var-KERNEL_IMAGE_NAME'>KERNEL_IMAGE_NAME</link>
    KERNEL_IMAGE_SYMLINK_NAME       <link linkend='var-KERNEL_IMAGE_LINK_NAME'>KERNEL_IMAGE_LINK_NAME</link>
    MODULE_TARBALL_BASE_NAME        <link linkend='var-MODULE_TARBALL_NAME'>MODULE_TARBALL_NAME</link>
    MODULE_TARBALL_SYMLINK_NAME     <link linkend='var-MODULE_TARBALL_LINK_NAME'>MODULE_TARBALL_LINK_NAME</link>
    INITRAMFS_BASE_NAME             <link linkend='var-INITRAMFS_NAME'>INITRAMFS_NAME</link>
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    The <filename>MODULE_IMAGE_BASE_NAME</filename> variable
                    has been removed.
                    The module tarball name is now controlled directly with the
                    <link linkend='var-MODULE_TARBALL_NAME'><filename>MODULE_TARBALL_NAME</filename></link>
                    variable.
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='var-KERNEL_DTB_NAME'><filename>KERNEL_DTB_NAME</filename></link>
                    and
                    <link linkend='var-KERNEL_DTB_LINK_NAME'><filename>KERNEL_DTB_LINK_NAME</filename></link>
                    variables have been introduced to control kernel Device
                    Tree Binary (DTB) artifact names instead of mangling
                    <filename>KERNEL_IMAGE_*</filename> variables.
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='var-KERNEL_FIT_NAME'><filename>KERNEL_FIT_NAME</filename></link>
                    and
                    <link linkend='var-KERNEL_FIT_LINK_NAME'><filename>KERNEL_FIT_LINK_NAME</filename></link>
                    variables have been introduced to specify the name of
                    flattened image tree (FIT) kernel images similar to other
                    deployed artifacts.
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='var-MODULE_TARBALL_NAME'><filename>MODULE_TARBALL_NAME</filename></link>
                    and
                    <link linkend='var-MODULE_TARBALL_LINK_NAME'><filename>MODULE_TARBALL_LINK_NAME</filename></link>
                    variable values no longer include the "module-" prefix or
                    ".tgz" suffix.
                    These parts are now hardcoded so that the values are
                    consistent with other artifact naming variables.
                    </para></listitem>
                <listitem><para>
                    Added the
                    <link linkend='var-INITRAMFS_LINK_NAME'><filename>INITRAMFS_LINK_NAME</filename></link>
                    variable so that the symlink can be controlled similarly
                    to other artifact types.
                    </para></listitem>
                <listitem><para>
                    <link linkend='var-INITRAMFS_NAME'><filename>INITRAMFS_NAME</filename></link>
                    now uses
                    "${PKGE}-${PKGV}-${PKGR}-${MACHINE}${IMAGE_VERSION_SUFFIX}"
                    instead of
                    "${PV}-${PR}-${MACHINE}-${DATETIME}", which
                    makes it consistent with other variables.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.6-serial-console-deprecated'>
        <title><filename>SERIAL_CONSOLE</filename> Deprecated</title>

        <para>
            The
            <link linkend='var-SERIAL_CONSOLE'><filename>SERIAL_CONSOLE</filename></link>
            variable has been functionally replaced by the
            <link linkend='var-SERIAL_CONSOLES'><filename>SERIAL_CONSOLES</filename></link>
            variable for some time.
            With the Yocto Project 2.6 release,
            <filename>SERIAL_CONSOLE</filename> has been officially deprecated.
        </para>

        <para>
            <filename>SERIAL_CONSOLE</filename> will continue to work as
            before for the 2.6 release.
            However, for the sake of future compatibility, it is recommended
            that you replace all instances of
            <filename>SERIAL_CONSOLE</filename> with
            <filename>SERIAL_CONSOLES</filename>.
            <note>
                The only difference in usage is that
                <filename>SERIAL_CONSOLES</filename> expects entries to be
                separated using semicolons as compared to
                <filename>SERIAL_CONSOLE</filename>, which expects spaces.
            </note>
        </para>
    </section>

    <section id='migration-2.6-poky-sets-unknown-configure-option-to-qa-error'>
        <title>Configure Script Reports Unknown Options as Errors</title>

        <para>
            If the configure script reports an unknown option, this now
            triggers a QA error instead of a warning.
            Any recipes that previously got away with specifying such unknown
            options now need to be fixed.
        </para>
    </section>

    <section id='migration-2.6-override-changes'>
        <title>Override Changes</title>

        <para>
            The following changes have occurred:
            <itemizedlist>
                <listitem><para>
                    <emphasis>The <filename>virtclass-native</filename> and
                    <filename>virtclass-nativesdk</filename> Overrides Have
                    Been Removed:</emphasis>
                    The <filename>virtclass-native</filename> and
                    <filename>virtclass-nativesdk</filename> overrides have
                    been deprecated since 2012 in favor of
                    <filename>class-native</filename> and
                    <filename>class-nativesdk</filename>, respectively.
                    Both <filename>virtclass-native</filename> and
                    <filename>virtclass-nativesdk</filename> are now dropped.
                    <note>
                        The <filename>virtclass-multilib-</filename> overrides
                        for multilib are still valid.
                    </note>
                    </para></listitem>
                <listitem><para>
                    <emphasis>The <filename>forcevariable</filename>
                    Override Now Has a Higher Priority Than
                    <filename>libc</filename> Overrides:</emphasis>
                    The <filename>forcevariable</filename> override is
                    documented to be the highest priority override.
                    However, due to a long-standing quirk of how
                    <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
                    is set, the <filename>libc</filename> overrides (e.g.
                    <filename>libc-glibc</filename>,
                    <filename>libc-musl</filename>, and so forth) erroneously
                    had a higher priority.
                    This issue is now corrected.</para>

                    <para>It is likely this change will not cause any
                    problems.
                    However, it is possible with some unusual configurations
                    that you might see a change in behavior if you were
                    relying on the previous behavior.
                    Be sure to check how you use
                    <filename>forcevariable</filename> and
                    <filename>libc-*</filename> overrides in your custom
                    layers and configuration files to ensure they make sense.
                    </para></listitem>
                <listitem><para>
                    <emphasis>The <filename>build-${BUILD_OS}</filename>
                    Override Has Been Removed:</emphasis>
                    The <filename>build-${BUILD_OS}</filename>, which is
                    typically <filename>build-linux</filename>, override has
                    been removed because building on a host operating system
                    other than a recent version of Linux is neither supported
                    nor recommended.
                    Dropping the override avoids giving the impression that
                    other host operating systems might be supported.
                    </para></listitem>
                <listitem><para>
                    The "_remove" operator now preserves whitespace.
                    Consequently, when specifying list items to remove, be
                    aware that leading and trailing whitespace resulting from
                    the removal is retained.</para>

                    <para>See the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#removing-override-style-syntax'>Removal (Override Style Syntax)</ulink>"
                    section in the BitBake User Manual for a detailed example.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.6-systemd-configuration-now-split-out-to-system-conf'>
        <title><filename>systemd</filename> Configuration is Now Split Into <filename>systemd-conf</filename></title>

        <para>
            The configuration for the <filename>systemd</filename> recipe
            has been moved into a <filename>system-conf</filename> recipe.
            Moving this configuration to a separate recipe avoids the
            <filename>systemd</filename> recipe from becoming machine-specific
            for cases where machine-specific configurations need to be applied
            (e.g. for <filename>qemu*</filename> machines).
        </para>

        <para>
            Currently, the new recipe packages the following files:
            <literallayout class='monospaced'>
     ${sysconfdir}/machine-id
     ${sysconfdir}/systemd/coredump.conf
     ${sysconfdir}/systemd/journald.conf
     ${sysconfdir}/systemd/logind.conf
     ${sysconfdir}/systemd/system.conf
     ${sysconfdir}/systemd/user.conf
            </literallayout>
            If you previously used bbappend files to append the
            <filename>systemd</filename> recipe to change any of the
            listed files, you must do so for the
            <filename>systemd-conf</filename> recipe instead.
        </para>
    </section>

    <section id='migration-2.6-automatic-testing-changes'>
        <title>Automatic Testing Changes</title>

        <para>
            This section provides information about automatic testing
            changes:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>TEST_IMAGE</filename> Variable Removed:</emphasis>
                    Prior to this release, you set the
                    <filename>TEST_IMAGE</filename> variable to "1" to
                    enable automatic testing for successfully built images.
                    The <filename>TEST_IMAGE</filename> variable no longer
                    exists and has been replaced by the
                    <link linkend='var-TESTIMAGE_AUTO'><filename>TESTIMAGE_AUTO</filename></link>
                    variable.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Inheriting the <filename>testimage</filename> and
                    <filename>testsdk</filename> Classes:</emphasis>
                    Best practices now dictate that you use the
                    <link linkend='var-IMAGE_CLASSES'><filename>IMAGE_CLASSES</filename></link>
                    variable rather than the
                    <link linkend='var-INHERIT'><filename>INHERIT</filename></link>
                    variable when you inherit the
                    <link linkend='ref-classes-testimage*'><filename>testimage</filename></link>
                    and
                    <link linkend='ref-classes-testsdk'><filename>testsdk</filename></link>
                    classes used for automatic testing.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.6-openssl-changes'>
        <title>OpenSSL Changes</title>

        <para>
            <ulink url='https://www.openssl.org/'>OpenSSL</ulink> has been
            upgraded from 1.0 to 1.1.
            By default, this upgrade could cause problems for recipes that
            have both versions in their dependency chains.
            The problem is that both versions cannot be installed together
            at build time.
            <note>
                It is possible to have both versions of the library at runtime.
            </note>
        </para>
    </section>

    <section id='migration-2.6-bitbake-changes'>
        <title>BitBake Changes</title>

        <para>
            The server logfile <filename>bitbake-cookerdaemon.log</filename> is
            now always placed in the
            <link linkend='build-directory'>Build Directory</link>
            instead of the current directory.
        </para>
    </section>

    <section id='migration-2.6-security-changes'>
        <title>Security Changes</title>

        <para>
            The Poky distribution now uses security compiler flags by
            default.
            Inclusion of these flags could cause new failures due to stricter
            checking for various potential security issues in code.
        </para>
    </section>

    <section id='migration-2.6-post-installation-changes'>
        <title>Post Installation Changes</title>

        <para>
            You must explicitly mark post installs to defer to the target.
            If you want to explicitly defer a postinstall to first boot on
            the target rather than at rootfs creation time, use
            <filename>pkg_postinst_ontarget()</filename> or call
            <filename>postinst-intercepts defer_to_first_boot</filename> from
            <filename>pkg_postinst()</filename>.
            Any failure of a <filename>pkg_postinst()</filename> script
            (including exit 1) triggers an error during the
            <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link> task.
        </para>

        <para>
            For more information on post-installation behavior, see the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-post-installation-scripts'>Post-Installation Scripts</ulink>"
            section in the Yocto Project Development Tasks Manual.
        </para>
    </section>

    <section id='migration-2.6-python-3-profile-guided-optimizations'>
        <title>Python 3 Profile-Guided Optimization</title>

        <para>
            The <filename>python3</filename> recipe now enables profile-guided
            optimization.
            Using this optimization requires a little extra build time in
            exchange for improved performance on the target at runtime.
            Additionally, the optimization is only enabled if the current
            <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
            has support for user-mode emulation in QEMU (i.e. "qemu-usermode"
            is in
            <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>,
            which it is by default).
        </para>

        <para>
            If you wish to disable Python profile-guided optimization
            regardless of the value of
            <filename>MACHINE_FEATURES</filename>, then ensure that
            <link linkend='var-PACKAGECONFIG'><filename>PACKAGECONFIG</filename></link>
            for the <filename>python3</filename> recipe does not contain "pgo".
            You could accomplish the latter using the following at the
            configuration level:
            <literallayout class='monospaced'>
     PACKAGECONFIG_remove_pn-python3 = "pgo"
            </literallayout>
            Alternatively, you can set
            <filename>PACKAGECONFIG</filename> using an append file for the
            <filename>python3</filename> recipe.
        </para>
    </section>

    <section id='migration-2.6-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following miscellaneous changes occurred:
            <itemizedlist>
                <listitem><para>
                    Default to using the Thumb-2 instruction set for armv7a
                    and above.
                    If you have any custom recipes that build software that
                    needs to be built with the ARM instruction set, change the
                    recipe to set the instruction set as follows:
                    <literallayout class='monospaced'>
     ARM_INSTRUCTION_SET = "arm"
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    <filename>run-postinsts</filename> no longer uses
                    <filename>/etc/*-postinsts</filename> for
                    <filename>dpkg/opkg</filename> in favor of built-in
                    postinst support.
                    RPM behavior remains unchanged.
                    </para></listitem>
                <listitem><para>
                    The <filename>NOISO</filename> and
                    <filename>NOHDD</filename> variables are no longer used.
                    You now control building <filename>*.iso</filename> and
                    <filename>*.hddimg</filename> image types directly
                    by using the
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    variable.
                    </para></listitem>
                <listitem><para>
                    The <filename>scripts/contrib/mkefidisk.sh</filename>
                    has been removed in favor of Wic.
                    </para></listitem>
                <listitem><para>
                    <filename>kernel-modules</filename> has been removed from
                    <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>
                    for <filename>qemumips</filename> and
                    <filename>qemumips64</filename> machines.
                    Removal also impacts the <filename>x86-base.inc</filename>
                    file.
                    <note>
                        <filename>genericx86</filename> and
                        <filename>genericx86-64</filename> retain
                        <filename>kernel-modules</filename> as part of the
                        <filename>RRECOMMENDS</filename> variable setting.
                    </note>
                    </para></listitem>
                <listitem><para>
                    The <filename>LGPLv2_WHITELIST_GPL-3.0</filename>
                    variable has been removed.
                    If you are setting this variable in your configuration,
                    set or append it to the
                    <filename>WHITELIST_GPL-3.0</filename> variable instead.
                    </para></listitem>
                <listitem><para>
                    <filename>${ASNEEDED}</filename> is now included in
                    the
                    <link linkend='var-TARGET_LDFLAGS'><filename>TARGET_LDFLAGS</filename></link>
                    variable directly.
                    The remaining definitions from
                    <filename>meta/conf/distro/include/as-needed.inc</filename>
                    have been moved to corresponding recipes.
                    </para></listitem>
                <listitem><para>
                    Support for DSA host keys has been dropped from the
                    OpenSSH recipes.
                    If you are still using DSA keys, you must switch over to a
                    more secure algorithm as recommended by OpenSSH upstream.
                    </para></listitem>
                <listitem><para>
                    The <filename>dhcp</filename> recipe now uses the
                    <filename>dhcpd6.conf</filename> configuration file in
                    <filename>dhcpd6.service</filename> for IPv6 DHCP rather
                    than re-using <filename>dhcpd.conf</filename>, which is
                    now reserved for IPv4.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.7-release'>
    <title>Moving to the Yocto Project 2.7 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.7 Release from the prior release.
    </para>

    <section id='migration-2.7-bitbake-changes'>
        <title>BitBake Changes</title>

        <para>
            The following changes have been made to BitBake:
            <itemizedlist>
                <listitem><para>
                    BitBake now checks anonymous Python functions and pure
                    Python functions (e.g. <filename>def funcname:</filename>)
                    in the metadata for tab indentation.
                    If found, BitBake  produces a warning.
                    </para></listitem>
                <listitem><para>
                    Bitbake now checks
                    <link linkend='var-BBFILE_COLLECTIONS'><filename>BBFILE_COLLECTIONS</filename></link>
                    for duplicate entries and triggers an error if any are
                    found.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.7-eclipse-support-dropped'>
        <title><trademark class='trade'>Eclipse</trademark> Support Removed</title>

        <para>
            Support for the Eclipse IDE has been removed.
            Support continues for those releases prior to 2.7 that did include
            support.
            The 2.7 release does not include the Eclipse Yocto plugin.
        </para>
    </section>

    <section id='migration-2.7-qemu-native-splits-system-and-user-mode-parts'>
        <title><filename>qemu-native</filename> Splits the System and User-Mode Parts</title>

        <para>
            The system and user-mode parts of <filename>qemu-native</filename>
            are now split.
            <filename>qemu-native</filename> provides the user-mode components
            and <filename>qemu-system-native</filename> provides the system
            components.
            If you have recipes that depend on QEMU's system emulation
            functionality at build time, they should now depend upon
            <filename>qemu-system-native</filename> instead of
            <filename>qemu-native</filename>.
        </para>
    </section>

    <section id='migration-2.7-upstream-tracking.inc-removed'>
        <title>The <filename>upstream-tracking.inc</filename> File Has Been Removed</title>

        <para>
            The previously deprecated <filename>upstream-tracking.inc</filename>
            file is now removed.
            Any <filename>UPSTREAM_TRACKING*</filename> variables are now set
            in the corresponding recipes instead.
        </para>

        <para>
            Remove any references you have to the
            <filename>upstream-tracking.inc</filename> file in your
            configuration.
        </para>
    </section>

    <section id='migration-2.7-distro-features-libc-removed'>
        <title>The <filename>DISTRO_FEATURES_LIBC</filename> Variable Has Been Removed</title>

        <para>
            The <filename>DISTRO_FEATURES_LIBC</filename> variable is no
            longer used.
            The ability to configure glibc using kconfig has been removed
            for quite some time making the <filename>libc-*</filename> features
            set no longer effective.
        </para>

        <para>
            Remove any references you have to
            <filename>DISTRO_FEATURES_LIBC</filename> in your own layers.
        </para>
    </section>

    <section id='migration-2.7-license-values'>
        <title>License Value Corrections</title>

        <para>
            The following corrections have been made to the
            <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
            values set by recipes:
            <literallayout class='monospaced'>
     <emphasis>socat</emphasis>: Corrected <filename>LICENSE</filename> to be "GPLv2" rather than
        "GPLv2+".

     <emphasis>libgfortran</emphasis>: Set license to "GPL-3.0-with-GCC-exception".

     <emphasis>elfutils</emphasis>: Removed "Elfutils-Exception" and set to "GPLv2" for shared
        libraries
            </literallayout>
        </para>
    </section>

    <section id='migration-2.7-packaging-changes'>
        <title>Packaging Changes</title>

        <para>
            This section provides information about packaging changes.
            <itemizedlist>
                <listitem><para>
                    <filename>bind</filename>: The
                    <filename>nsupdate</filename> binary has been moved to
                    the <filename>bind-utils</filename> package.
                    </para></listitem>
                <listitem><para>
                    Debug split: The default debug split has been changed to
                    create separate source packages (i.e.
                    <replaceable>package_name</replaceable><filename>-dbg</filename>
                    and
                    <replaceable>package_name</replaceable><filename>-src</filename>).
                    If you are currently using <filename>dbg-pkgs</filename>
                    in
                    <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
                    to bring in debug symbols and you still need the sources,
                    you must now also add <filename>src-pkgs</filename> to
                    <filename>IMAGE_FEATURES</filename>.
                    Source packages remain in the target portion of the SDK
                    by default, unless you have set your own value for
                    <link linkend='var-SDKIMAGE_FEATURES'><filename>SDKIMAGE_FEATURES</filename></link>
                    that does not include <filename>src-pkgs</filename>.
                    </para></listitem>
                <listitem><para>
                    Mount all using <filename>util-linux</filename>:
                    <filename>/etc/default/mountall</filename> has
                    moved into the -mount sub-package.
                    </para></listitem>
                <listitem><para>
                    Splitting binaries using <filename>util-linux</filename>:
                    <filename>util-linux</filename> now splits each binary into
                    its own package for fine-grained control.
                    The main <filename>util-linux</filename> package pulls in
                    the individual binary packages using the
                    <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>
                    and
                    <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
                    variables.
                    As a result, existing images should not see any changes
                    assuming
                    <link linkend='var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></link>
                    is not set.
                    </para></listitem>
                <listitem><para>
                    <filename>netbase/base-files</filename>:
                    <filename>/etc/hosts</filename> has moved from
                    <filename>netbase</filename> to
                    <filename>base-files</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>tzdata</filename>: The main package has been
                    converted to an empty meta package that pulls in all
                    <filename>tzdata</filename> packages by default.
                    </para></listitem>
                <listitem><para>
                    <filename>lrzsz</filename>: This package has been removed
                    from <filename>packagegroup-self-hosted</filename> and
                    <filename>packagegroup-core-tools-testapps</filename>.
                    The X/Y/ZModem support is less likely to be needed on
                    modern systems.
                    If you are relying on these packagegroups to include the
                    <filename>lrzsz</filename> package in your image, you
                    now need to explicitly add the package.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.7-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <literallayout class='monospaced'>
     <emphasis>gcc</emphasis>: Drop version 7.3 recipes. Version 8.3 now remains.

     <emphasis>linux-yocto</emphasis>: Drop versions 4.14 and 4.18 recipes. Versions 4.19 and 5.0 remain.

     <emphasis>go</emphasis>: Drop version 1.9 recipes. Versions 1.11 and 1.12 remain.

     <emphasis>xvideo-tests</emphasis>: Became obsolete.

     <emphasis>libart-lgpl</emphasis>: Became obsolete.

     <emphasis>gtk-icon-utils-native</emphasis>: These tools are now provided by gtk+3-native

     <emphasis>gcc-cross-initial</emphasis>: No longer needed. gcc-cross/gcc-crosssdk is now used instead.

     <emphasis>gcc-crosssdk-initial</emphasis>: No longer needed. gcc-cross/gcc-crosssdk is now used instead.

     <emphasis>glibc-initial</emphasis>: Removed because the benefits of having it for site_config are
        currently outweighed by the cost of building the recipe.
            </literallayout>
         </para>
    </section>

    <section id='migration-2.7-removed-classes'>
        <title>Removed Classes</title>

        <para>
            The following classes have been removed:
            <literallayout class='monospaced'>
     <emphasis>distutils-tools</emphasis>: This class was never used.

     <emphasis>bugzilla.bbclass</emphasis>: Became obsolete.

     <emphasis>distrodata</emphasis>: This functionally has been replaced by a more modern
         tinfoil-based implementation.
            </literallayout>
        </para>
    </section>

    <section id='migration-2.7-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following miscellaneous changes occurred:
            <itemizedlist>
                <listitem><para>
                    The <filename>distro</filename> subdirectory of the Poky
                    repository has been removed from the top-level
                    <filename>scripts</filename> directory.
                    </para></listitem>
                <listitem><para>
                    Perl now builds for the target using
                    <ulink url='http://arsv.github.io/perl-cross/'><filename>perl-cross</filename></ulink>
                    for better maintainability and improved build performance.
                    This change should not present any problems unless you have
                    heavily customized your Perl recipe.
                    </para></listitem>
                <listitem><para>
                    <filename>arm-tunes</filename>: Removed the "-march"
                    option if mcpu is already added.
                    </para></listitem>
                <listitem><para>
                    <filename>update-alternatives</filename>: Convert file
                    renames to
                    <link linkend='var-PACKAGE_PREPROCESS_FUNCS'><filename>PACKAGE_PREPROCESS_FUNCS</filename></link>
                    </para></listitem>
                <listitem><para>
                    <filename>base/pixbufcache</filename>: Obsolete
                    <filename>sstatecompletions</filename> code has been
                    removed.
                    </para></listitem>
                <listitem><para>
                    <link linkend='ref-classes-native'><filename>native</filename></link>
                    class:
                    <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
                    handling has been enabled.
                    </para></listitem>
                <listitem><para>
                    <filename>inetutils</filename>: This recipe has rsh
                    disabled.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-3.0-release'>
    <title>Moving to the Yocto Project 3.0 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 3.0 Release from the prior release.
    </para>

    <section id='migration-3.0-init-system-selection'>
        <title>Init System Selection</title>

        <para>
            Changing the init system manager previously required setting a
            number of different variables.
            You can now change the manager by setting the
            <filename>INIT_MANAGER</filename> variable and the corresponding
            include files
            (i.e. <filename>conf/distro/include/init-manager-*.conf</filename>).
            Include files are provided for four values: "none", "sysvinit",
            "systemd", and "mdev-busybox".
            The default value, "none", for <filename>INIT_MANAGER</filename>
            should allow your current settings to continue working.
            However, it is advisable to explicitly set
            <filename>INIT_MANAGER</filename>.
        </para>
    </section>

    <section id='migration-3.0-lsb-support-removed'>
        <title>LSB Support Removed</title>

        <para>
            Linux Standard Base (LSB) as a standard is not current, and
            is not well suited for embedded applications.
            Support can be continued in a separate layer if needed.
            However, presently LSB support has been removed from the core.
        </para>

        <para>
            As a result of this change, the <filename>poky-lsb</filename>
            derivative distribution configuration that was also used for
            testing alternative configurations has been replaced with a
            <filename>poky-altcfg</filename> distribution that has LSB
            parts removed.
        </para>
    </section>

    <section id='migration-3.0-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed.
            <itemizedlist>
                <listitem><para>
                    <filename>core-image-lsb-dev</filename>: Part of removed
                    LSB support.
                    </para></listitem>
                <listitem><para>
                    <filename>core-image-lsb</filename>: Part of removed
                    LSB support.
                    </para></listitem>
                <listitem><para>
                    <filename>core-image-lsb-sdk</filename>: Part of removed
                    LSB support.
                    </para></listitem>
                <listitem><para>
                    <filename>cve-check-tool</filename>: Functionally replaced
                    by the <filename>cve-update-db</filename> recipe and
                    <filename>cve-check</filename> class.
                    </para></listitem>
                <listitem><para>
                    <filename>eglinfo</filename>: No longer maintained.
                    <filename>eglinfo</filename> from
                    <filename>mesa-demos</filename> is an adequate and
                    maintained alternative.
                    </para></listitem>
                <listitem><para>
                    <filename>gcc-8.3</filename>: Version 8.3 removed.
                    Replaced by 9.2.
                    </para></listitem>
                <listitem><para>
                    <filename>gnome-themes-standard</filename>: Only needed
                    by gtk+ 2.x, which has been removed.
                    </para></listitem>
                <listitem><para>
                    <filename>gtk+</filename>: GTK+ 2 is obsolete and has been
                    replaced by gtk+3.
                    </para></listitem>
                <listitem><para>
                    <filename>irda-utils</filename>: Has become obsolete.
                    IrDA support has been removed from the Linux kernel in
                    version 4.17 and later.
                    </para></listitem>
                <listitem><para>
                    <filename>libnewt-python</filename>:
                    <filename>libnewt</filename> Python support merged into
                    main <filename>libnewt</filename> recipe.
                    </para></listitem>
                <listitem><para>
                    <filename>libsdl</filename>: Replaced by newer
                    <filename>libsdl2</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>libx11-diet</filename>: Became obsolete.
                    </para></listitem>
                <listitem><para>
                    <filename>libxx86dga</filename>: Removed obsolete client
                    library.
                    </para></listitem>
                <listitem><para>
                    <filename>libxx86misc</filename>: Removed. Library is
                    redundant.
                    </para></listitem>
                <listitem><para>
                    <filename>linux-yocto</filename>: Version 5.0 removed,
                    which is now redundant (5.2 / 4.19 present).
                    </para></listitem>
                <listitem><para>
                    <filename>lsbinitscripts</filename>: Part of removed LSB
                    support.
                    </para></listitem>
                <listitem><para>
                    <filename>lsb</filename>: Part of removed LSB support.
                    </para></listitem>
                <listitem><para>
                    <filename>lsbtest</filename>: Part of removed LSB support.
                    </para></listitem>
                <listitem><para>
                    <filename>openssl10</filename>: Replaced by newer
                    <filename>openssl</filename> version 1.1.
                    </para></listitem>
                <listitem><para>
                    <filename>packagegroup-core-lsb</filename>: Part of removed
                    LSB support.
                    </para></listitem>
                <listitem><para>
                    <filename>python-nose</filename>: Removed the Python 2.x
                    version of the recipe.
                    </para></listitem>
                <listitem><para>
                    <filename>python-numpy</filename>: Removed the Python 2.x
                    version of the recipe.
                    </para></listitem>
                <listitem><para>
                    <filename>python-scons</filename>: Removed the Python 2.x
                    version of the recipe.
                    </para></listitem>
                <listitem><para>
                    <filename>source-highlight</filename>: No longer needed.
                    </para></listitem>
                <listitem><para>
                    <filename>stress</filename>: Replaced by
                    <filename>stress-ng</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>vulkan</filename>: Split into
                    <filename>vulkan-loader</filename>,
                    <filename>vulkan-headers</filename>, and
                    <filename>vulkan-tools</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>weston-conf</filename>: Functionality moved to
                    <filename>weston-init</filename>.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-3.0-packaging-changes'>
        <title>Packaging Changes</title>

        <para>
            The following packaging changes have occurred.
            <itemizedlist>
                <listitem><para>
                    The
                    <ulink url='https://en.wikipedia.org/wiki/GNOME_Web'>Epiphany</ulink>
                    browser has been dropped from
                    <filename>packagegroup-self-hosted</filename> as it has
                    not been needed inside
                    <filename>build-appliance-image</filename> for
                    quite some time and was causing resource problems.
                    </para></listitem>
                <listitem><para>
                    <filename>libcap-ng</filename> Python support has been
                    moved to a separate <filename>libcap-ng-python</filename>
                    recipe to streamline the build process when the Python
                    bindings are not needed.
                    </para></listitem>
                <listitem><para>
                    <filename>libdrm</filename> now packages the file
                    <filename>amdgpu.ids</filename> into a separate
                    <filename>libdrm-amdgpu</filename> package.
                    </para></listitem>
                <listitem><para>
                    <filename>python3</filename>: The
                    <filename>runpy</filename> module is now in the
                    <filename>python3-core</filename> package as it is
                    required to support the common "python3 -m" command usage.
                    </para></listitem>
                <listitem><para>
                    <filename>distcc</filename> now provides separate
                    <filename>distcc-client</filename> and
                    <filename>distcc-server</filename> packages as typically
                    one or the other are needed, rather than both.
                    </para></listitem>
                <listitem><para>
                    <filename>python*-setuptools</filename> recipes now
                    separately package the <filename>pkg_resources</filename>
                    module in a <filename>python-pkg-resources</filename> /
                    <filename>python3-pkg-resources</filename> package as
                    the module is useful independent of the rest of the
                    setuptools package.
                    The main <filename>python-setuptools</filename> /
                    <filename>python3-setuptools</filename> package depends
                    on this new package so you should only need to update
                    dependencies unless you want to take advantage of the
                    increased granularity.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-3.0-cve-checking'>
        <title>CVE Checking</title>

        <para>
            <filename>cve-check-tool</filename> has been functionally replaced
            by a new <filename>cve-update-db</filename> recipe and
            functionality built into the <filename>cve-check</filename> class.
            The result uses NVD JSON data feeds rather than the deprecated
            XML feeds that <filename>cve-check-tool</filename> was using,
            supports CVSSv3 scoring, and makes other improvements.
        </para>

        <para>
            Additionally, the <filename>CVE_CHECK_CVE_WHITELIST</filename>
            variable has been replaced by
            <filename>CVE_CHECK_WHITELIST</filename>.
        </para>
    </section>

    <section id='migration-3.0-bitbake-changes'>
        <title>Bitbake Changes</title>

        <para>
            The following BitBake changes have occurred.
            <itemizedlist>
                <listitem><para>
                    <filename>addtask</filename> statements now properly
                    validate dependent tasks.
                    Previously, an invalid task was silently ignored.
                    With this change, the invalid task generates a warning.
                    </para></listitem>
                <listitem><para>
                    Other invalid <filename>addtask</filename> and
                    <filename>deltask</filename> usages now trigger these
                    warnings: "multiple target tasks arguments with
                    addtask / deltask", and "multiple before/after clauses".
                    </para></listitem>
                <listitem><para>
                    The "multiconfig" prefix is now shortened to "mc".
                    "multiconfig" will continue to work, however it may be
                    removed in a future release.
                    </para></listitem>
                <listitem><para>
                    The <filename>bitbake -g</filename> command no longer
                    generates a <filename>recipe-depends.dot</filename> file
                    as the contents (i.e. a reprocessed version of
                    <filename>task-depends.dot</filename>) were confusing.
                    </para></listitem>
                <listitem><para>
                    The <filename>bb.build.FuncFailed</filename> exception,
                    previously raised by
                    <filename>bb.build.exec_func()</filename> when certain
                    other exceptions have occurred, has been removed.
                    The real underlying exceptions will be raised instead.
                    If you have calls to
                    <filename>bb.build.exec_func()</filename> in custom classes
                    or <filename>tinfoil-using</filename> scripts, any
                    references to <filename>bb.build.FuncFailed</filename>
                    should be cleaned up.
                    </para></listitem>
                <listitem><para>
                    Additionally, the
                    <filename>bb.build.exec_func()</filename> no longer accepts
                    the "pythonexception" parameter.
                    The function now always raises exceptions.
                    Remove this argument in any calls to
                    <filename>bb.build.exec_func()</filename> in custom classes
                    or scripts.
                    </para></listitem>
                <listitem><para>
                    The
                    <ulink url='&YOCTO_DOCS_BB_URL;#var-bb-BB_SETSCENE_VERIFY_FUNCTION2'><filename>BB_SETSCENE_VERIFY_FUNCTION2</filename></ulink>
                    is no longer used.
                    In the unlikely event that you have any references to it,
                    they should be removed.
                    </para></listitem>
                <listitem><para>
                    The <filename>RunQueueExecuteScenequeue</filename> and
                    <filename>RunQueueExecuteTasks</filename> events have been
                    removed since setscene tasks are now executed as part of
                    the normal runqueue.
                    Any event handling code in custom classes or scripts that
                    handles these two events need to be updated.
                    </para></listitem>
                <listitem><para>
                    The arguments passed to functions used with
                    <ulink url='&YOCTO_DOCS_BB_URL;#var-bb-BB_HASHCHECK_FUNCTION'><filename>BB_HASHCHECK_FUNCTION</filename></ulink>
                    have changed.
                    If you are using your own custom hash check function, see
                    <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=40a5e193c4ba45c928fccd899415ea56b5417725'></ulink>
                    for details.
                    </para></listitem>
                <listitem><para>
                    Task specifications in <filename>BB_TASKDEPDATA</filename>
                    and class implementations used in signature generator
                    classes now use "&lt;fn&gt;:&lt;task&gt;" everywhere rather than
                    the "." delimiter that was being used in some places.
                    This change makes it consistent with all areas in the code.
                    Custom signature generator classes and code that reads
                    <filename>BB_TASKDEPDATA</filename> need to be updated to
                    use ':' as a separator rather than '.'.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-3.0-sanity-checks'>
        <title>Sanity Checks</title>

        <para>
            The following sanity check changes occurred.
            <itemizedlist>
                <listitem><para>
                    <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
                    is now checked for usage of two problematic items:
                    <itemizedlist>
                        <listitem><para>
                            "${PN}" prefix/suffix use - Warnings always appear
                            if ${PN} is used.
                            You must fix the issue regardless of whether
                            multiconfig or anything else that would cause
                            prefixing/suffixing to happen.
                            </para></listitem>
                        <listitem><para>
                            Github archive tarballs - these are not guaranteed
                            to be stable.
                            Consequently, it is likely that the tarballs will
                            be refreshed and thus the SRC_URI checksums
                            will fail to apply.
                            It is recommended that you fetch either an official
                            release tarball or a specific revision from the
                            actual Git repository instead.
                            </para></listitem>
                    </itemizedlist>
                    Either one of these items now trigger a warning by default.
                    If you wish to disable this check, remove
                    <filename>src-uri-bad</filename> from
                    <link linkend='var-WARN_QA'><filename>WARN_QA</filename></link>.
                    </para></listitem>
                <listitem><para>
                    The <filename>file-rdeps</filename> runtime dependency
                    check no longer expands
                    <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
                    recursively as there is no mechanism to ensure they can be
                    fully computed, and thus races sometimes result in errors
                    either showing up or not.
                    Thus, you might now see errors for missing runtime
                    dependencies that were previously satisfied recursively.
                    Here is an example: package A contains a shell script
                    starting with <filename>#!/bin/bash</filename> but has no
                    dependency on bash.
                    However, package A depends on package B, which does depend
                    on bash.
                    You need to add the missing dependency or dependencies to
                    resolve the warning.
                    </para></listitem>
                <listitem><para>
                    Setting <filename>DEPENDS_${PN}</filename> anywhere
                    (i.e. typically in a recipe) now triggers an error.
                    The error is triggered because
                    <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
                    is not a package-specific variable unlike RDEPENDS.
                    You should set <filename>DEPENDS</filename> instead.
                    </para></listitem>
                <listitem><para>
                    systemd currently does not work well with the musl C
                    library because only upstream officially supports linking
                    the library with glibc.
                    Thus, a warning is shown when building systemd in
                    conjunction with musl.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-3.0-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following miscellaneous changes have occurred.
            <itemizedlist>
                <listitem><para>
                    The <filename>gnome</filename>
                    class has been removed because it now does very little.
                    You should update recipes that previously inherited this
                    class to do the following:
                    <literallayout class='monospaced'>
     inherit gnomebase gtk-icon-cache gconf mime
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    The
                    <filename>meta/recipes-kernel/linux/linux-dtb.inc</filename>
                    file has been removed.
                    This file was previously deprecated in favor of setting
                    <link linkend='var-KERNEL_DEVICETREE'><filename>KERNEL_DEVICETREE</filename></link>
                    in any kernel recipe and only produced a warning.
                    Remove any <filename>include</filename> or
                    <filename>require</filename> statements pointing to this
                    file.
                    </para></listitem>
                <listitem><para>
                    <link linkend='var-TARGET_CFLAGS'><filename>TARGET_CFLAGS</filename></link>,
                    <link linkend='var-TARGET_CPPFLAGS'><filename>TARGET_CPPFLAGS</filename></link>,
                    <link linkend='var-TARGET_CXXFLAGS'><filename>TARGET_CXXFLAGS</filename></link>,
                    and
                    <link linkend='var-TARGET_LDFLAGS'><filename>TARGET_LDFLAGS</filename></link>
                    are no longer exported to the external environment.
                    This change did not require any changes to core recipes,
                    which is a good indicator that no changes will be
                    required.
                    However, if for some reason the software being built by one
                    of your recipes is expecting these variables to be set,
                    then building the recipe will fail.
                    In such cases, you must either export the variable or
                    variables in the recipe or change the scripts so that
                    exporting is not necessary.
                    </para></listitem>
                <listitem><para>
                    You must change the host distro identifier used in
                    <link linkend='var-NATIVELSBSTRING'><filename>NATIVELSBSTRING</filename></link>
                    to use all lowercase characters even if it does not contain
                    a version number.
                    This change is necessary only if you are not using
                    <filename>uninative</filename> and
                    <link linkend='var-SANITY_TESTED_DISTROS'><filename>SANITY_TESTED_DISTROS</filename></link>.
                    </para></listitem>
                <listitem><para>
                    In the <filename>base-files</filename> recipe, writing the
                    hostname into <filename>/etc/hosts</filename> and
                    <filename>/etc/hostname</filename> is now done within the
                    main
                    <link linkend='ref-tasks-install'><filename>do_install</filename></link>
                    function rather than in the
                    <filename>do_install_basefilesissue</filename> function.
                    The reason for the change is because
                    <filename>do_install_basefilesissue</filename> is more
                    easily overridden without having to duplicate the hostname
                    functionality.
                    If you have done the latter (e.g. in a
                    <filename>base-files</filename> bbappend), then you should
                    remove it from your customized
                    <filename>do_install_basefilesissue</filename> function.
                    </para></listitem>
                <listitem><para>
                    The <filename>wic --expand</filename> command now uses
                    commas to separate "key:value" pairs rather than hyphens.
                    <note>
                        The wic command-line help is not updated.
                    </note>
                    You must update any scripts or commands where you use
                    <filename>wic --expand</filename> with multiple
                    "key:value" pairs.
                    </para></listitem>
                <listitem><para>
                    UEFI image variable settings have been moved from various
                    places to a central
                    <filename>conf/image-uefi.conf</filename>.
                    This change should not influence any existing configuration
                    as the <filename>meta/conf/image-uefi.conf</filename>
                    in the core metadata sets defaults that can be overridden
                    in the same manner as before.
                    </para></listitem>
                <listitem><para>
                    <filename>conf/distro/include/world-broken.inc</filename>
                    has been removed.
                    For cases where certain recipes need to be disabled when
                    using the musl C library, these recipes now have
                    <filename>COMPATIBLE_HOST_libc-musl</filename> set with a
                    comment that explains why.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

</chapter>
<!--
vim: expandtab tw=80 ts=4
-->
