xref: /OK3568_Linux_fs/yocto/poky/documentation/ref-manual/terms.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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