| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- .. SPDX-License-Identifier: GPL-2.0+:
- U-Boot Development Process
- ==========================
- Management Summary
- ------------------
- * Development happens in Release Cycles of 3 months.
- * The first 3 weeks of the cycle are referred to as the Merge Window, which is
- followed by a Stabilization Period.
- * Patches with new code get only accepted while the Merge Window is open.
- * A patch that is generally in good shape and that was submitted while the
- Merge Window was open is eligible to go into the upcoming release, even if
- changes and resubmits are needed.
- * During the Stabilization Period, only patches that contain bug fixes get
- applied.
- Phases of the Development Process
- ---------------------------------
- U-Boot development takes place in `Release Cycles
- <https://www.denx.de/wiki/U-Boot/ReleaseCycle>`_. A Release Cycle lasts
- normally for three months.
- The first three weeks of each Release Cycle are called *Merge Window*.
- It is followed by a *Stabilization Period*.
- The end of a Release Cycle is marked by the release of a new U-Boot version.
- Merge Window
- ------------
- The Merge Window is the period when new patches get submitted (and hopefully
- accepted) for inclusion into U-Boot mainline. This period lasts for 21 days (3
- weeks) and ends with the release of ``"-rc1"``.
- This is the only time when new code (like support for new processors or new
- boards, or other new features or reorganization of code) is accepted.
- Twilight Time
- -------------
- Usually patches do not get accepted as they are - the peer review that takes
- place will usually require changes and resubmissions of the patches before they
- are considered to be ripe for inclusion into mainline.
- Also the review often happens not immediately after a patch was submitted,
- but only when somebody (usually the responsible custodian) finds time to do
- this.
- The result is that the final version of such patches gets submitted after the
- merge window has been closed.
- It is current practice in U-Boot that such patches are eligible to go into the
- upcoming release.
- The result is that the release of the ``"-rc1"`` version and formal closing of
- the Merge Window does not preclude patches that were already posted from being
- merged for the upcoming release.
- Stabilization Period
- --------------------
- During the Stabilization Period only patches containing bug fixes get
- applied.
- Corner Cases
- ------------
- Sometimes it is not clear if a patch contains a bug fix or not.
- For example, changes that remove dead code, unused macros etc. or
- that contain Coding Style fixes are not strict bug fixes.
- In such situations it is up to the responsible custodian to decide if they
- apply such patches even when the Merge Window is closed.
- Exception: at the end of the Stabilization Period only strict bug
- fixes my be applied.
- Sometimes patches miss the Merge Window slightly - say by a few
- hours or even a day. Patch acceptance is not as critical as a
- financial transaction, or such. So if there is such a slight delay,
- the custodian is free to turn a blind eye and accept it anyway. The
- idea of the development process is to make it foreseeable,
- but not to slow down development.
- It makes more sense if an engineer spends another day on testing and
- cleanup and submits the patch a couple of hours late, instead of
- submitting a green patch which will waste efforts from several people
- during several rounds of review and reposts.
- Differences to the Linux Development Process
- --------------------------------------------
- * In Linux, top-level maintainers will collect patches in their trees and send
- pull requests to Linus as soon as the merge window opens.
- So far, most U-Boot custodians do not work like that; they send pull requests
- only at (or even after) the end of the merge window.
- * In Linux, the closing of the merge window is marked by the release of the
- next ``"-rc1"``
- In U-Boot, ``"-rc1"`` will only be released after all (or at least most of
- the) patches that were submitted during the merge window have been applied.
- .. _custodians:
- Custodians
- ----------
- The Custodians take responsibility for some area of the U-Boot code. The
- in-tree ``MAINTAINERS`` files list who is responsible for which areas.
- It is their responsibility to pick up patches from the mailing list
- that fall into their responsibility, and to process these.
- A very important responsibility of each custodian is to provide
- feedback to the submitter of a patch about what is going on: if the
- patch was accepted, or if it was rejected (which exact list of
- reasons), if it needs to be reworked (with respective review
- comments). Even a "I have no time now, will look into it later"
- message is better than nothing. Also, if there are remarks to a
- patch, these should leave no doubt if they were just comments and the
- patch will be accepted anyway, or if the patch should be
- reworked/resubmitted, or if it was rejected.
- Review Process, Git Tags
- ------------------------
- There are a number of *git tags* that are used to document the origin and the
- processing of patches on their way into the mainline U-Boot code. The following
- is an attempt to document how these are usually handled in the U-Boot project.
- In general, we try to follow the established procedures from other projects,
- especially the Linux kernel, but there may be smaller differences. For
- reference, see the Linux kernel's `Submitting patches
- <https://www.kernel.org/doc/html/latest/process/submitting-patches.html>`_
- document.
- .. _dco:
- * Signed-off-by: the *Signed-off-by:* is a line at the end of the commit
- message by which the signer certifies that they were involved in the development
- of the patch and that they accept the `Developer Certificate of Origin
- <https://developercertificate.org/>`_. Following this and adding a
- ``Signed-off-by:`` line that contains the developer's name and email address
- is required.
- * Please note that in U-Boot, we do not add a ``Signed-off-by`` tag if we
- just pass on a patch without any changes.
- * Please note that when importing code from other projects you must say
- where it comes from, and what revision you are importing. You must not
- however copy ``Signed-off-by`` or other tags.
- * Everybody who can is invited to review and test the changes. Typically, we
- follow the same guidelines as the Linux kernel for `Acked-by
- <https://www.kernel.org/doc/html/latest/process/submitting-patches.html#when-to-use-acked-by-cc-and-co-developed-by>`_
- as well as `Reviewed-by
- <https://www.kernel.org/doc/html/latest/process/submitting-patches.html#using-reported-by-tested-by-reviewed-by-suggested-by-and-fixes>`_
- and similar additional tags.
- * Reviewed-by: The patch has been reviewed and found acceptable according to
- the `Reviewer's statement of oversight
- <https://www.kernel.org/doc/html/latest/process/submitting-patches.html#reviewer-s-statement-of-oversight>`_.
- A *Reviewed-by:* tag is a statement of opinion that the patch is an
- appropriate modification of the code without any remaining serious technical
- issues. Any interested reviewer (who has done the work) can offer a
- *Reviewed-by:* tag for a patch.
- * Acked-by: If a person was not directly involved in the preparation or
- handling of a patch but wishes to signify and record their approval of it
- then they can arrange to have an *Acked-by:* line added to the patch's
- changelog.
- * Tested-by: A *Tested-by:* tag indicates that the patch has been successfully
- tested (in some environment) by the person named. Andrew Morton: "I think
- it's very useful information to have. For a start, it tells you who has the
- hardware and knows how to build a kernel. So if you're making a change to a
- driver and want it tested, you can troll the file's changelog looking for
- people who might be able to help."
- * Reported-by: If this patch fixes a problem reported by somebody else,
- consider adding a *Reported-by:* tag to credit the reporter for their
- contribution. Please note that this tag should not be added without the
- reporter's permission, especially if the problem was not reported in a public
- forum.
- * Cc: If a person should have the opportunity to comment on a patch, you may
- optionally add a *Cc:* tag to the patch. Git tools (git send-email) will then
- automatically arrange that they receives a copy of the patch when you submit
- it to the mailing list. This is the only tag which might be added without an
- explicit action by the person it names. This tag documents that potentially
- interested parties have been included in the discussion.
- For example, when your change affects a specific board or driver, then makes
- a lot of sense to put the respective maintainer of this code on Cc:
- Work flow of a Custodian
- ------------------------
- The normal flow of work in the U-Boot development process will look
- like this:
- #. The responsible custodian inspects this patch, especially for:
- #. The commit message is useful, descriptive and makes correct and
- appropriate usage of required *git tags*.
- #. :doc:`codingstyle`
- #. Basic logic:
- * The patch fixes a real problem.
- * The patch does not introduce new problems, especially it does not break
- other boards or architectures
- #. U-Boot Philosophy, as documented in :doc:`designprinciples`.
- #. Applies cleanly to the source tree. The custodian is expected to put in
- a "best effort" if a patch does not apply cleanly, but can be made to apply
- still. It is up to the custodian to decide how recent of a commit the
- patch must be against. It is acceptable to request patches against the
- last officially released version of U-Boot or newer. Of course a
- custodian can also accept patches against older code. It can be
- difficult to find the correct balance between putting too much work on
- the custodian or too much work on an individual submitting a patch when
- something does not apply cleanly.
- #. Passes :doc:`ci_testing` as this checks for new warnings and other issues.
- #. Note that in some cases more than one custodian may feel responsible for a
- particular change. To avoid duplicated efforts, the custodian who starts
- processing the patch should follow up to the email saying they intend to
- pick it up.
- #. Commits must show original author in the ``author`` field and include all of
- the ``Signed-off-by``, ``Reviewed-by``, etc, tags that have been submitted.
- #. The final decision to accept or reject a patch comes down to the custodian
- in question.
- #. If accepted, the custodian adds the patch to their public git repository.
- Ideally, they will also follow up on the mailing list with some notification
- that it has been applied. This is not always easy given different custodian
- workflows and environments however.
- #. Although a custodian is supposed to perform their own tests it is a
- well-known and accepted fact that they need help from other developers who
- - for example - have access to the required hardware or other relevant
- environments. Custodians are expected to ask for assistance with testing
- when required.
- #. Custodians are expected to submit a timely pull request of their git
- repository to the main repository. It is strongly encouraged that a CI run
- has been completed prior to submission, but not required.
|