diff options
Diffstat (limited to 'keywording/text.rst')
-rw-r--r-- | keywording/text.rst | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/keywording/text.rst b/keywording/text.rst new file mode 100644 index 0000000..307bf98 --- /dev/null +++ b/keywording/text.rst @@ -0,0 +1,172 @@ +Keywording +========== + +.. Note:: Terminology + The term 'package' refers to an entire directory, for example + ``app-editors/vim`` -- it does *not* refer to a specific version. The terms + 'ebuild' or 'package version' are used when this meaning is intended. This + distinction is important. + +Every ebuild should specify a ``KEYWORDS`` variable. This variable is used to +indicate the suitability and stability of both the package and the ebuild on +each given arch (``sparc``, ``ppc``, ``x86-obsd``...). + +.. Note:: The term 'arch' is used in this sense for historical reasons. As a result + of `GLEP 22`_ and the various non-Linux ports, this is no longer a particularly + accurate term. + +A sample ``KEYWORDS`` entry might look like: + +.. CODESAMPLE keywording-1.ebuild + +The different levels of keyword are: + +``arch`` (``x86``, ``ppc-macos``) + Both the package version *and* the ebuild are widely tested, known to work + and not have any serious issues on the indicated platform. + +``~arch`` (``~x86``, ``~ppc-macos``) + The package version and the ebuild are believed to work and do not have any + known serious bugs, but more testing is required before the package version + is considered suitable for ``arch``. + +No keyword + If a package has no keyword for a given arch, it means it is not known + whether the package will work, or that insufficient testing has occurred for + ``~arch``. + +``-arch`` (``-x86``, ``-ppc-macos``) + The package version will not work on the arch. This could be caused by badly + written code (for example, non-64-bit or endian clean code), relying upon + particular hardware (for example, a BIOS querying tool would not work on + non-BIOS architectures) or binary only packages. + +The ``-*`` keyword is special. It is used to indicate package versions which are +not worth trying to test on unlisted archs. For example, a binary-only package +which is only supported upstream on ``x86`` and ``ppc`` might use: + +.. CODESAMPLE keywording-2.ebuild + +This is different in implication from ``"x86 ppc"`` -- the former implies that +it will not work on other archs, whereas the latter implies that it has not been +tested. + +Do **not** use the ``*`` or ``~*`` special keywords in ebuilds. + +Equal Visibility Requirement +---------------------------- + +An ebuild **must not** depend upon any package that is of a lower keyword level +than itself. For example, if ``foo-1.2`` depends upon ``bar-1.2``, and +``bar-1.2`` is ``~x86``, then ``foo-1.2`` must **not** be marked stable on +``x86`` unless ``bar-1.2`` is also stabilised. + +You may assume that if a user accepts ``~arch`` for a given arch then they also +accept ``arch``. + +For optional dependencies, all *possible* dependencies must satisfy the above. +Note that certain ``USE`` flags can be forcibly disabled on a per-profile basis +-- talk to the arch teams if you require this. For either-or dependencies, *at +least one* of the options must be of equal or better visibility than the +package in question. + +Hard Masks +---------- + +The ``package.mask`` file can be used to 'hard mask' individual or groups of +ebuilds. This should be used for testing ebuilds or beta releases of software, +and may also be used if a package has serious compatibility problems. Packages +which are not hard masked must **not** have a dependency upon hard masked +packages. + +The only time it is acceptable for a user to see the ``Possibly a DEPEND +problem`` error message is if they have manually changed visibility levels for a +package (for example, through ``/etc/portage/``) and have missed a dependency. +**You should never commit a change which could cause this error to appear on a +user system**. + +Keywording New Packages +----------------------- + +.. Important:: New packages should be marked as ``~arch`` only upon + architectures for which the committing developer has tested. + +Do **not** assume that your package works on all architectures. Do **not** +assume that user submitted ebuilds will have correct ``KEYWORDS`` -- chances are +they just copied from somewhere else. Do **not** assume that upstream's +'supported architectures' list is correct. Do **not** assume that because your +code is written in Perl / Python / Java / whatever that it will run on other +archs (there is at least one case of a ``vim`` script which only worked on +``x86``). + +Note that most (non-x86) archs expect you to be on the arch team and bugzilla +alias if you are committing packages with keywords for that arch, and may have +additional requirements of which you should be aware (on ``mips``, for example, +there are multiple ABIs and byte orders to consider -- a package working on your +``o32`` box may not work on ``o64`` or ``n32``). Contact the individual arch +teams for details. + +Do **not** commit straight to ``arch``. + +Keywording on Upgrades +---------------------- + +When upgrading, drop all existing keywords from ``arch`` to ``~arch``, and leave +any existing ``~arch`` keywords intact. This must be done even if you *think* +you're just making a trivial fix -- there have been several examples of the +stable tree getting broken this way. + +Sometimes you may need to remove a keyword because of new unresolved +dependencies. If you do this, you **must** file a bug notifying the relevant +arch teams. + +This also applies to revision bumps, not just to upstream version changes. + +Moving from ``~arch`` to ``arch`` +--------------------------------- + +With the exception of ``x86``, moving a package from ``~arch`` to ``arch`` is +done only by the relevant arch teams. If you have access to non-x86 but are not +on the arch teams, you may wish to make individual arrangements -- the arch +teams are happy for help, so long as they know what is going on. + +For a package to move to stable, the following guidelines must be met: + +* The package has spent a reasonable amount of time in ``~arch`` first. Thirty + days is the usual figure, although this is clearly only a guideline. For + critical packages, a much longer duration is expected. For small packages + which have only minor changes between versions, a shorter period is sometimes + appropriate. + +* The package must not have any non-``arch`` dependencies. + +* The package must not have any severe outstanding bugs or issues. + +* The package must be widely tested. + +* If the package is a library, it should be known not to break any package which + depends upon it. + +* (Excluding x86) the relevant arch team must agree to it. + +For security fixes, the "reasonable amount of time" guideline may be relaxed. +See the `Vulnerability Treatment Policy +<http://www.gentoo.org/security/en/vulnerability-policy.xml>`_. + +Removing Package Versions +------------------------- + +When removing ebuild, ensure that you do not remove the most recent version at +any given keyword level on any profile. The aim here is: + +* Never to force a downgrade. (Exception: occasionally you really do want to + force a downgrade, for example if the newly committed ``foo-1.3`` turns out + to be badly broken and that making everyone downgrade to ``foo-1.2`` is the + better option. This is rare.) + +* Do not break any existing dependencies. + +If you would like a particular package version moved to stable on certain archs +so that you can tidy up, file a bug. + +.. vim: set ft=glep tw=80 sw=4 et spell spelllang=en : .. |