OE was started as a way to test drivers in TI (but done in the Chris Larson’s spare time). It had to be ‘one source tree, multiple configurations’.
Orthogonality between machine description, distro description, and the image.
MACHINE.conf defines arch tuning, kernel recipes, machine features, …
DISTRO.conf sets policy: Select ABI, compiler, C library, init system, package versions, package manager. PACKAGE_CONFIG tweaks sets options for packages.
image.bb is a selection of packages to install, and additional processing steps to actually create the image.
Layers were only added in 2010 for the Yocto Project. Split off the core section, with a maintainer and reviews. All the other stuff goes to separate git repos. But there were no real rules, slightly improved by introducing the “Yocto Project Compatible” stamp. Also a silo mentality since layers tend to look at themselves only. There’s an index of existing layers that also allows you to search for recipes and machines.
What is needed
Document use cases, e.g. what an SDK is good for, board bringup, creating a product.
Be more explicit what OpenEmbedded is not: not for application developers, not a distro, not yocto.
OE should respect the end user more: support external toolchains, support binary GPU drivers that depend on specific other packages (e.g. X), support ancient kernels.
More metrics about time spent, disk space needed, license checking, checking for wrong rpath.
Split off the image building as a separate tool, i.e. only build packages.
Get rid of FEATURES variables, it doesn’t match the philosophy. Similarly, make the split between machine, distro and image more mandatory.
Better tools for tracing why something gets added to the image or configured in a specific way.
Tools to empower maintainers: checkpatch, get-maintainer.
Maintainers should have the power to maintain: decide if a patch is accepted or not.
Pull requests are dangerous, since the tree you pull may not be exactly what was posted in the mailing list.