"Das U-Boot" Source Tree
at master 273 lines 12 kB view raw
1.. SPDX-License-Identifier: GPL-2.0+: 2 3U-Boot Development Process 4========================== 5 6Management Summary 7------------------ 8 9* Development happens in Release Cycles of 3 months. 10 11* The first 3 weeks of the cycle are referred to as the Merge Window, which is 12 followed by a Stabilization Period. 13 14* Patches with new code get only accepted while the Merge Window is open. 15 16* A patch that is generally in good shape and that was submitted while the 17 Merge Window was open is eligible to go into the upcoming release, even if 18 changes and resubmits are needed. 19 20* During the Stabilization Period, only patches that contain bug fixes get 21 applied. 22 23Phases of the Development Process 24--------------------------------- 25 26U-Boot development takes place in a :doc:`release_cycle`. A Release Cycle 27lasts normally for three months. 28 29The first three weeks of each Release Cycle are called *Merge Window*. 30 31It is followed by a *Stabilization Period*. 32 33The end of a Release Cycle is marked by the release of a new U-Boot version. 34 35Merge Window 36^^^^^^^^^^^^ 37 38The Merge Window is the period when new patches get submitted (and hopefully 39accepted) for inclusion into U-Boot mainline. This period lasts for 21 days (3 40weeks) and ends with the release of ``"-rc1"``. 41 42This is the only time when new code (like support for new processors or new 43boards, or other new features or reorganization of code) is accepted. 44 45Twilight Time 46^^^^^^^^^^^^^ 47 48Usually patches do not get accepted as they are - the peer review that takes 49place will usually require changes and resubmissions of the patches before they 50are considered to be ripe for inclusion into mainline. 51 52Also the review often happens not immediately after a patch was submitted, 53but only when somebody (usually the responsible custodian) finds time to do 54this. 55 56The result is that the final version of such patches gets submitted after the 57merge window has been closed. 58 59It is current practice in U-Boot that such patches are eligible to go into the 60upcoming release. 61 62The result is that the release of the ``"-rc1"`` version and formal closing of 63the Merge Window does not preclude patches that were already posted from being 64merged for the upcoming release. 65 66Stabilization Period 67^^^^^^^^^^^^^^^^^^^^ 68 69During the Stabilization Period only patches containing bug fixes get 70applied. 71 72Corner Cases 73^^^^^^^^^^^^ 74 75Sometimes it is not clear if a patch contains a bug fix or not. 76For example, changes that remove dead code, unused macros etc. or 77that contain Coding Style fixes are not strict bug fixes. 78 79In such situations it is up to the responsible custodian to decide if they 80apply such patches even when the Merge Window is closed. 81 82Exception: at the end of the Stabilization Period only strict bug 83fixes my be applied. 84 85Sometimes patches miss the Merge Window slightly - say by a few 86hours or even a day. Patch acceptance is not as critical as a 87financial transaction, or such. So if there is such a slight delay, 88the custodian is free to turn a blind eye and accept it anyway. The 89idea of the development process is to make it foreseeable, 90but not to slow down development. 91 92It makes more sense if an engineer spends another day on testing and 93cleanup and submits the patch a couple of hours late, instead of 94submitting a green patch which will waste efforts from several people 95during several rounds of review and reposts. 96 97Differences to the Linux Development Process 98-------------------------------------------- 99 100* In Linux, top-level maintainers will collect patches in their trees and send 101 pull requests to Linus as soon as the merge window opens. 102 So far, most U-Boot custodians do not work like that; they send pull requests 103 only at (or even after) the end of the merge window. 104 105* In Linux, the closing of the merge window is marked by the release of the 106 next ``"-rc1"`` 107 In U-Boot, ``"-rc1"`` will only be released after all (or at least most of 108 the) patches that were submitted during the merge window have been applied. 109 110Resyncing of the device tree subtree 111------------------------------------ 112 113As explained in :doc:`devicetree/control` some platforms make use of device tree 114files which come from a git subtree that mirrors the Linux Kernel sources 115itself. For our purposes, we only track releases and not release candidates for 116merging in our tree. These merges follow the normal merge window rules. 117 118In the case of specific changes, such as bug fixes or new platform support, 119these can be "cherry-picked" and are subject to the normal merge rules. For 120example, a bug fix can come in later in the window but a full re-sync only 121happens within the merge window itself. 122 123.. _custodians: 124 125Custodians 126---------- 127 128The Custodians take responsibility for some area of the U-Boot code. The 129in-tree ``MAINTAINERS`` files list who is responsible for which areas. 130 131It is their responsibility to pick up patches from the mailing list 132that fall into their responsibility, and to process these. 133 134A very important responsibility of each custodian is to provide 135feedback to the submitter of a patch about what is going on: if the 136patch was accepted, or if it was rejected (which exact list of 137reasons), if it needs to be reworked (with respective review 138comments). Even a "I have no time now, will look into it later" 139message is better than nothing. Also, if there are remarks to a 140patch, these should leave no doubt if they were just comments and the 141patch will be accepted anyway, or if the patch should be 142reworked/resubmitted, or if it was rejected. 143 144Review Process, Git Tags 145------------------------ 146 147There are a number of *git tags* that are used to document the origin and the 148processing of patches on their way into the mainline U-Boot code. The following 149is an attempt to document how these are usually handled in the U-Boot project. 150 151In general, we try to follow the established procedures from other projects, 152especially the Linux kernel, but there may be smaller differences. For 153reference, see the Linux kernel's `Submitting patches 154<https://www.kernel.org/doc/html/latest/process/submitting-patches.html>`_ 155document. 156 157.. _dco: 158 159* Signed-off-by: the *Signed-off-by:* is a line at the end of the commit 160 message by which the signer certifies that they were involved in the development 161 of the patch and that they accept the `Developer Certificate of Origin 162 <https://developercertificate.org/>`_. Following this and adding a 163 ``Signed-off-by:`` line that contains the developer's name and email address 164 is required. 165 166 * Please note that in U-Boot, we do not add a ``Signed-off-by`` tag if we 167 just pass on a patch without any changes. 168 169 * Please note that when importing code from other projects you must say 170 where it comes from, and what revision you are importing. You must not 171 however copy ``Signed-off-by`` or other tags. 172 173* Everybody who can is invited to review and test the changes. Typically, we 174 follow the same guidelines as the Linux kernel for `Acked-by 175 <https://www.kernel.org/doc/html/latest/process/submitting-patches.html#when-to-use-acked-by-cc-and-co-developed-by>`_ 176 as well as `Reviewed-by 177 <https://www.kernel.org/doc/html/latest/process/submitting-patches.html#using-reported-by-tested-by-reviewed-by-suggested-by-and-fixes>`_ 178 and similar additional tags. 179 180* Reviewed-by: The patch has been reviewed and found acceptable according to 181 the `Reviewer's statement of oversight 182 <https://www.kernel.org/doc/html/latest/process/submitting-patches.html#reviewer-s-statement-of-oversight>`_. 183 A *Reviewed-by:* tag is a statement of opinion that the patch is an 184 appropriate modification of the code without any remaining serious technical 185 issues. Any interested reviewer (who has done the work) can offer a 186 *Reviewed-by:* tag for a patch. 187 188* Acked-by: If a person was not directly involved in the preparation or 189 handling of a patch but wishes to signify and record their approval of it 190 then they can arrange to have an *Acked-by:* line added to the patch's 191 changelog. 192 193* Tested-by: A *Tested-by:* tag indicates that the patch has been successfully 194 tested (in some environment) by the person named. Andrew Morton: "I think 195 it's very useful information to have. For a start, it tells you who has the 196 hardware and knows how to build a kernel. So if you're making a change to a 197 driver and want it tested, you can troll the file's changelog looking for 198 people who might be able to help." 199 200* Reported-by: If this patch fixes a problem reported by somebody else, 201 consider adding a *Reported-by:* tag to credit the reporter for their 202 contribution. Please note that this tag should not be added without the 203 reporter's permission, especially if the problem was not reported in a public 204 forum. 205 206* Cc: If a person should have the opportunity to comment on a patch, you may 207 optionally add a *Cc:* tag to the patch. Git tools (git send-email) will then 208 automatically arrange that they receives a copy of the patch when you submit 209 it to the mailing list. This is the only tag which might be added without an 210 explicit action by the person it names. This tag documents that potentially 211 interested parties have been included in the discussion. 212 For example, when your change affects a specific board or driver, then makes 213 a lot of sense to put the respective maintainer of this code on Cc: 214 215Work flow of a Custodian 216------------------------ 217 218The normal flow of work in the U-Boot development process will look 219like this: 220 221#. The responsible custodian inspects this patch, especially for: 222 223 #. The commit message is useful, descriptive and makes correct and 224 appropriate usage of required *git tags*. 225 226 #. :doc:`codingstyle` 227 228 #. Basic logic: 229 230 * The patch fixes a real problem. 231 232 * The patch does not introduce new problems, especially it does not break 233 other boards or architectures 234 235 #. U-Boot Philosophy, as documented in :doc:`designprinciples`. 236 237 #. Applies cleanly to the source tree. The custodian is expected to put in 238 a "best effort" if a patch does not apply cleanly, but can be made to apply 239 still. It is up to the custodian to decide how recent of a commit the 240 patch must be against. It is acceptable to request patches against the 241 last officially released version of U-Boot or newer. Of course a 242 custodian can also accept patches against older code. It can be 243 difficult to find the correct balance between putting too much work on 244 the custodian or too much work on an individual submitting a patch when 245 something does not apply cleanly. 246 247 #. Passes :doc:`ci_testing` as this checks for new warnings and other issues. 248 249#. Note that in some cases more than one custodian may feel responsible for a 250 particular change. To avoid duplicated efforts, the custodian who starts 251 processing the patch should follow up to the email saying they intend to 252 pick it up. 253 254#. Commits must show original author in the ``author`` field and include all of 255 the ``Signed-off-by``, ``Reviewed-by``, etc, tags that have been submitted. 256 257#. The final decision to accept or reject a patch comes down to the custodian 258 in question. 259 260#. If accepted, the custodian adds the patch to their public git repository. 261 Ideally, they will also follow up on the mailing list with some notification 262 that it has been applied. This is not always easy given different custodian 263 workflows and environments however. 264 265#. Although a custodian is supposed to perform their own tests it is a 266 well-known and accepted fact that they need help from other developers who 267 - for example - have access to the required hardware or other relevant 268 environments. Custodians are expected to ask for assistance with testing 269 when required. 270 271#. Custodians are expected to submit a timely pull request of their git 272 repository to the main repository. It is strongly encouraged that a CI run 273 has been completed prior to submission, but not required.