<!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-python-and-gcc-versions'>Required Git, tar, Python and gcc 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-python-and-gcc-versions'>Required Git, tar, Python and gcc 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-python-and-gcc-versions'>Required Git, tar, Python and gcc 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_intercept delay_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_intercept delay_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>


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

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

    <section id='migration-3.1-minimum-system-requirements'>
        <title>Minimum system requirements</title>

        <para>
            The following versions / requirements of build host components have been updated:
            <itemizedlist>
                <listitem><para>gcc 5.0</para></listitem>
                <listitem><para>python 3.5</para></listitem>
                <listitem><para>tar 1.28</para></listitem>
                <listitem><para><filename>rpcgen</filename> is now required on the host (part of the <filename>libc-dev-bin</filename> package on Ubuntu, Debian and related distributions, and the <filename>glibc</filename> package on RPM-based distributions).</para></listitem>
            </itemizedlist>
            
            Additionally, the <filename>makeinfo</filename> and <filename>pod2man</filename>
            tools are <emphasis>no longer</emphasis> required on the host.
        </para>
    </section>

    <section id='migration-3.1-mpc8315e-rdb-removed'>
        <title>mpc8315e-rdb machine removed</title>

        <para>
            The MPC8315E-RDB machine is old/obsolete and unobtainable, thus given the maintenance burden
            the <filename>mpc8315e-rdb</filename> machine configuration that supported it has been removed
            in this release. The removal does leave a gap in official PowerPC reference hardware
            support; this may change in future if a suitable machine with accompanying support resources
            is found.
        </para>
    </section>
    
    <section id='migration-3.1-python-2-removed'>
        <title>Python 2 removed</title>

        <para>
            Due to the expiration of upstream support in January 2020, support for Python 2 has now been removed; it is recommended that you use Python 3 instead. If absolutely needed there is a meta-python2 community layer containing Python 2, related classes and various Python 2-based modules, however it should not be considered as supported.
        </para>
    </section>

    <section id='migration-3.1-reproducible-builds'>
        <title>Reproducible builds now enabled by default</title>

        <para>
            In order to avoid unnecessary differences in output files (aiding binary reproducibility), the Poky distribution configuration (<filename><link linkend='var-DISTRO'>DISTRO</link> = "poky"</filename>) now inherits the <filename>reproducible_build</filename> class by default.
        </para>
    </section>
    
    <section id='migration-3.1-ptest-feature-impact'>
        <title>Impact of ptest feature is now more significant</title>

        <para>
            The Poky distribution configuration (<filename><link linkend='var-DISTRO'>DISTRO</link> = "poky"</filename>) enables ptests by default to enable runtime testing of various components. In this release, a dependency needed to be added that has resulted in a significant increase in the number of components that will be built just when building a simple image such as core-image-minimal. If you do not need runtime tests enabled for core components, then it is recommended that you remove "ptest" from <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link> to save a significant amount of build time e.g. by adding the following in your configuration:

            <literallayout class='monospaced'>
      DISTRO_FEATURES_remove = "ptest"
            </literallayout>
        </para>
    </section>

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

        <para>
            The following recipes have been removed:

            <itemizedlist>
                <listitem><para><filename>chkconfig</filename>: obsolete</para></listitem>
                <listitem><para><filename>console-tools</filename>: obsolete</para></listitem>
                <listitem><para><filename>enchant</filename>: replaced by <filename>enchant2</filename></para></listitem>
                <listitem><para><filename>foomatic-filters</filename>: obsolete</para></listitem>
                <listitem><para><filename>libidn</filename>: no longer needed, moved to meta-oe</para></listitem>
                <listitem><para><filename>libmodulemd</filename>: replaced by <filename>libmodulemd-v1</filename></para></listitem>
                <listitem><para><filename>linux-yocto</filename>: drop 4.19, 5.2 version recipes (5.4 now provided)</para></listitem>
                <listitem><para><filename>nspr</filename>: no longer needed, moved to meta-oe</para></listitem>
                <listitem><para><filename>nss</filename>: no longer needed, moved to meta-oe</para></listitem>
                <listitem><para><filename>python</filename>: Python 2 removed (Python 3 preferred)</para></listitem>
                <listitem><para><filename>python-setuptools</filename>: Python 2 version removed (python3-setuptools preferred)</para></listitem>
                <listitem><para><filename>sysprof</filename>: no longer needed, moved to meta-oe</para></listitem>
                <listitem><para><filename>texi2html</filename>: obsolete</para></listitem>
                <listitem><para><filename>u-boot-fw-utils</filename>: functionally replaced by <filename>libubootenv</filename></para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-3.1-features-check'>
        <title>features_check class replaces distro_features_check</title>

        <para>
            The <filename>distro_features_check</filename> class has had its functionality expanded, now supporting <filename>ANY_OF_MACHINE_FEATURES</filename>, <filename>REQUIRED_MACHINE_FEATURES</filename>, <filename>CONFLICT_MACHINE_FEATURES</filename>, <filename>ANY_OF_COMBINED_FEATURES</filename>, <filename>REQUIRED_COMBINED_FEATURES</filename>, <filename>CONFLICT_COMBINED_FEATURES</filename>. As a result the class has now been renamed to <filename>features_check</filename>; the <filename>distro_features_check</filename> class still exists but generates a warning and redirects to the new class. In preparation for a future removal of the old class it is recommended that you update recipes currently inheriting <filename>distro_features_check</filename> to inherit <filename>features_check</filename> instead.
        </para>
    </section>

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

        <para>
            The following classes have been removed:

            <itemizedlist>
                <listitem><para><filename>distutils-base</filename>: moved to meta-python2</para></listitem>
                <listitem><para><filename>distutils</filename>: moved to meta-python2</para></listitem>
                <listitem><para><filename>libc-common</filename>: merged into the glibc recipe as nothing else used it.</para></listitem>
                <listitem><para><filename>python-dir</filename>: moved to meta-python2</para></listitem>
                <listitem><para><filename>pythonnative</filename>: moved to meta-python2</para></listitem>
                <listitem><para><filename>setuptools</filename>: moved to meta-python2</para></listitem>
                <listitem><para><filename>tinderclient</filename>: dropped as it was obsolete.</para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-3.1-src-uri-checksums'>
        <title>SRC_URI checksum behaviour</title>

        <para>
            Previously, recipes by tradition included both SHA256 and MD5 checksums for remotely fetched files in <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>, even though only one is actually mandated. However, the MD5 checksum does not add much given its inherent weakness; thus when a checksum fails only the SHA256 sum will now be printed. The md5sum will still be verified if it is specified.
        </para>
    </section>


    <section id='migration-3.1-npm'>
        <title>npm fetcher changes</title>

        <para>
            The npm fetcher has been completely reworked in this release. The npm fetcher now only fetches the package source itself and no longer the dependencies; there is now also an npmsw fetcher which explicitly fetches the shrinkwrap file and the dependencies. This removes the slightly awkward <filename>NPM_LOCKDOWN</filename> and <filename>NPM_SHRINKWRAP</filename> variables which pointed to local files; the lockdown file is no longer needed at all. Additionally, the package name in <filename>npm://</filename> entries in <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link> is now specified using a <filename>package</filename> parameter instead of the earlier <filename>name</filename> which overlapped with the generic <filename>name</filename> parameter. All recipes using the npm fetcher will need to be changed as a result. 
        </para>
        <para>
            An example of the new scheme:
            <literallayout class='monospaced'>
SRC_URI = "npm://registry.npmjs.org;package=array-flatten;version=1.1.1 \
           npmsw://${THISDIR}/npm-shrinkwrap.json"
            </literallayout>
            Another example where the sources are fetched from git rather than an npm repository:
            <literallayout class='monospaced'>
SRC_URI = "git://github.com/foo/bar.git;protocol=https \
           npmsw://${THISDIR}/npm-shrinkwrap.json"
            </literallayout>
        </para>
        <para>
            devtool and recipetool have also been updated to match with the npm fetcher changes. Other than producing working and more complete recipes for npm sources, there is also a minor change to the command line for devtool: the <filename>--fetch-dev</filename> option has been renamed to <filename>--npm-dev</filename> as it is npm-specific.
        </para>
    </section>
    
    
    <section id='migration-3.1-packaging-changes'>
        <title>Packaging changes</title>

        <para>
            <itemizedlist>
                <listitem><para><filename>intltool</filename> has been removed from <filename>packagegroup-core-sdk</filename> as it is rarely needed to build modern software - gettext can do most of the things it used to be needed for. <filename>intltool</filename> has also been removed from <filename>packagegroup-core-self-hosted</filename> as it is not needed to for standard builds.</para></listitem>
                <listitem><para>git: <filename>git-am</filename>, <filename>git-difftool</filename>, <filename>git-submodule</filename>, and <filename>git-request-pull</filename> are no longer perl-based, so are now installed with the main <filename>git</filename> package instead of within <filename>git-perltools</filename>.</para></listitem>
                <listitem><para>The <filename>ldconfig</filename> binary built as part of glibc has now been moved to its own <filename>ldconfig</filename> package (note no <filename>glibc-</filename> prefix). This package is in the <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link> of the main <filename>glibc</filename> package if <filename>ldconfig</filename> is present in <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.</para></listitem>
                <listitem><para><filename>libevent</filename> now splits each shared library into its own package (as Debian does). Since these are shared libraries and will be pulled in through the normal shared library dependency handling, there should be no impact to existing configurations other than less unnecessary libraries being installed in some cases.</para></listitem>
                <listitem><para>linux-firmware now has a new package for <filename>bcm4366c</filename> and includes available NVRAM config files into the <filename>bcm43340</filename>, <filename>bcm43362</filename>, <filename>bcm43430</filename> and <filename>bcm4356-pcie</filename> packages.</para></listitem>
                <listitem><para><filename>harfbuzz</filename> now splits the new <filename>libharfbuzz-subset.so</filename> library into its own package to reduce the main package size in cases where <filename>libharfbuzz-subset.so</filename> is not needed.</para></listitem>
            </itemizedlist>
        </para>
    </section>
    
    <section id='migration-3.1-package-qa-warnings'>
        <title>Additional warnings</title>

        <para>
            Warnings will now be shown at <filename>do_package_qa</filename> time in the following circumstances:
            
            <itemizedlist>
                <listitem><para>A recipe installs <filename>.desktop</filename> files containing <filename>MimeType</filename> keys but does not inherit the new <filename>mime-xdg</filename> class</para></listitem>
                <listitem><para>A recipe installs <filename>.xml</filename> files into <filename>${datadir}/mime/packages</filename> but does not inherit the <filename>mime</filename> class</para></listitem>
            </itemizedlist>
        </para>
    </section>
        
    <section id='migration-3.1-x86-live-wic'>
        <title><filename>wic</filename> image type now used instead of <filename>live</filename> by default for x86</title>

        <para>
            <filename>conf/machine/include/x86-base.inc</filename> (inherited by most x86 machine configurations) now specifies <filename>wic</filename> instead of <filename>live</filename> by default in <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>. The <filename>live</filename> image type will likely be removed in a future release so it is recommended that you use <filename>wic</filename> instead.
        </para>
    </section>
                
    <section id='migration-3.1-misc'>
        <title>Miscellaneous changes</title>

        <para>
            <itemizedlist>
                <listitem><para>The undocumented <filename>SRC_DISTRIBUTE_LICENSES</filename> variable has now been removed in favour of a new <filename>AVAILABLE_LICENSES</filename> variable which is dynamically set based upon license files found in <filename>${COMMON_LICENSE_DIR}</filename> and <filename>${LICENSE_PATH}</filename>.</para></listitem>
                <listitem><para>The tune definition for big-endian microblaze machines is now <filename>microblaze</filename> instead of <filename>microblazeeb</filename>.</para></listitem>
                <listitem><para><filename>newlib</filename> no longer has built-in syscalls. <filename>libgloss</filename> should then provide the syscalls, <filename>crt0.o</filename> and other functions that are no longer part of <filename>newlib</filename> itself. If you are using <filename>TCLIBC = "newlib"</filename> this now means that you must link applications with both <filename>newlib</filename> and <filename>libgloss</filename>, whereas before <filename>newlib</filename> would run in many configurations by itself.</para></listitem>
            </itemizedlist>
        </para>
    </section>

</section>


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