New versions of OpenEmbedded will be based on OpenEmbedded-Core (OE-core). OE-core has evolved from collaboration efforts with the Yocto project as well as a recognition that the model previously being used in OpenEmbedded was unsustainable.
The original OpenEmbedded repository (also known as "OE-classic" or "oe-dev") has grown organically over the years to more than 7500 recipes, covering approximately 300 machines and 20 distros. Trying to maintain this amount of metadata with machine and distro overrides scattered throughout is very difficult, and near to impossible to support commercially. Like many other OE forks that have been created to solve the same kinds of issues, Poky was forked as a cleaner and more supportable version of OE in 2006. Fast forward to 2011, Poky is now maintained by the Yocto Project with the support of the Linux Foundation. OE-core was split out from Poky in 2011 to allow collaboration around a relatively small and easily supportable base, with real machines, distros and other items removed - more on this below.
OE-classic will stop being maintained in the near future - there are no further stable releases planned based on the old codebase, and new efforts should be built on top of OE-core. The new OE layer ecosystem doesn't yet contain the full wealth of machine and application support that OE classic currently has, however recipes can be easily brought over, tidied up and placed into the appropriate layer over time.
Differences to OE-classic
The most significant change is that metadata is now split into multiple layers rather than being in one repository. OE-core sits at the bottom, and machine / application / distro layers are added on top. Users are free to select support for whatever applications or platforms they wish in their configuration simply by including the appropriate layer in their bblayers.conf file.
Machine and distro-specific overrides should no longer be spread over the entire set of recipes - instead they should be concentrated in appropriate machine support layers (often referred to as BSP (Board Support Package) layers) and distro layers respectively. BitBake's .bbappend feature allows overriding almost any element of a recipe without too much duplication across multiple layers.
Additionally, OE-core moves changes to a pull model rather than the push model of OE-classic - instead of all developers having direct commit access, patches are sent to the mailing list for review and if/when satisfactory they are merged by the maintainer. Other layers may choose to use either the push or pull model for contributions.
The scope of OE-core is currently not as well defined as it could be, however the following initial rules have been established:
- Support for five architectures: ARM, x86, x86-64, PowerPC and MIPS
- Only QEMU emulated machines
- Distro-less (DISTRO = "" and default values are used)
- Only one X-based GUI environment (Sato) intended for testing purposes. (This may be substituted out in future if a suitable replacement testing framework can be created.)
- Attempt to keep only one version of each recipe except for GPLv2 / v3 versions
Anything not in OE-core can easily be provided by another layer; other layers can also be used to support older versions that have been removed from OE-core.
For items shared amongst multiple layers that cannot be included (or immediately included) in OE-core, there is the meta-oe layer. This exists in a repository, also called meta-openembedded, which contains a number of other more focused layers (meta-efl, meta-gnome, etc.). This layer will need to be managed carefully over time to avoid it turning into just a newer version of OE-classic.
One-liner via oe-made-easy
git clone git://github.com/lloydchang/oe-made-easy.git; ./oe-made-easy/core-image-minimal
Multiple lines of instructions from Yocto Project
As OE-core can be used to build working images entirely on its own, you can get started with it immediately. See this page for instructions.
OpenEmbedded maintains an list of layers that can be used with OE-core - see LayerIndex.
See Creating a new Layer.