xref: /qemu/docs/devel/code-provenance.rst (revision b5d00557722d46cb845c05e546474284870e440b)
12b0e4ecdSDaniel P. Berrangé.. _code-provenance:
22b0e4ecdSDaniel P. Berrangé
32b0e4ecdSDaniel P. BerrangéCode provenance
42b0e4ecdSDaniel P. Berrangé===============
52b0e4ecdSDaniel P. Berrangé
62b0e4ecdSDaniel P. BerrangéCertifying patch submissions
72b0e4ecdSDaniel P. Berrangé~~~~~~~~~~~~~~~~~~~~~~~~~~~~
82b0e4ecdSDaniel P. Berrangé
92b0e4ecdSDaniel P. BerrangéThe QEMU community **mandates** all contributors to certify provenance of
102b0e4ecdSDaniel P. Berrangépatch submissions they make to the project. To put it another way,
112b0e4ecdSDaniel P. Berrangécontributors must indicate that they are legally permitted to contribute to
122b0e4ecdSDaniel P. Berrangéthe project.
132b0e4ecdSDaniel P. Berrangé
142b0e4ecdSDaniel P. BerrangéCertification is achieved with a low overhead by adding a single line to the
152b0e4ecdSDaniel P. Berrangébottom of every git commit::
162b0e4ecdSDaniel P. Berrangé
172b0e4ecdSDaniel P. Berrangé   Signed-off-by: YOUR NAME <YOUR@EMAIL>
182b0e4ecdSDaniel P. Berrangé
192b0e4ecdSDaniel P. BerrangéThe addition of this line asserts that the author of the patch is contributing
202b0e4ecdSDaniel P. Berrangéin accordance with the clauses specified in the
212b0e4ecdSDaniel P. Berrangé`Developer's Certificate of Origin <https://developercertificate.org>`__:
222b0e4ecdSDaniel P. Berrangé
232b0e4ecdSDaniel P. Berrangé.. _dco:
242b0e4ecdSDaniel P. Berrangé
252b0e4ecdSDaniel P. Berrangé  Developer's Certificate of Origin 1.1
262b0e4ecdSDaniel P. Berrangé
272b0e4ecdSDaniel P. Berrangé  By making a contribution to this project, I certify that:
282b0e4ecdSDaniel P. Berrangé
292b0e4ecdSDaniel P. Berrangé  (a) The contribution was created in whole or in part by me and I
302b0e4ecdSDaniel P. Berrangé      have the right to submit it under the open source license
312b0e4ecdSDaniel P. Berrangé      indicated in the file; or
322b0e4ecdSDaniel P. Berrangé
332b0e4ecdSDaniel P. Berrangé  (b) The contribution is based upon previous work that, to the best
342b0e4ecdSDaniel P. Berrangé      of my knowledge, is covered under an appropriate open source
352b0e4ecdSDaniel P. Berrangé      license and I have the right under that license to submit that
362b0e4ecdSDaniel P. Berrangé      work with modifications, whether created in whole or in part
372b0e4ecdSDaniel P. Berrangé      by me, under the same open source license (unless I am
382b0e4ecdSDaniel P. Berrangé      permitted to submit under a different license), as indicated
392b0e4ecdSDaniel P. Berrangé      in the file; or
402b0e4ecdSDaniel P. Berrangé
412b0e4ecdSDaniel P. Berrangé  (c) The contribution was provided directly to me by some other
422b0e4ecdSDaniel P. Berrangé      person who certified (a), (b) or (c) and I have not modified
432b0e4ecdSDaniel P. Berrangé      it.
442b0e4ecdSDaniel P. Berrangé
452b0e4ecdSDaniel P. Berrangé  (d) I understand and agree that this project and the contribution
462b0e4ecdSDaniel P. Berrangé      are public and that a record of the contribution (including all
472b0e4ecdSDaniel P. Berrangé      personal information I submit with it, including my sign-off) is
482b0e4ecdSDaniel P. Berrangé      maintained indefinitely and may be redistributed consistent with
492b0e4ecdSDaniel P. Berrangé      this project or the open source license(s) involved.
502b0e4ecdSDaniel P. Berrangé
512b0e4ecdSDaniel P. BerrangéThe name used with "Signed-off-by" does not need to be your legal name, nor
522b0e4ecdSDaniel P. Berrangébirth name, nor appear on any government ID. It is the identity you choose to
532b0e4ecdSDaniel P. Berrangébe known by in the community, but should not be anonymous, nor misrepresent
542b0e4ecdSDaniel P. Berrangéwhom you are.
552b0e4ecdSDaniel P. Berrangé
562b0e4ecdSDaniel P. BerrangéIt is generally expected that the name and email addresses used in one of the
572b0e4ecdSDaniel P. Berrangé``Signed-off-by`` lines, matches that of the git commit ``Author`` field.
582b0e4ecdSDaniel P. BerrangéIt's okay if you subscribe or contribute to the list via more than one
592b0e4ecdSDaniel P. Berrangéaddress, but using multiple addresses in one commit just confuses
602b0e4ecdSDaniel P. Berrangéthings.
612b0e4ecdSDaniel P. Berrangé
622b0e4ecdSDaniel P. BerrangéIf the person sending the mail is not one of the patch authors, they are
632b0e4ecdSDaniel P. Berrangénonetheless expected to add their own ``Signed-off-by`` to comply with the
642b0e4ecdSDaniel P. BerrangéDCO clause (c).
652b0e4ecdSDaniel P. Berrangé
662b0e4ecdSDaniel P. BerrangéMultiple authorship
672b0e4ecdSDaniel P. Berrangé~~~~~~~~~~~~~~~~~~~
682b0e4ecdSDaniel P. Berrangé
692b0e4ecdSDaniel P. BerrangéIt is not uncommon for a patch to have contributions from multiple authors. In
702b0e4ecdSDaniel P. Berrangéthis scenario, git commits will usually be expected to have a ``Signed-off-by``
712b0e4ecdSDaniel P. Berrangéline for each contributor involved in creation of the patch. Some edge cases:
722b0e4ecdSDaniel P. Berrangé
732b0e4ecdSDaniel P. Berrangé  * The non-primary author's contributions were so trivial that they can be
742b0e4ecdSDaniel P. Berrangé    considered not subject to copyright. In this case the secondary authors
752b0e4ecdSDaniel P. Berrangé    need not include a ``Signed-off-by``.
762b0e4ecdSDaniel P. Berrangé
772b0e4ecdSDaniel P. Berrangé    This case most commonly applies where QEMU reviewers give short snippets
782b0e4ecdSDaniel P. Berrangé    of code as suggested fixes to a patch. The reviewers don't need to have
792b0e4ecdSDaniel P. Berrangé    their own ``Signed-off-by`` added unless their code suggestion was
802b0e4ecdSDaniel P. Berrangé    unusually large, but it is common to add ``Suggested-by`` as a credit
812b0e4ecdSDaniel P. Berrangé    for non-trivial code.
822b0e4ecdSDaniel P. Berrangé
832b0e4ecdSDaniel P. Berrangé  * Both contributors work for the same employer and the employer requires
842b0e4ecdSDaniel P. Berrangé    copyright assignment.
852b0e4ecdSDaniel P. Berrangé
862b0e4ecdSDaniel P. Berrangé    It can be said that in this case a ``Signed-off-by`` is indicating that
872b0e4ecdSDaniel P. Berrangé    the person has permission to contribute from their employer who is the
882b0e4ecdSDaniel P. Berrangé    copyright holder. It is nonetheless still preferable to include a
892b0e4ecdSDaniel P. Berrangé    ``Signed-off-by`` for each contributor, as in some countries employees are
902b0e4ecdSDaniel P. Berrangé    not able to assign copyright to their employer, and it also covers any
912b0e4ecdSDaniel P. Berrangé    time invested outside working hours.
922b0e4ecdSDaniel P. Berrangé
932b0e4ecdSDaniel P. BerrangéWhen multiple ``Signed-off-by`` tags are present, they should be strictly kept
942b0e4ecdSDaniel P. Berrangéin order of authorship, from oldest to newest.
952b0e4ecdSDaniel P. Berrangé
962b0e4ecdSDaniel P. BerrangéOther commit tags
972b0e4ecdSDaniel P. Berrangé~~~~~~~~~~~~~~~~~
982b0e4ecdSDaniel P. Berrangé
992b0e4ecdSDaniel P. BerrangéWhile the ``Signed-off-by`` tag is mandatory, there are a number of other tags
1002b0e4ecdSDaniel P. Berrangéthat are commonly used during QEMU development:
1012b0e4ecdSDaniel P. Berrangé
1022b0e4ecdSDaniel P. Berrangé * **``Reviewed-by``**: when a QEMU community member reviews a patch on the
1032b0e4ecdSDaniel P. Berrangé   mailing list, if they consider the patch acceptable, they should send an
1042b0e4ecdSDaniel P. Berrangé   email reply containing a ``Reviewed-by`` tag. Subsystem maintainers who
1052b0e4ecdSDaniel P. Berrangé   review a patch should add this even if they are also adding their
1062b0e4ecdSDaniel P. Berrangé   ``Signed-off-by`` to the same commit.
1072b0e4ecdSDaniel P. Berrangé
1082b0e4ecdSDaniel P. Berrangé * **``Acked-by``**: when a QEMU subsystem maintainer approves a patch that
1092b0e4ecdSDaniel P. Berrangé   touches their subsystem, but intends to allow a different maintainer to
1102b0e4ecdSDaniel P. Berrangé   queue it and send a pull request, they would send a mail containing a
1112b0e4ecdSDaniel P. Berrangé   ``Acked-by`` tag. Where a patch touches multiple subsystems, ``Acked-by``
1122b0e4ecdSDaniel P. Berrangé   only implies review of the maintainers' own areas of responsibility. If a
1132b0e4ecdSDaniel P. Berrangé   maintainer wants to indicate they have done a full review they should use
1142b0e4ecdSDaniel P. Berrangé   a ``Reviewed-by`` tag.
1152b0e4ecdSDaniel P. Berrangé
1162b0e4ecdSDaniel P. Berrangé * **``Tested-by``**: when a QEMU community member has functionally tested the
1172b0e4ecdSDaniel P. Berrangé   behaviour of the patch in some manner, they should send an email reply
1182b0e4ecdSDaniel P. Berrangé   containing a ``Tested-by`` tag.
1192b0e4ecdSDaniel P. Berrangé
1202b0e4ecdSDaniel P. Berrangé * **``Reported-by``**: when a QEMU community member reports a problem via the
1212b0e4ecdSDaniel P. Berrangé   mailing list, or some other informal channel that is not the issue tracker,
1222b0e4ecdSDaniel P. Berrangé   it is good practice to credit them by including a ``Reported-by`` tag on
1232b0e4ecdSDaniel P. Berrangé   any patch fixing the issue. When the problem is reported via the GitLab
1242b0e4ecdSDaniel P. Berrangé   issue tracker, however, it is sufficient to just include a link to the
1252b0e4ecdSDaniel P. Berrangé   issue.
1262b0e4ecdSDaniel P. Berrangé
1272b0e4ecdSDaniel P. Berrangé * **``Suggested-by``**: when a reviewer or other 3rd party makes non-trivial
1282b0e4ecdSDaniel P. Berrangé   suggestions for how to change a patch, it is good practice to credit them
1292b0e4ecdSDaniel P. Berrangé   by including a ``Suggested-by`` tag.
1302b0e4ecdSDaniel P. Berrangé
1312b0e4ecdSDaniel P. BerrangéSubsystem maintainer requirements
1322b0e4ecdSDaniel P. Berrangé~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1332b0e4ecdSDaniel P. Berrangé
1342b0e4ecdSDaniel P. BerrangéWhen a subsystem maintainer accepts a patch from a contributor, in addition to
1352b0e4ecdSDaniel P. Berrangéthe normal code review points, they are expected to validate the presence of
1362b0e4ecdSDaniel P. Berrangésuitable ``Signed-off-by`` tags.
1372b0e4ecdSDaniel P. Berrangé
1382b0e4ecdSDaniel P. BerrangéAt the time they queue the patch in their subsystem tree, the maintainer
1392b0e4ecdSDaniel P. Berrangé**must** also then add their own ``Signed-off-by`` to indicate that they have
1402b0e4ecdSDaniel P. Berrangédone the aforementioned validation. This is in addition to any of their own
1412b0e4ecdSDaniel P. Berrangé``Reviewed-by`` tags the subsystem maintainer may wish to include.
1422b0e4ecdSDaniel P. Berrangé
1432b0e4ecdSDaniel P. BerrangéWhen the maintainer modifies the patch after pulling into their tree, they
1442b0e4ecdSDaniel P. Berrangéshould record their contribution.  This is typically done via a note in the
1452b0e4ecdSDaniel P. Berrangécommit message, just prior to the maintainer's ``Signed-off-by``::
1462b0e4ecdSDaniel P. Berrangé
1472b0e4ecdSDaniel P. Berrangé    Signed-off-by: Cory Contributor <cory.contributor@example.com>
1482b0e4ecdSDaniel P. Berrangé    [Comment rephrased for clarity]
1492b0e4ecdSDaniel P. Berrangé    Signed-off-by: Mary Maintainer <mary.maintainer@mycorp.test>
1502b0e4ecdSDaniel P. Berrangé
1512b0e4ecdSDaniel P. Berrangé
1522b0e4ecdSDaniel P. BerrangéTools for adding ``Signed-off-by``
1532b0e4ecdSDaniel P. Berrangé~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1542b0e4ecdSDaniel P. Berrangé
1552b0e4ecdSDaniel P. BerrangéThere are a variety of ways tools can support adding ``Signed-off-by`` tags
1562b0e4ecdSDaniel P. Berrangéfor patches, avoiding the need for contributors to manually type in this
1572b0e4ecdSDaniel P. Berrangérepetitive text each time.
1582b0e4ecdSDaniel P. Berrangé
1592b0e4ecdSDaniel P. Berrangégit commands
1602b0e4ecdSDaniel P. Berrangé^^^^^^^^^^^^
1612b0e4ecdSDaniel P. Berrangé
1622b0e4ecdSDaniel P. BerrangéWhen creating, or amending, a commit the ``-s`` flag to ``git commit`` will
1632b0e4ecdSDaniel P. Berrangéappend a suitable line matching the configured git author details.
1642b0e4ecdSDaniel P. Berrangé
1652b0e4ecdSDaniel P. BerrangéIf preparing patches using the ``git format-patch`` tool, the ``-s`` flag can
1662b0e4ecdSDaniel P. Berrangébe used to append a suitable line in the emails it creates, without modifying
1672b0e4ecdSDaniel P. Berrangéthe local commits. Alternatively to modify all the local commits on a branch::
1682b0e4ecdSDaniel P. Berrangé
1692b0e4ecdSDaniel P. Berrangé  git rebase master -x 'git commit --amend --no-edit -s'
1702b0e4ecdSDaniel P. Berrangé
1712b0e4ecdSDaniel P. Berrangéemacs
1722b0e4ecdSDaniel P. Berrangé^^^^^
1732b0e4ecdSDaniel P. Berrangé
1742b0e4ecdSDaniel P. BerrangéIn the file ``$HOME/.emacs.d/abbrev_defs`` add:
1752b0e4ecdSDaniel P. Berrangé
1762b0e4ecdSDaniel P. Berrangé.. code:: elisp
1772b0e4ecdSDaniel P. Berrangé
1782b0e4ecdSDaniel P. Berrangé  (define-abbrev-table 'global-abbrev-table
1792b0e4ecdSDaniel P. Berrangé    '(
1802b0e4ecdSDaniel P. Berrangé      ("8rev" "Reviewed-by: YOUR NAME <your@email.addr>" nil 1)
1812b0e4ecdSDaniel P. Berrangé      ("8ack" "Acked-by: YOUR NAME <your@email.addr>" nil 1)
1822b0e4ecdSDaniel P. Berrangé      ("8test" "Tested-by: YOUR NAME <your@email.addr>" nil 1)
1832b0e4ecdSDaniel P. Berrangé      ("8sob" "Signed-off-by: YOUR NAME <your@email.addr>" nil 1)
1842b0e4ecdSDaniel P. Berrangé     ))
1852b0e4ecdSDaniel P. Berrangé
1862b0e4ecdSDaniel P. Berrangéwith this change, if you type (for example) ``8rev`` followed by ``<space>``
1872b0e4ecdSDaniel P. Berrangéor ``<enter>`` it will expand to the whole phrase.
1882b0e4ecdSDaniel P. Berrangé
1892b0e4ecdSDaniel P. Berrangévim
1902b0e4ecdSDaniel P. Berrangé^^^
1912b0e4ecdSDaniel P. Berrangé
1922b0e4ecdSDaniel P. BerrangéIn the file ``$HOME/.vimrc`` add::
1932b0e4ecdSDaniel P. Berrangé
1942b0e4ecdSDaniel P. Berrangé  iabbrev 8rev Reviewed-by: YOUR NAME <your@email.addr>
1952b0e4ecdSDaniel P. Berrangé  iabbrev 8ack Acked-by: YOUR NAME <your@email.addr>
1962b0e4ecdSDaniel P. Berrangé  iabbrev 8test Tested-by: YOUR NAME <your@email.addr>
1972b0e4ecdSDaniel P. Berrangé  iabbrev 8sob Signed-off-by: YOUR NAME <your@email.addr>
1982b0e4ecdSDaniel P. Berrangé
1992b0e4ecdSDaniel P. Berrangéwith this change, if you type (for example) ``8rev`` followed by ``<space>``
2002b0e4ecdSDaniel P. Berrangéor ``<enter>`` it will expand to the whole phrase.
2012b0e4ecdSDaniel P. Berrangé
2022b0e4ecdSDaniel P. BerrangéRe-starting abandoned work
2032b0e4ecdSDaniel P. Berrangé~~~~~~~~~~~~~~~~~~~~~~~~~~
2042b0e4ecdSDaniel P. Berrangé
2052b0e4ecdSDaniel P. BerrangéFor a variety of reasons there are some patches that get submitted to QEMU but
2062b0e4ecdSDaniel P. Berrangénever merged. An unrelated contributor may decide (months or years later) to
2072b0e4ecdSDaniel P. Berrangécontinue working from the abandoned patch and re-submit it with extra changes.
2082b0e4ecdSDaniel P. Berrangé
2092b0e4ecdSDaniel P. BerrangéThe general principles when picking up abandoned work are:
2102b0e4ecdSDaniel P. Berrangé
2112b0e4ecdSDaniel P. Berrangé * Continue to credit the original author for their work, by maintaining their
2122b0e4ecdSDaniel P. Berrangé   original ``Signed-off-by``
2132b0e4ecdSDaniel P. Berrangé * Indicate where the original patch was obtained from (mailing list, bug
2142b0e4ecdSDaniel P. Berrangé   tracker, author's git repo, etc) when sending it for review
2152b0e4ecdSDaniel P. Berrangé * Acknowledge the extra work of the new contributor by including their
2162b0e4ecdSDaniel P. Berrangé   ``Signed-off-by`` in the patch in addition to the orignal author's
2172b0e4ecdSDaniel P. Berrangé * Indicate who is responsible for what parts of the patch. This is typically
2182b0e4ecdSDaniel P. Berrangé   done via a note in the commit message, just prior to the new contributor's
2192b0e4ecdSDaniel P. Berrangé   ``Signed-off-by``::
2202b0e4ecdSDaniel P. Berrangé
2212b0e4ecdSDaniel P. Berrangé    Signed-off-by: Some Person <some.person@example.com>
2222b0e4ecdSDaniel P. Berrangé    [Rebased and added support for 'foo']
2232b0e4ecdSDaniel P. Berrangé    Signed-off-by: New Person <new.person@mycorp.test>
2242b0e4ecdSDaniel P. Berrangé
2252b0e4ecdSDaniel P. BerrangéIn complicated cases, or if otherwise unsure, ask for advice on the project
2262b0e4ecdSDaniel P. Berrangémailing list.
2272b0e4ecdSDaniel P. Berrangé
2282b0e4ecdSDaniel P. BerrangéIt is also recommended to attempt to contact the original author to let them
2292b0e4ecdSDaniel P. Berrangéknow you are interested in taking over their work, in case they still intended
2302b0e4ecdSDaniel P. Berrangéto return to the work, or had any suggestions about the best way to continue.
231*b5d00557SDaniel P. Berrangé
232*b5d00557SDaniel P. BerrangéInclusion of generated files
233*b5d00557SDaniel P. Berrangé~~~~~~~~~~~~~~~~~~~~~~~~~~~~
234*b5d00557SDaniel P. Berrangé
235*b5d00557SDaniel P. BerrangéFiles in patches contributed to QEMU are generally expected to be provided
236*b5d00557SDaniel P. Berrangéonly in the preferred format for making modifications. The implication of
237*b5d00557SDaniel P. Berrangéthis is that the output of code generators or compilers is usually not
238*b5d00557SDaniel P. Berrangéappropriate to contribute to QEMU.
239*b5d00557SDaniel P. Berrangé
240*b5d00557SDaniel P. BerrangéFor reasons of practicality there are some exceptions to this rule, where
241*b5d00557SDaniel P. Berrangégenerated code is permitted, provided it is also accompanied by the
242*b5d00557SDaniel P. Berrangécorresponding preferred source format. This is done where it is impractical
243*b5d00557SDaniel P. Berrangéto expect those building QEMU to run the code generation or compilation
244*b5d00557SDaniel P. Berrangéprocess. A non-exhaustive list of examples is:
245*b5d00557SDaniel P. Berrangé
246*b5d00557SDaniel P. Berrangé * Images: where an bitmap image is created from a vector file it is common
247*b5d00557SDaniel P. Berrangé   to include the rendered bitmaps at desired resolution(s), since subtle
248*b5d00557SDaniel P. Berrangé   changes in the rasterization process / tools may affect quality. The
249*b5d00557SDaniel P. Berrangé   original vector file is expected to accompany any generated bitmaps.
250*b5d00557SDaniel P. Berrangé
251*b5d00557SDaniel P. Berrangé * Firmware: QEMU includes pre-compiled binary ROMs for a variety of guest
252*b5d00557SDaniel P. Berrangé   firmwares. When such binary ROMs are contributed, the corresponding source
253*b5d00557SDaniel P. Berrangé   must also be provided, either directly, or through a git submodule link.
254*b5d00557SDaniel P. Berrangé
255*b5d00557SDaniel P. Berrangé * Dockerfiles: the majority of the dockerfiles are automatically generated
256*b5d00557SDaniel P. Berrangé   from a canonical list of build dependencies maintained in tree, together
257*b5d00557SDaniel P. Berrangé   with the libvirt-ci git submodule link. The generated dockerfiles are
258*b5d00557SDaniel P. Berrangé   included in tree because it is desirable to be able to directly build
259*b5d00557SDaniel P. Berrangé   container images from a clean git checkout.
260*b5d00557SDaniel P. Berrangé
261*b5d00557SDaniel P. Berrangé * eBPF: QEMU includes some generated eBPF machine code, since the required
262*b5d00557SDaniel P. Berrangé   eBPF compilation tools are not broadly available on all targetted OS
263*b5d00557SDaniel P. Berrangé   distributions. The corresponding eBPF C code for the binary is also
264*b5d00557SDaniel P. Berrangé   provided. This is a time-limited exception until the eBPF toolchain is
265*b5d00557SDaniel P. Berrangé   sufficiently broadly available in distros.
266*b5d00557SDaniel P. Berrangé
267*b5d00557SDaniel P. BerrangéIn all cases above, the existence of generated files must be acknowledged
268*b5d00557SDaniel P. Berrangéand justified in the commit that introduces them.
269*b5d00557SDaniel P. Berrangé
270*b5d00557SDaniel P. BerrangéTools which perform changes to existing code with deterministic algorithmic
271*b5d00557SDaniel P. Berrangémanipulation, driven by user specified inputs, are not generally considered
272*b5d00557SDaniel P. Berrangéto be "generators".
273*b5d00557SDaniel P. Berrangé
274*b5d00557SDaniel P. BerrangéFor instance, using Coccinelle to convert code from one pattern to another
275*b5d00557SDaniel P. Berrangépattern, or fixing documentation typos with a spell checker, or transforming
276*b5d00557SDaniel P. Berrangécode using sed / awk / etc, are not considered to be acts of code
277*b5d00557SDaniel P. Berrangégeneration. Where an automated manipulation is performed on code, however,
278*b5d00557SDaniel P. Berrangéthis should be declared in the commit message.
279*b5d00557SDaniel P. Berrangé
280*b5d00557SDaniel P. BerrangéAt times contributors may use or create scripts/tools to generate an initial
281*b5d00557SDaniel P. Berrangéboilerplate code template which is then filled in to produce the final patch.
282*b5d00557SDaniel P. BerrangéThe output of such a tool would still be considered the "preferred format",
283*b5d00557SDaniel P. Berrangésince it is intended to be a foundation for further human authored changes.
284*b5d00557SDaniel P. BerrangéSuch tools are acceptable to use, provided there is clearly defined copyright
285*b5d00557SDaniel P. Berrangéand licensing for their output.
286