mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-03 21:48:15 +00:00 
			
		
		
		
	For quite a long time we've been using a 3 week, rather than 2 week, merge window as it was only 2 weeks during the timeframe where we did 2 month rather than 3 month releases. This corrects the places that still had 2 weeks and tries to make things a bit clearer overall. Cc: Heinrich Schuchardt <xypron.glpk@gmx.de> Signed-off-by: Tom Rini <trini@konsulko.com>
		
			
				
	
	
		
			199 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			199 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
.. 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
 | 
						|
----------
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
Work flow of a Custodian
 | 
						|
------------------------
 | 
						|
 | 
						|
The normal flow of work in the U-Boot development process will look
 | 
						|
like this:
 | 
						|
 | 
						|
#. A developer submits a patch via e-mail to the u-boot mailing list.  In
 | 
						|
   U-Boot, we make use of the `Developer Certificate of Origin
 | 
						|
   <https://developercertificate.org/>`_ that is common in other projects such
 | 
						|
   as the Linux kernel.  Following this and adding a ``Signed-off-by:`` line
 | 
						|
   that contains the developer's name and email address is required.
 | 
						|
 | 
						|
#. 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.
 | 
						|
 | 
						|
#. The responsible custodian inspects this patch, especially for:
 | 
						|
 | 
						|
   #. :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 needs 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.
 |