diff options
| -rw-r--r-- | documentation/test-manual/index.rst | 1 | ||||
| -rw-r--r-- | documentation/test-manual/yocto-project-compatible.rst | 124 |
2 files changed, 125 insertions, 0 deletions
diff --git a/documentation/test-manual/index.rst b/documentation/test-manual/index.rst index d122b5e270..4c590a6aa9 100644 --- a/documentation/test-manual/index.rst +++ b/documentation/test-manual/index.rst | |||
| @@ -14,6 +14,7 @@ Yocto Project Test Environment Manual | |||
| 14 | test-process | 14 | test-process |
| 15 | understand-autobuilder | 15 | understand-autobuilder |
| 16 | reproducible-builds | 16 | reproducible-builds |
| 17 | yocto-project-compatible | ||
| 17 | history | 18 | history |
| 18 | 19 | ||
| 19 | .. include:: /boilerplate.rst | 20 | .. include:: /boilerplate.rst |
diff --git a/documentation/test-manual/yocto-project-compatible.rst b/documentation/test-manual/yocto-project-compatible.rst new file mode 100644 index 0000000000..a7897469ff --- /dev/null +++ b/documentation/test-manual/yocto-project-compatible.rst | |||
| @@ -0,0 +1,124 @@ | |||
| 1 | .. SPDX-License-Identifier: CC-BY-SA-2.0-UK | ||
| 2 | |||
| 3 | ************************ | ||
| 4 | Yocto Project Compatible | ||
| 5 | ************************ | ||
| 6 | |||
| 7 | ============ | ||
| 8 | Introduction | ||
| 9 | ============ | ||
| 10 | |||
| 11 | After the introduction of layers to OpenEmbedded, it quickly became clear | ||
| 12 | that while some layers were popular and worked well, others developed a | ||
| 13 | reputation for being "problematic". Those were layers which didn't | ||
| 14 | interoperate well with others and tended to assume they controlled all | ||
| 15 | the aspects of the final output. This usually isn't intentional but happens | ||
| 16 | because such layers are often created by developers with a particular focus | ||
| 17 | (e.g. a company's :term:`BSP<Board Support Package (BSP)>`) whilst the end | ||
| 18 | users have a different one (e.g. integrating that | ||
| 19 | :term:`BSP<Board Support Package (BSP)>` into a product). | ||
| 20 | |||
| 21 | As a result of noticing such patterns and friction between layers, the project | ||
| 22 | developed the "Yocto Project Compatible" badge program, allowing layers | ||
| 23 | following the best known practises to be marked as being widely compatible | ||
| 24 | with other ones. This takes the form of a set of "yes/no" binary answer | ||
| 25 | questions where layers can declare if they meet the appropriate criteria. | ||
| 26 | In the second version of the program, a script was added to make validation | ||
| 27 | easier and clearer, the script is called ``yocto-check-layer`` and is | ||
| 28 | available in :term:`OpenEmbedded-Core (OE-Core)`. | ||
| 29 | |||
| 30 | See :ref:`dev-manual/common-tasks:making sure your layer is compatible with yocto project` | ||
| 31 | for details. | ||
| 32 | |||
| 33 | ======== | ||
| 34 | Benefits | ||
| 35 | ======== | ||
| 36 | |||
| 37 | :ref:`overview-manual/yp-intro:the yocto project layer model` is powerful | ||
| 38 | and flexible: it gives users the ultimate power to change pretty much any | ||
| 39 | aspect of the system but as with most things, power comes with responsibility. | ||
| 40 | The Yocto Project would like to see people able to mix and match BSPs with | ||
| 41 | distro configs or software stacks and be able to merge succesfully. | ||
| 42 | Over time, the project identified characteristics in layers that allow them | ||
| 43 | to operate well together. "anti-patterns" were also found, preventing layers | ||
| 44 | from working well together. | ||
| 45 | |||
| 46 | The intent of the compatibility program is simple: if the layer passes the | ||
| 47 | compatibility tests, it is considered "well behaved" and should operate | ||
| 48 | and cooperate well with other compatible layers. | ||
| 49 | |||
| 50 | The benefits of compatibility can be seen from multiple different user and | ||
| 51 | member perspectives. From a hardware perspective | ||
| 52 | (a :ref:`overview-manual/concepts:bsp layer`), compatibility means the | ||
| 53 | hardware can be used in many different products and use cases without | ||
| 54 | impacting the software stacks being run with it. For a company developing | ||
| 55 | a product, compatibility gives you a specification / standard you can | ||
| 56 | require in a contract and then know it will have certain desired | ||
| 57 | characteristics for interoperability. It also puts constraints on how invasive | ||
| 58 | the code bases are into the rest of the system, meaning that multiple | ||
| 59 | different separate hardware support layers can coexist (e.g. for multiple | ||
| 60 | product lines from different hardware manufacturers). This can also make it | ||
| 61 | easier for one or more parties to upgrade those system components for security | ||
| 62 | purposes during the lifecycle of a product. | ||
| 63 | |||
| 64 | ================== | ||
| 65 | Validating a layer | ||
| 66 | ================== | ||
| 67 | |||
| 68 | The badges are available to members of the Yocto Project (as member benefit) | ||
| 69 | and to open source projects run on a non-commercial basis. However, anyone can | ||
| 70 | answer the questions and run the script. | ||
| 71 | |||
| 72 | The project encourages all layer maintainers to review the questions and the | ||
| 73 | output from the script against their layer, as the way some layers are | ||
| 74 | constructed often has unintended consequences. The questions and the script | ||
| 75 | are designed to highlight known issues which are often easy to solve. This | ||
| 76 | makes layers easier to use and therefore more popular. | ||
| 77 | |||
| 78 | It is intended that over time, the tests will evolve as new best known | ||
| 79 | practices are identified, and as new interoperability issues are found, | ||
| 80 | unnecessarily restricting layer interoperability. If anyone becomes aware of | ||
| 81 | either type, please let the project know through the | ||
| 82 | :yocto_home:`technical calls </public-virtual-meetings/>`, | ||
| 83 | the :yocto_home:`mailing lists </community/mailing-lists/>` | ||
| 84 | or through the :oe_wiki:`Technical Steering Committee (TSC) </TSC>`. | ||
| 85 | The TSC is responsible for the technical criteria used by the program. | ||
| 86 | |||
| 87 | Layers are divided into three types: | ||
| 88 | |||
| 89 | - :ref:`"BSP" or "hardware support"<overview-manual/concepts:bsp layer>` | ||
| 90 | layers contain support for particular pieces of hardware. This includes | ||
| 91 | kernel and boot loader configuration, and any recipes for firmware or | ||
| 92 | kernel modules needed for the hardware. Such layers usually correspond | ||
| 93 | to a :term:`MACHINE` setting. | ||
| 94 | |||
| 95 | - :ref:`"distro" layers<overview-manual/concepts:distro layer>` defined | ||
| 96 | as layers providing configuration options and settings such as the | ||
| 97 | choice of init system, compiler and optimisation options, and | ||
| 98 | configuration and choices of software components. This would usually | ||
| 99 | correspond to a :term:`DISTRO` setting. | ||
| 100 | |||
| 101 | - "software" layers are usually recipes. A layer might target a | ||
| 102 | particular graphical UI or software stack component. | ||
| 103 | |||
| 104 | Here are key best practices the program tries to encourage: | ||
| 105 | |||
| 106 | - A layer should clearly show who maintains it, and who change | ||
| 107 | submissions and bug reports should be sent to. | ||
| 108 | |||
| 109 | - Where multiple types of functionality are present, the layer should | ||
| 110 | be internally divided into sublayers to separate these components. | ||
| 111 | That's because some users may only need one of them and separability | ||
| 112 | is a key best practice. | ||
| 113 | |||
| 114 | - Adding a layer to a build should not modify that build, unless the | ||
| 115 | user changes a configuration setting to activate the layer, by selecting | ||
| 116 | a :term:`MACHINE`, a :term:`DISTRO` or a :term:`DISTRO_FEATURES` setting. | ||
| 117 | |||
| 118 | The project does test the compatibility status of the core project layers on | ||
| 119 | its :doc:`Autobuilder </test-manual/understand-autobuilder>`. | ||
| 120 | |||
| 121 | The official form to submit compatibility requests with is at | ||
| 122 | :yocto_home:`/ecosystem/branding/compatible-registration/`. | ||
| 123 | Applicants can display the badge they get when their application is successful. | ||
| 124 | |||
