1*4882a593Smuzhiyun.. SPDX-License-Identifier: CC-BY-SA-2.0-UK 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun******************* 4*4882a593SmuzhiyunYocto Project Terms 5*4882a593Smuzhiyun******************* 6*4882a593Smuzhiyun 7*4882a593SmuzhiyunFollowing is a list of terms and definitions users new to the Yocto Project 8*4882a593Smuzhiyundevelopment environment might find helpful. While some of these terms are 9*4882a593Smuzhiyununiversal, the list includes them just in case: 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun.. glossary:: 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun :term:`Append Files` 14*4882a593Smuzhiyun Files that append build information to a recipe file. Append files are 15*4882a593Smuzhiyun known as BitBake append files and ``.bbappend`` files. The OpenEmbedded 16*4882a593Smuzhiyun build system expects every append file to have a corresponding recipe 17*4882a593Smuzhiyun (``.bb``) file. Furthermore, the append file and corresponding recipe file 18*4882a593Smuzhiyun must use the same root filename. The filenames can differ only in the 19*4882a593Smuzhiyun file type suffix used (e.g. ``formfactor_0.0.bb`` and 20*4882a593Smuzhiyun ``formfactor_0.0.bbappend``). 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun Information in append files extends or overrides the information in the 23*4882a593Smuzhiyun similarly-named recipe file. For an example of an append file in use, see 24*4882a593Smuzhiyun the ":ref:`dev-manual/common-tasks:appending other layers metadata with your layer`" 25*4882a593Smuzhiyun section in the Yocto Project Development Tasks Manual. 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun When you name an append file, you can use the "``%``" wildcard character 28*4882a593Smuzhiyun to allow for matching recipe names. For example, suppose you have an 29*4882a593Smuzhiyun append file named as follows:: 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun busybox_1.21.%.bbappend 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun That append file 34*4882a593Smuzhiyun would match any ``busybox_1.21.x.bb`` version of the recipe. So, 35*4882a593Smuzhiyun the append file would match any of the following recipe names: 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun .. code-block:: shell 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun busybox_1.21.1.bb 40*4882a593Smuzhiyun busybox_1.21.2.bb 41*4882a593Smuzhiyun busybox_1.21.3.bb 42*4882a593Smuzhiyun busybox_1.21.10.bb 43*4882a593Smuzhiyun busybox_1.21.25.bb 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun .. note:: 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun The use of the "%" character is limited in that it only works 48*4882a593Smuzhiyun directly in front of the .bbappend portion of the append file's 49*4882a593Smuzhiyun name. You cannot use the wildcard character in any other location of 50*4882a593Smuzhiyun the name. 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun :term:`BitBake` 53*4882a593Smuzhiyun The task executor and scheduler used by the OpenEmbedded build system to 54*4882a593Smuzhiyun build images. For more information on BitBake, see the :doc:`BitBake User 55*4882a593Smuzhiyun Manual <bitbake:index>`. 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun :term:`Board Support Package (BSP)` 58*4882a593Smuzhiyun A group of drivers, definitions, and other components that provide support 59*4882a593Smuzhiyun for a specific hardware configuration. For more information on BSPs, see 60*4882a593Smuzhiyun the :doc:`/bsp-guide/index`. 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun :term:`Build Directory` 63*4882a593Smuzhiyun This term refers to the area used by the OpenEmbedded build system for 64*4882a593Smuzhiyun builds. The area is created when you ``source`` the setup environment 65*4882a593Smuzhiyun script that is found in the Source Directory 66*4882a593Smuzhiyun (i.e. :ref:`ref-manual/structure:\`\`oe-init-build-env\`\``). The 67*4882a593Smuzhiyun :term:`TOPDIR` variable points to the Build Directory. 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun You have a lot of flexibility when creating the Build Directory. 70*4882a593Smuzhiyun Following are some examples that show how to create the directory. The 71*4882a593Smuzhiyun examples assume your :term:`Source Directory` is named ``poky``: 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun - Create the Build Directory inside your Source Directory and let 74*4882a593Smuzhiyun the name of the Build Directory default to ``build``: 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun .. code-block:: shell 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun $ cd poky 79*4882a593Smuzhiyun $ source oe-init-build-env 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun - Create the Build Directory inside your home directory and 82*4882a593Smuzhiyun specifically name it ``test-builds``: 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun .. code-block:: shell 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun $ source poky/oe-init-build-env test-builds 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun - Provide a directory path and specifically name the Build 89*4882a593Smuzhiyun Directory. Any intermediate folders in the pathname must exist. 90*4882a593Smuzhiyun This next example creates a Build Directory named 91*4882a593Smuzhiyun ``YP-&DISTRO;`` within the existing directory ``mybuilds``: 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun .. code-block:: shell 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun $ source poky/oe-init-build-env mybuilds/YP-&DISTRO; 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun .. note:: 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun By default, the Build Directory contains :term:`TMPDIR`, which is a 100*4882a593Smuzhiyun temporary directory the build system uses for its work. :term:`TMPDIR` cannot 101*4882a593Smuzhiyun be under NFS. Thus, by default, the Build Directory cannot be under 102*4882a593Smuzhiyun NFS. However, if you need the Build Directory to be under NFS, you can 103*4882a593Smuzhiyun set this up by setting :term:`TMPDIR` in your ``local.conf`` file to use a local 104*4882a593Smuzhiyun drive. Doing so effectively separates :term:`TMPDIR` from :term:`TOPDIR`, which is the 105*4882a593Smuzhiyun Build Directory. 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun :term:`Build Host` 108*4882a593Smuzhiyun The system used to build images in a Yocto Project Development 109*4882a593Smuzhiyun environment. The build system is sometimes referred to as the development 110*4882a593Smuzhiyun host. 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun :term:`Classes` 113*4882a593Smuzhiyun Files that provide for logic encapsulation and inheritance so that 114*4882a593Smuzhiyun commonly used patterns can be defined once and then easily used in 115*4882a593Smuzhiyun multiple recipes. For reference information on the Yocto Project classes, 116*4882a593Smuzhiyun see the ":ref:`ref-manual/classes:Classes`" chapter. Class files end with the 117*4882a593Smuzhiyun ``.bbclass`` filename extension. 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun :term:`Configuration File` 120*4882a593Smuzhiyun Files that hold global definitions of variables, user-defined variables, 121*4882a593Smuzhiyun and hardware configuration information. These files tell the OpenEmbedded 122*4882a593Smuzhiyun build system what to build and what to put into the image to support a 123*4882a593Smuzhiyun particular platform. 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun Configuration files end with a ``.conf`` filename extension. The 126*4882a593Smuzhiyun :file:`conf/local.conf` configuration file in the :term:`Build Directory` 127*4882a593Smuzhiyun contains user-defined variables that affect every build. The 128*4882a593Smuzhiyun :file:`meta-poky/conf/distro/poky.conf` configuration file defines Yocto 129*4882a593Smuzhiyun "distro" configuration variables used only when building with this 130*4882a593Smuzhiyun policy. Machine configuration files, which are located throughout the 131*4882a593Smuzhiyun :term:`Source Directory`, define variables for specific hardware and are 132*4882a593Smuzhiyun only used when building for that target (e.g. the 133*4882a593Smuzhiyun :file:`machine/beaglebone.conf` configuration file defines variables for 134*4882a593Smuzhiyun the Texas Instruments ARM Cortex-A8 development board). 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun :term:`Container Layer` 137*4882a593Smuzhiyun A flexible definition that typically refers to a single Git checkout 138*4882a593Smuzhiyun which contains multiple (and typically related) sub-layers which can 139*4882a593Smuzhiyun be included independently in your project's ``bblayers.conf`` file. 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun In some cases, such as with OpenEmbedded's 142*4882a593Smuzhiyun `meta-openembedded <https://github.com/openembedded/meta-openembedded>`_ 143*4882a593Smuzhiyun layer, the top level ``meta-openembedded/`` directory is not itself an actual layer, 144*4882a593Smuzhiyun so you would never explicitly include it in a ``bblayers.conf`` file; 145*4882a593Smuzhiyun rather, you would include any number of its layer subdirectories, such as 146*4882a593Smuzhiyun `meta-openembedded/meta-oe <https://github.com/openembedded/meta-openembedded/tree/master/meta-oe>`_, 147*4882a593Smuzhiyun `meta-openembedded/meta-python <https://github.com/openembedded/meta-openembedded/tree/master/meta-python>`_ 148*4882a593Smuzhiyun and so on. 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun On the other hand, some container layers (such as 151*4882a593Smuzhiyun :yocto_git:`meta-security </meta-security>`) 152*4882a593Smuzhiyun have a top-level directory that is itself an actual layer, as well as 153*4882a593Smuzhiyun a variety of sub-layers, both of which could be included in your 154*4882a593Smuzhiyun ``bblayers.conf`` file. 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun In either case, the phrase "container layer" is simply used to describe 157*4882a593Smuzhiyun a directory structure which contains multiple valid OpenEmbedded layers. 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun :term:`Cross-Development Toolchain` 160*4882a593Smuzhiyun In general, a cross-development toolchain is a collection of software 161*4882a593Smuzhiyun development tools and utilities that run on one architecture and allow you 162*4882a593Smuzhiyun to develop software for a different, or targeted, architecture. These 163*4882a593Smuzhiyun toolchains contain cross-compilers, linkers, and debuggers that are 164*4882a593Smuzhiyun specific to the target architecture. 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun The Yocto Project supports two different cross-development toolchains: 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun - A toolchain only used by and within BitBake when building an image for a 169*4882a593Smuzhiyun target architecture. 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun - A relocatable toolchain used outside of BitBake by developers when 172*4882a593Smuzhiyun developing applications that will run on a targeted device. 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun Creation of these toolchains is simple and automated. For information on 175*4882a593Smuzhiyun toolchain concepts as they apply to the Yocto Project, see the 176*4882a593Smuzhiyun ":ref:`overview-manual/concepts:Cross-Development 177*4882a593Smuzhiyun Toolchain Generation`" section in the Yocto Project Overview and Concepts 178*4882a593Smuzhiyun Manual. You can also find more information on using the relocatable 179*4882a593Smuzhiyun toolchain in the :doc:`/sdk-manual/index` manual. 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun :term:`Extensible Software Development Kit (eSDK)` 182*4882a593Smuzhiyun A custom SDK for application developers. This eSDK allows developers to 183*4882a593Smuzhiyun incorporate their library and programming changes back into the image to 184*4882a593Smuzhiyun make their code available to other application developers. 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun For information on the eSDK, see the :doc:`/sdk-manual/index` manual. 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun :term:`Image` 189*4882a593Smuzhiyun An image is an artifact of the BitBake build process given a collection of 190*4882a593Smuzhiyun recipes and related Metadata. Images are the binary output that run on 191*4882a593Smuzhiyun specific hardware or QEMU and are used for specific use-cases. For a list 192*4882a593Smuzhiyun of the supported image types that the Yocto Project provides, see the 193*4882a593Smuzhiyun ":ref:`ref-manual/images:Images`" chapter. 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun :term:`Layer` 196*4882a593Smuzhiyun A collection of related recipes. Layers allow you to consolidate related 197*4882a593Smuzhiyun metadata to customize your build. Layers also isolate information used 198*4882a593Smuzhiyun when building for multiple architectures. Layers are hierarchical in 199*4882a593Smuzhiyun their ability to override previous specifications. You can include any 200*4882a593Smuzhiyun number of available layers from the Yocto Project and customize the build 201*4882a593Smuzhiyun by adding your layers after them. You can search the Layer Index for 202*4882a593Smuzhiyun layers used within Yocto Project. 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun For introductory information on layers, see the 205*4882a593Smuzhiyun ":ref:`overview-manual/yp-intro:The Yocto Project Layer 206*4882a593Smuzhiyun Model`" section in the Yocto Project Overview and Concepts Manual. For 207*4882a593Smuzhiyun more detailed information on layers, see the 208*4882a593Smuzhiyun ":ref:`dev-manual/common-tasks:Understanding and Creating 209*4882a593Smuzhiyun Layers`" section in the Yocto Project Development Tasks Manual. For a 210*4882a593Smuzhiyun discussion specifically on BSP Layers, see the ":ref:`bsp-guide/bsp:BSP 211*4882a593Smuzhiyun Layers`" section in the Yocto Project Board Support Packages (BSP) 212*4882a593Smuzhiyun Developer's Guide. 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun :term:`Metadata` 215*4882a593Smuzhiyun A key element of the Yocto Project is the Metadata that 216*4882a593Smuzhiyun is used to construct a Linux distribution and is contained in the 217*4882a593Smuzhiyun files that the :term:`OpenEmbedded Build System` 218*4882a593Smuzhiyun parses when building an image. In general, Metadata includes recipes, 219*4882a593Smuzhiyun configuration files, and other information that refers to the build 220*4882a593Smuzhiyun instructions themselves, as well as the data used to control what 221*4882a593Smuzhiyun things get built and the effects of the build. Metadata also includes 222*4882a593Smuzhiyun commands and data used to indicate what versions of software are 223*4882a593Smuzhiyun used, from where they are obtained, and changes or additions to the 224*4882a593Smuzhiyun software itself (patches or auxiliary files) that are used to fix 225*4882a593Smuzhiyun bugs or customize the software for use in a particular situation. 226*4882a593Smuzhiyun OpenEmbedded-Core is an important set of validated metadata. 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun In the context of the kernel ("kernel Metadata"), the term refers to 229*4882a593Smuzhiyun the kernel config fragments and features contained in the 230*4882a593Smuzhiyun :yocto_git:`yocto-kernel-cache </yocto-kernel-cache>` 231*4882a593Smuzhiyun Git repository. 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun :term:`OpenEmbedded-Core (OE-Core)` 234*4882a593Smuzhiyun OE-Core is metadata comprised of 235*4882a593Smuzhiyun foundational recipes, classes, and associated files that are meant to 236*4882a593Smuzhiyun be common among many different OpenEmbedded-derived systems, 237*4882a593Smuzhiyun including the Yocto Project. OE-Core is a curated subset of an 238*4882a593Smuzhiyun original repository developed by the OpenEmbedded community that has 239*4882a593Smuzhiyun been pared down into a smaller, core set of continuously validated 240*4882a593Smuzhiyun recipes. The result is a tightly controlled and an quality-assured 241*4882a593Smuzhiyun core set of recipes. 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun You can see the Metadata in the ``meta`` directory of the Yocto 244*4882a593Smuzhiyun Project :yocto_git:`Source Repositories </poky>`. 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun :term:`OpenEmbedded Build System` 247*4882a593Smuzhiyun The build system specific to the Yocto 248*4882a593Smuzhiyun Project. The OpenEmbedded build system is based on another project 249*4882a593Smuzhiyun known as "Poky", which uses :term:`BitBake` as the task 250*4882a593Smuzhiyun executor. Throughout the Yocto Project documentation set, the 251*4882a593Smuzhiyun OpenEmbedded build system is sometimes referred to simply as "the 252*4882a593Smuzhiyun build system". If other build systems, such as a host or target build 253*4882a593Smuzhiyun system are referenced, the documentation clearly states the 254*4882a593Smuzhiyun difference. 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun .. note:: 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun For some historical information about Poky, see the :term:`Poky` term. 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun :term:`Package` 261*4882a593Smuzhiyun In the context of the Yocto Project, this term refers to a 262*4882a593Smuzhiyun recipe's packaged output produced by BitBake (i.e. a "baked recipe"). 263*4882a593Smuzhiyun A package is generally the compiled binaries produced from the 264*4882a593Smuzhiyun recipe's sources. You "bake" something by running it through BitBake. 265*4882a593Smuzhiyun 266*4882a593Smuzhiyun It is worth noting that the term "package" can, in general, have 267*4882a593Smuzhiyun subtle meanings. For example, the packages referred to in the 268*4882a593Smuzhiyun ":ref:`ref-manual/system-requirements:required packages for the build host`" 269*4882a593Smuzhiyun section are compiled binaries that, when installed, add functionality to 270*4882a593Smuzhiyun your Linux distribution. 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun Another point worth noting is that historically within the Yocto 273*4882a593Smuzhiyun Project, recipes were referred to as packages - thus, the existence 274*4882a593Smuzhiyun of several BitBake variables that are seemingly mis-named, (e.g. 275*4882a593Smuzhiyun :term:`PR`, :term:`PV`, and 276*4882a593Smuzhiyun :term:`PE`). 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun :term:`Package Groups` 279*4882a593Smuzhiyun Arbitrary groups of software Recipes. You use 280*4882a593Smuzhiyun package groups to hold recipes that, when built, usually accomplish a 281*4882a593Smuzhiyun single task. For example, a package group could contain the recipes 282*4882a593Smuzhiyun for a company's proprietary or value-add software. Or, the package 283*4882a593Smuzhiyun group could contain the recipes that enable graphics. A package group 284*4882a593Smuzhiyun is really just another recipe. Because package group files are 285*4882a593Smuzhiyun recipes, they end with the ``.bb`` filename extension. 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun :term:`Poky` 288*4882a593Smuzhiyun Poky, which is pronounced *Pock*-ee, is a reference embedded 289*4882a593Smuzhiyun distribution and a reference test configuration. Poky provides the 290*4882a593Smuzhiyun following: 291*4882a593Smuzhiyun 292*4882a593Smuzhiyun - A base-level functional distro used to illustrate how to customize 293*4882a593Smuzhiyun a distribution. 294*4882a593Smuzhiyun 295*4882a593Smuzhiyun - A means by which to test the Yocto Project components (i.e. Poky 296*4882a593Smuzhiyun is used to validate the Yocto Project). 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun - A vehicle through which you can download the Yocto Project. 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun Poky is not a product level distro. Rather, it is a good starting 301*4882a593Smuzhiyun point for customization. 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun .. note:: 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun Poky began as an open-source project initially developed by 306*4882a593Smuzhiyun OpenedHand. OpenedHand developed Poky from the existing 307*4882a593Smuzhiyun OpenEmbedded build system to create a commercially supportable 308*4882a593Smuzhiyun build system for embedded Linux. After Intel Corporation acquired 309*4882a593Smuzhiyun OpenedHand, the poky project became the basis for the Yocto 310*4882a593Smuzhiyun Project's build system. 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun :term:`Recipe` 313*4882a593Smuzhiyun A set of instructions for building packages. A recipe 314*4882a593Smuzhiyun describes where you get source code, which patches to apply, how to 315*4882a593Smuzhiyun configure the source, how to compile it and so on. Recipes also 316*4882a593Smuzhiyun describe dependencies for libraries or for other recipes. Recipes 317*4882a593Smuzhiyun represent the logical unit of execution, the software to build, the 318*4882a593Smuzhiyun images to build, and use the ``.bb`` file extension. 319*4882a593Smuzhiyun 320*4882a593Smuzhiyun :term:`Reference Kit` 321*4882a593Smuzhiyun A working example of a system, which includes a 322*4882a593Smuzhiyun :term:`BSP<Board Support Package (BSP)>` as well as a 323*4882a593Smuzhiyun :term:`build host<Build Host>` and other components, that can 324*4882a593Smuzhiyun work on specific hardware. 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun :term:`SBOM` 327*4882a593Smuzhiyun This term means *Software Bill of Materials*. When you distribute 328*4882a593Smuzhiyun software, it offers a description of all the components you used, 329*4882a593Smuzhiyun their corresponding licenses, their dependencies, the changes that were 330*4882a593Smuzhiyun applied and the known vulnerabilities that were fixed. 331*4882a593Smuzhiyun 332*4882a593Smuzhiyun This can be used by the recipients of the software to assess 333*4882a593Smuzhiyun their exposure to license compliance and security vulnerability issues. 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun See the :wikipedia:`Software Supply Chain <Software_supply_chain>` 336*4882a593Smuzhiyun article on Wikipedia for more details. 337*4882a593Smuzhiyun 338*4882a593Smuzhiyun The OpenEmbedded Build System can generate such documentation for your 339*4882a593Smuzhiyun project, in :term:`SPDX` format, based on all the metadata it used to 340*4882a593Smuzhiyun build the software images. See the ":ref:`dev-manual/common-tasks:creating 341*4882a593Smuzhiyun a software bill of materials`" section of the Development Tasks manual. 342*4882a593Smuzhiyun 343*4882a593Smuzhiyun :term:`Source Directory` 344*4882a593Smuzhiyun This term refers to the directory structure 345*4882a593Smuzhiyun created as a result of creating a local copy of the ``poky`` Git 346*4882a593Smuzhiyun repository ``git://git.yoctoproject.org/poky`` or expanding a 347*4882a593Smuzhiyun released ``poky`` tarball. 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun .. note:: 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun Creating a local copy of the 352*4882a593Smuzhiyun poky 353*4882a593Smuzhiyun Git repository is the recommended method for setting up your 354*4882a593Smuzhiyun Source Directory. 355*4882a593Smuzhiyun 356*4882a593Smuzhiyun Sometimes you might hear the term "poky directory" used to refer to 357*4882a593Smuzhiyun this directory structure. 358*4882a593Smuzhiyun 359*4882a593Smuzhiyun .. note:: 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun The OpenEmbedded build system does not support file or directory 362*4882a593Smuzhiyun names that contain spaces. Be sure that the Source Directory you 363*4882a593Smuzhiyun use does not contain these types of names. 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun The Source Directory contains BitBake, Documentation, Metadata and 366*4882a593Smuzhiyun other files that all support the Yocto Project. Consequently, you 367*4882a593Smuzhiyun must have the Source Directory in place on your development system in 368*4882a593Smuzhiyun order to do any development using the Yocto Project. 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun When you create a local copy of the Git repository, you can name the 371*4882a593Smuzhiyun repository anything you like. Throughout much of the documentation, 372*4882a593Smuzhiyun "poky" is used as the name of the top-level folder of the local copy 373*4882a593Smuzhiyun of the poky Git repository. So, for example, cloning the ``poky`` Git 374*4882a593Smuzhiyun repository results in a local Git repository whose top-level folder 375*4882a593Smuzhiyun is also named "poky". 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun While it is not recommended that you use tarball extraction to set up 378*4882a593Smuzhiyun the Source Directory, if you do, the top-level directory name of the 379*4882a593Smuzhiyun Source Directory is derived from the Yocto Project release tarball. 380*4882a593Smuzhiyun For example, downloading and unpacking poky tarballs from 381*4882a593Smuzhiyun :yocto_dl:`/releases/yocto/&DISTRO_REL_TAG;/` 382*4882a593Smuzhiyun results in a Source Directory whose root folder is named poky. 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun 385*4882a593Smuzhiyun It is important to understand the differences between the Source 386*4882a593Smuzhiyun Directory created by unpacking a released tarball as compared to 387*4882a593Smuzhiyun cloning ``git://git.yoctoproject.org/poky``. When you unpack a 388*4882a593Smuzhiyun tarball, you have an exact copy of the files based on the time of 389*4882a593Smuzhiyun release - a fixed release point. Any changes you make to your local 390*4882a593Smuzhiyun files in the Source Directory are on top of the release and will 391*4882a593Smuzhiyun remain local only. On the other hand, when you clone the ``poky`` Git 392*4882a593Smuzhiyun repository, you have an active development repository with access to 393*4882a593Smuzhiyun the upstream repository's branches and tags. In this case, any local 394*4882a593Smuzhiyun changes you make to the local Source Directory can be later applied 395*4882a593Smuzhiyun to active development branches of the upstream ``poky`` Git 396*4882a593Smuzhiyun repository. 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun For more information on concepts related to Git repositories, 399*4882a593Smuzhiyun branches, and tags, see the 400*4882a593Smuzhiyun ":ref:`overview-manual/development-environment:repositories, tags, and branches`" 401*4882a593Smuzhiyun section in the Yocto Project Overview and Concepts Manual. 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun :term:`SPDX` 404*4882a593Smuzhiyun This term means *Software Package Data Exchange*, and is used as a open 405*4882a593Smuzhiyun standard for providing a *Software Bill of Materials* (:term:`SBOM`). 406*4882a593Smuzhiyun This standard is developed through a `Linux Foundation project 407*4882a593Smuzhiyun <https://spdx.dev/>`__ and is used by the OpenEmbedded Build System to 408*4882a593Smuzhiyun provide an :term:`SBOM` associated to each a software image. 409*4882a593Smuzhiyun 410*4882a593Smuzhiyun For details, see Wikipedia's :wikipedia:`SPDX page <Software_Package_Data_Exchange>` 411*4882a593Smuzhiyun and the ":ref:`dev-manual/common-tasks:creating a software bill of materials`" 412*4882a593Smuzhiyun section of the Development Tasks manual. 413*4882a593Smuzhiyun 414*4882a593Smuzhiyun :term:`Task` 415*4882a593Smuzhiyun A per-recipe unit of execution for BitBake (e.g. 416*4882a593Smuzhiyun :ref:`ref-tasks-compile`, 417*4882a593Smuzhiyun :ref:`ref-tasks-fetch`, 418*4882a593Smuzhiyun :ref:`ref-tasks-patch`, and so forth). 419*4882a593Smuzhiyun One of the major benefits of the build system is that, since each 420*4882a593Smuzhiyun recipe will typically spawn the execution of numerous tasks, 421*4882a593Smuzhiyun it is entirely possible that many tasks can execute in parallel, 422*4882a593Smuzhiyun either tasks from separate recipes or independent tasks within 423*4882a593Smuzhiyun the same recipe, potentially up to the parallelism of your 424*4882a593Smuzhiyun build system. 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun :term:`Toaster` 427*4882a593Smuzhiyun A web interface to the Yocto Project's :term:`OpenEmbedded Build System`. 428*4882a593Smuzhiyun The interface enables you to 429*4882a593Smuzhiyun configure and run your builds. Information about builds is collected 430*4882a593Smuzhiyun and stored in a database. For information on Toaster, see the 431*4882a593Smuzhiyun :doc:`/toaster-manual/index`. 432*4882a593Smuzhiyun 433*4882a593Smuzhiyun :term:`Upstream` 434*4882a593Smuzhiyun A reference to source code or repositories that are not 435*4882a593Smuzhiyun local to the development system but located in a remote area that is 436*4882a593Smuzhiyun controlled by the maintainer of the source code. For example, in 437*4882a593Smuzhiyun order for a developer to work on a particular piece of code, they 438*4882a593Smuzhiyun need to first get a copy of it from an "upstream" source. 439