FutureMigrationGuide/2.2

This is an archived version of notes regarding changes which were mentioned in the Yocto Project 2.2/Morty Future Migration Guide. For the current development release please update FutureMigrationGuide.
=2.2 Migration Guide items=
* The mimimum kernel version is now 3.2.0, due to the upgrade to glibc 2.24. Specifically for aarch64-based targets it is 3.14, and nios2-based targets 3.19. Note: for x86/x86_64, OLDEST_KERNEL can be re-set to anything down to 2.6.32 if desired.
* How we stage directories in sysroot has been simplified and introduces some new variables (SYSROOT_DIRS, SYSROOT_DIRS_NATIVE, SYSROOT_DIRS_BLACKLIST). See the v2 patch series on the OE-Core mailing list: http://lists.openembedded.org/pipermail/openembedded-core/2016-May/121365.html
* Removal of old images and other files under tmp/deploy/ is now enabled by default due to a new staging method used for those files. As a consequence RM_OLD_IMAGE is now redundant.
* bitbake now requires python 3.4+
* The metadata now requires to use Python 3 syntax. There are many Python 3 porting guides out there, or the conversion commits for Bitbake and OE-Core can be used as a guide for changes. Particular areas of note are subprocess command line pipes needing locale decoding, the syntax for octal values changed, the iter*() functions changed name, iterators now return views, not lists and some python modules changed names.
* 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 via SMART still require Python 2
* Uclibc removed in favour of musl
* ${B} is no longer the default working directory for tasks, so any custom tasks you define now need to either have the dirs varflag set 
* We require a UTF-8 locale on the build host due to Python 3. As C.UTF-8 isn't a standard we default to en_US.UTF-8
* runqemu ported to Python and changes behaviour in some cases (NEEDS docs)
* Bitbake changes:
** The "goggle" UI and standalone image-writer tool have been removed as they both require GTK+ 2.0 and weren't being maintained.
** The Perforce fetcher now supports SRCREV for specifying the source revision to use, be it ${AUTOREV}, changelist number, p4date, or label, in preference to separate SRC_URI parameters to specify these. This 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 SRCREV in place of specifying the source revision within SRC_URI.
** Some of BitBake's internal code structures for storing the recipe cache needed to be changed to support the new multiconfig functionality. This 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: 1 2.
** The task management code has been rewritten to avoid using ID indirection in order to improve performance. This is unlikely to cause any problems for most users, however the setscene verification function as pointed to by BB_SETSCENE_VERIFY_FUNCTION needed to change signature, and thus a BB_SETSCENE_VERIFY_FUNCTION2 variable has been added allowing multiple versions of bitbake to work with suitably written metadata (which includes OpenEmbedded-Core / Poky). Anyone with custom bitbake task scheduler code may also need to update it to handle the new structure.
* 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's less of a need for such a tool.
* Removed recipes:
** augeas: no longer needed - moved to meta-oe
** directfb: unmaintained - moved to meta-oe
** gcc: remove 4.9 version (5.4 and 6.2 still present)
** gnome-doc-utils: no longer needed
** gtk-doc-stub: replaced by gtk-doc
** gtk-engines: no longer needed - moved to meta-gnome
** gtk-sato-engine: obsolete
** libglade: no longer needed - moved to meta-oe
** libmad: unmaintained and functionally replaced by libmpg123 - moved to meta-oe.
** libowl: obsolete
** libxsettings-client: no longer needed
** oh-puzzles: functionally replaced by puzzles
** oprofileui: obsolete (oprofile has been largely supplanted by perf)
** packagegroup-core-directfb.bb, core-image-directfb.bb - removed along with directfb
** pointercal: no longer needed - moved to meta-oe
** python-imaging: no longer needed - moved to meta-python
** python-pyrex: no longer needed - moved to meta-python
** sato-icon-theme: obsolete
** swabber-native: see above
** tslib: no longer needed - moved to meta-oe
** uclibc: removed in favour of musl
** xtscal: no longer needed - moved to meta-oe
* Removed classes:
** distutils-native-base / distutils3-native-base: no longer needed
** sdl: only set DEPENDS and SECTION, which are better set within the recipe instead.
** sip: mostly unused
** swabber: see above
* Minor packaging changes;
** grub: split grub-editenv into it's own package
** systemd: split container/vm related units into a new package, systemd-container.
** util-linux: make prlimit a separate package
* Misc:
** buildtools-tarball: replace nativesdk-python with nativesdk-python3
** package_regex.inc: remove deprecated file
** recipetool / devtool: set a fixed SRCREV by default when fetching from git
** distcc: GTK+ UI is now disabled by default
** packagegroup-core-tools-testapps: removed Piglit
** image.bbclass: rename COMPRESS(ION) to CONVERSION