chiark / gitweb /
update information about gpg and t-p-u uploads
[developers-reference.git] / developers-reference.sgml
index 1311438405553150700f2b8226a1f83f3f2d23c3..48cc70e006d3aecb60d4b9467a8dd9dd8e9966fe 100644 (file)
@@ -6,7 +6,7 @@
   <!ENTITY % commondata  SYSTEM "common.ent" > %commondata;
 
   <!-- CVS revision of this document -->
-  <!ENTITY cvs-rev "$Revision: 1.234 $">
+  <!ENTITY cvs-rev "$Revision: 1.244 $">
 
   <!-- if you are translating this document, please notate the CVS
        revision of the original developer's reference in cvs-en-rev -->
@@ -289,6 +289,11 @@ public servers or multiuser machines, such as the Debian servers
 Read the documentation that comes with your software; read the <url
 id="&url-pgp-faq;" name="PGP FAQ">.
        <p>
+You need to ensure not only that your key is secure against being stolen,
+but also that it is secure against being lost. Generate and make a copy
+(best also in paper form) of your revocation certificate; this is needed if
+your key is lost.
+       <p>
 If you add signatures to your public key, or add user identities, you
 can update the Debian key ring by sending your key to the key server at
 <tt>&keyserver-host;</tt>.  If you need to add a completely new key,
@@ -953,64 +958,14 @@ Note that development under <em>unstable</em> continues during the
 freeze period, since the <em>unstable</em> distribution remains in
 place in parallel with <em>testing</em>.
 
-    <sect2 id="testing">
+    <sect2>
        <heading>More information about the testing distribution</heading>
+       <p>
+Packages are usually installed into the `testing' distribution after they
+have undergone some degree of testing in unstable.
        <p>
-The scripts that update the <em>testing</em> distribution are run each
-day after the installation of the updated packages. They generate the
-<file>Packages</file> files for the <em>testing</em> distribution, but
-they do so in an intelligent manner trying to avoid any inconsistency
-and trying to use only non-buggy packages.
-       <p>
-The inclusion of a package from <em>unstable</em> is conditional on
-the following:
-<list>
-    <item>
-The package must have been available in <em>unstable</em> for several days;
-the precise number depends on the upload's urgency field. It
-is 10 days for low urgency, 5 days for medium urgency and 2 days for high
-urgency; please note that the urgency is sticky, means that the highest
-urgency uploaded since the last testing transition is taken into account.
-Those delays may be doubled during a freeze, or testing transition may be
-switched off at all;
-    <item>
-It must have less release-critical bugs than the version available
-in <em>testing</em>;
-    <item>
-It must be available on all architectures on which it has been
-previously built. <ref id="madison"> may be of interest to
-check that information;
-    <item>
-It must not break any dependency of a package that is already available
-in <em>testing</em>;
-    <item>
-The packages on which it depends must either be available in <em>testing</em>
-or they must be accepted into <em>testing</em> at the same time (and they will
-if they respect all the necessary criteria);
-</list>
-       <p>
-To find out whether a package is progressing into testing or not, see the
-testing script output on the <url name="web page of the testing distribution"
-id="&url-testing-maint;">, or use the program <prgn>grep-excuses</prgn>
-which is in the <package>devscripts</package> package. This utility can
-easily be used in a <manref name="crontab" section="5"> to keep one
-informed of the progression of their packages into <em>testing</em>.
-       <p>
-The <file>update_excuses</file> file does not always give the precise reason
-why the package is refused, one may have to find it on their own by looking
-for what would break with the inclusion of the package. The
-<url id="&url-testing-maint;" name="testing web page"> gives some more
-information about the usual problems which may be causing such troubles.
-       <p>
-Sometimes, some packages never enter <em>testing</em> because the set of
-inter-relationship is too complicated and cannot be sorted out
-by the scripts. In that case, the release manager must be
-contacted, and he will force the inclusion of the packages.
-       <p>
-In general, please refer to the <url name="testing web page"
-id="&url-testing-maint;"> for more information. It also includes
-answers to some of the frequently asked questions.
-
+For more details, please see the <qref id="testing">information about the
+testing distribution</qref>.
 
        <sect2 id="experimental">Experimental
          <p>
@@ -1175,7 +1130,7 @@ why you can not remove an upload once it has been accepted.
 
       <sect1 id="delayed-incoming-broken">Delayed incoming
        <p>
-<em>Note:</em> This description here is currently disabled, because
+<em>Note:</em> This description here is currently not working, because
 ftp-master is restricted. Please see <ref id="delayed-incoming"> for
 the currently working way.
        <p>
@@ -1761,23 +1716,9 @@ uploading to <em>stable</em>/<em>stable-proposed-updates</em>, so that the
 uploaded package fits the needs of the next point release.
 
        <sect1 id="upload-t-p-u">
-          <heading>Special case: uploads to <em>testing-proposed-updates</em></heading>
-         <p>
-The testing distribution is fed with packages from unstable according to the rules
-explained in <ref id="testing">. However, the release manager may stop the testing
-scripts when he wants to freeze the distribution. In that case, you may want to
-upload to <em>testing-proposed-updates</em> to provide fixed packages during the freeze.
-         <p>
-Keep in mind that packages uploaded there are not automatically processed, they
-have to go through the hands of the release manager. So you'd better have a good
-reason to upload there. In order to know what a good reason is in the
-release manager's eyes, you should read the instructions that he regularly
-gives on &email-debian-devel-announce;.
+          <heading>Special case: uploads to <em>testing/testing-proposed-updates</em></heading>
          <p>
-You should not upload to <em>testing-proposed-updates</em> when you can update your
-packages through <em>unstable</em>. If you can't (for example because you have a
-newer development version in unstable), you may use it but it is recommended to ask
-the authorization of the release manager before.
+Please see the information in the <qref id="t-p-u">testing section</qref> for details.
 
 
     <sect id="upload">Uploading a package
@@ -2070,9 +2011,8 @@ doing so, please read the <url id="&url-tech-ctte;" name="recommended procedure"
     <item>
 If the bug is real but it's caused by another package, just reassign
 the bug to the right package. If you don't know which package it should
-be reassigned to, you may either ask for help on &email-debian-devel; or
-reassign it to <package>debian-policy</package> to let them decide which
-package is at fault.
+be reassigned to, you should ask for help on
+<qref id="irc-channels">IRC</qref> or on &email-debian-devel;.
     <p>
 Sometimes you also have to adjust the severity of the bug so that it
 matches our definition of the severity. That's because people tend to
@@ -2706,6 +2646,12 @@ The way to invoke <prgn>dpkg-buildpackage</prgn> is as
 set <var>porter-email</var> to your email address.  This will do a
 binary-only build of only the architecture-dependent portions of the
 package, using the `binary-arch' target in <file>debian/rules</file>.
+       <p>
+If you are working on a Debian machine for your porting efforts and you
+need to sign your upload locally for the acceptance in the archive, you
+can run <prgn>debsign</prgn> on your <file>.changes</file> file to have
+it signed conveniently, or use the remote signing mode of <prgn>dpkg-sig</prgn>.
+
 
        <sect2 id="binary-only-nmu">
           <heading>Recompilation or binary-only NMU</heading>
@@ -2716,7 +2662,14 @@ library, bad compiler, ...). Then you may just need to recompile it in
 an updated environment. However, you have to bump the version number in
 this case, so that the old bad package can be replaced in the Debian archive
 (<prgn>katie</prgn> refuses to install new packages if they don't have a
-version number greater than the currently available one).  Despite the
+version number greater than the currently available one).
+       <p>
+You have to make sure that your binary-only NMU doesn't render the package
+uninstallable. This could happen when a source package generates
+arch-dependend and arch-independend packages that depend on each other via
+$(Source-Version).
+       <p>
+Despite the
 required modification of the changelog, these are called binary-only NMUs
 &mdash; there is no need in this case to trigger all other architectures
 to consider themselves out of date or requiring recompilation.
@@ -2733,6 +2686,10 @@ if the latest version you are recompiling against was version
 ``2.9-3'', your NMU should carry a version of ``2.9-3.0.1''.  If the
 latest version was ``3.4-2.1'', your NMU should have a version number
 of ``3.4-2.1.1''.
+       <p>
+Similar to initial porter uploads, the correct way of invoking
+<prgn>dpkg-buildpackage</prgn> is <tt>dpkg-buildpackage -B</tt> to only
+build the architecture-dependent parts of the package.
 
 
        <sect2 id="source-nmu-when-porter">
@@ -2744,17 +2701,11 @@ the wait cycle for a porter's source NMU is smaller than for a
 non-porter, since porters have to cope with a large quantity of
 packages.
 Again, the situation varies depending on the distribution they are
-uploading to.
-
-<!-- 
-FIXME: commented out until I can work out how to upload to testing directly
-
-  Crucial fixes (i.e., changes need to get a source
-package to compile for a released-targeted architecture) can be
-uploaded with <em>no</em> waiting period for the `frozen' distribution.
- -->
+uploading to. It also varies whether the architecture is a candidate
+for inclusion into the next stable release; the release managers
+decide and announce which architectures are candidates.
          <p>
-However, if you are a porter doing an NMU for `unstable', the above
+If you are a porter doing an NMU for `unstable', the above
 guidelines for porting should be followed, with two variations.
 Firstly, the acceptable waiting period &mdash; the time between when the
 bug is submitted to the BTS and when it is OK to do an NMU &mdash; is seven
@@ -2762,6 +2713,8 @@ days for porters working on the unstable distribution.  This period
 can be shortened if the problem is critical and imposes hardship on
 the porting effort, at the discretion of the porter group.  (Remember,
 none of this is Policy, just mutually agreed upon guidelines.)
+For uploads to stable or testing, please coordinate with the appropriate
+release team first.
          <p>
 Secondly, porters doing source NMUs should make sure that the bug they
 submit to the BTS should be of severity `serious' or greater.  This
@@ -2849,86 +2802,50 @@ distributions quickly.
     <sect id="nmu">Non-Maintainer Uploads (NMUs)
       <p>
 Under certain circumstances it is necessary for someone other than the
-official package maintainer to make a release of a package.  This is
+official package maintainer to make a release of a package. This is
 called a non-maintainer upload, or NMU.
        <p>
-Debian porters, who compile packages for different architectures,
-occasionally do binary-only NMUs as part of their porting activity
-(see <ref id="porting">).  Another reason why NMUs are done is when a
-Debian developer needs to fix another developer's packages in order to
-address serious security problems or crippling bugs, especially during
-the freeze, or when the package maintainer is unable to release a fix
+This section handles only source NMUs, i.e. NMUs which upload a new
+version of the package. For binary-only NMUs by porters or QA members,
+please see <ref id="binary-only-nmu">.
+For buildd uploads (which are strictly speaking also NMUs), please see <ref
+id="buildd">.
+       <p>
+The main reason why NMUs are done is when a
+developer needs to fix another developer's packages in order to
+address serious problems or crippling bugs
+or when the package maintainer is unable to release a fix
 in a timely fashion.
-      <p>
-This chapter contains information providing guidelines for when and
-how NMUs should be done.  A fundamental distinction is made between
-source and binary-only NMUs, which is explained in the next section.
-
-      <sect1 id="nmu-terms">Terminology
        <p>
-There are two new terms used throughout this section: ``binary-only NMU''
-and ``source NMU''.  These terms are used with specific technical
-meaning throughout this document.  Both binary-only and source NMUs are
-similar, since they involve an upload of a package by a developer who
-is not the official maintainer of that package.  That is why it's a
-<em>non-maintainer</em> upload.
-       <p>
-A source NMU is an upload of a package by a developer who is not the
-official maintainer, for the purposes of fixing a bug in the package.
-Source NMUs always involves changes to the source (even if it is just
-a change to <file>debian/changelog</file>).  This can be either a
-change to the upstream source, or a change to the Debian bits of the
-source.  Note, however, that source NMUs may also include
-architecture-dependent packages, as well as an updated Debian diff.
-       <p>
-A binary-only NMU is a recompilation and upload of a binary package
-for a given architecture.  As such, it is usually part of a porting
-effort.  A binary-only NMU is a non-maintainer uploaded binary version
-of a package, with no source changes required.  There are many cases
-where porters must fix problems in the source in order to get them to
-compile for their target architecture; that would be considered a
-source NMU rather than a binary-only NMU.  As you can see, we don't
-distinguish in terminology between porter NMUs and non-porter NMUs.
-       <p>
-Both classes of NMUs, source and binary-only, can be lumped by the
-term ``NMU''.  However, this often leads to confusion, since most
-people think ``source NMU'' when they think ``NMU''.  So it's best to
-be careful.  In this chapter, if we use the unqualified term ``NMU'',
-we refer to any type of non-maintainer upload NMUs, whether source and
-binary, or binary-only.
-
-
-      <sect1 id="nmu-who">Who can do an NMU
+First and foremost, it is critical that NMU patches to source should
+be as non-disruptive as possible.  Do not do housekeeping tasks, do
+not change the name of modules or files, do not move directories; in
+general, do not fix things which are not broken.  Keep the patch as
+small as possible.  If things bother you aesthetically, talk to the
+Debian maintainer, talk to the upstream maintainer, or submit a bug.
+However, aesthetic changes must <em>not</em> be made in a non-maintainer
+upload.
        <p>
-Only official, registered Debian maintainers can do binary or source
-NMUs.  An official maintainer is someone who has their key in the
-Debian key ring.  Non-developers, however, are encouraged to download
-the source package and start hacking on it to fix problems; however,
-rather than doing an NMU, they should just submit worthwhile patches
-to the Bug Tracking System.  Maintainers almost always appreciate
-quality patches and bug reports.
+And please remember the Hippocratic Oath: "Above all, do no harm."
+It is better if a package has an grave bug open, than if a not working
+patch was applied, and the bug is only hidden now but not resolved.
 
 
-      <sect1 id="nmu-when">When to do a source NMU
+      <sect1 id="nmu-guidelines">How to do a NMU
        <p>
-Guidelines for when to do a source NMU depend on the target
-distribution, i.e., stable, unstable, or experimental.  Porters have
-slightly different rules than non-porters, due to their unique
-circumstances (see <ref id="source-nmu-when-porter">).
+NMUs which fix important, serious or higher severity bugs are encouraged
+and accepted.
+You should endeavor to reach the current maintainer of the package; they
+might be just about to upload a fix for the problem, or have a better
+solution present.
        <p>
-When a security bug is detected, the security team may do an NMU.
-Please refer to <ref id="bug-security"> for more information.
+NMUs should be made to assist a package's maintainer in resolving bugs.
+Maintainers should be thankfull for that help, and NMUers should respect
+the decisions of maintainers, and try to personally help the maintainer by
+their work.
        <p>
-During the release cycle (see <ref id="sec-dists">), NMUs which fix
-serious or higher severity bugs are encouraged and accepted.  Even
-during this window, however, you should endeavor to reach the current
-maintainer of the package; they might be just about to upload a fix
-for the problem.  As with any source NMU, the guidelines found in <ref
-id="nmu-guidelines"> need to be followed. Special exceptions are made
-for <ref id="qa-bsp">.
-       <p>
-Uploading bug fixes to unstable by non-maintainers should only be done
-by following this protocol:
+A NMU should follow all conventions, written down in this section.
+For an upload to testing or unstable, this order of steps is recommended:
        <p>
 <list>
            <item>
@@ -2964,27 +2881,30 @@ before uploading the fixes, and shortening the DELAYED period. It is
 important to notice that even in these so-called "bug squashing party"
 times, the NMU'er has to file bugs and contact the developer first,
 and act later.
-
-      <sect1 id="nmu-guidelines">How to do a source NMU
+Please see <ref id="qa-bsp"> for details.
        <p>
-The following applies to porters insofar as they are playing the dual
-role of being both package bug-fixers and package porters.  If a
-porter has to change the Debian source archive, their upload is
-automatically a source NMU and is subject to its rules.  If a porter is
-simply uploading a recompiled binary package, the rules are different;
-see <ref id="porter-guidelines">.
+For the testing distribution, the rules may be changed by the release
+managers. Please take additional care, and acknowledge that the usual way
+for a package to enter testing is through unstable.
        <p>
-First and foremost, it is critical that NMU patches to source should
-be as non-disruptive as possible.  Do not do housekeeping tasks, do
-not change the name of modules or files, do not move directories; in
-general, do not fix things which are not broken.  Keep the patch as
-small as possible.  If things bother you aesthetically, talk to the
-Debian maintainer, talk to the upstream maintainer, or submit a bug.
-However, aesthetic changes must <em>not</em> be made in a non-maintainer
-upload.
+For the stable distribution, please take extra care. Of course, the release
+managers may also change the rules here. Please verify before upload that
+all your changes are ok for inclusion into the next stable release by the
+release manager.
+       <p>
+When a security bug is detected, the security team may do an NMU, using
+their own rules. Please refer to <ref id="bug-security"> for more
+information.
+       <p>
+For the differences for Porters NMUs, please see 
+<ref id="source-nmu-when-porter">.
+       <p>
+Of course, it is always possible to agree on special rules with a maintainer
+(like the maintainer asking "please upload this fix directly for me, and no
+diff required").
 
 
-       <sect2 id="nmu-version">Source NMU version numbering
+       <sect1 id="nmu-version">NMU version numbering
          <p>
 Whenever you have made a change to a package, no matter how trivial,
 the version number needs to change.  This enables our packing system
@@ -3012,9 +2932,13 @@ make a release based on a new upstream version then the person making
 the release should start with the <var>debian-revision</var> value
 `0.1'.  The usual maintainer of a package should start their
 <var>debian-revision</var> numbering at `1'. 
+       <p>
+If you upload a package to testing or stable, sometimes, you need to
+"fork" the version number tree. For this, version numbers like
+1.1-3sarge0.1 could be used.
 
 
-       <sect2 id="nmu-changelog">
+       <sect1 id="nmu-changelog">
          <heading>Source NMUs must have a new changelog entry</heading>
          <p>
 A non-maintainer doing a source NMU must create a changelog entry,
@@ -3029,7 +2953,7 @@ By convention, source NMU changelog entries start with the line
 </example>
 
 
-       <sect2 id="nmu-patch">Source NMUs and the Bug Tracking System
+       <sect1 id="nmu-patch">Source NMUs and the Bug Tracking System
          <p>
 Maintainers other than the official package maintainer should make as
 few changes to the package as possible, and they should always send a
@@ -3046,7 +2970,7 @@ send a patch.
 If the source NMU (non-maintainer upload) fixes some existing bugs,
 these bugs should be tagged <em>fixed</em> in the Bug Tracking
 System rather than closed.  By convention, only the official package
-maintainer or the original bug submitter are allowed to close bugs.
+maintainer or the original bug submitter close bugs.
 Fortunately, Debian's archive system recognizes NMUs and thus marks
 the bugs fixed in the NMU appropriately if the person doing the NMU
 has listed all bugs in the changelog with the <tt>Closes:
@@ -3057,9 +2981,11 @@ bug was fixed in an NMU; however the bug is left open until the
 changes in the NMU are incorporated officially into the package by
 the official package maintainer.
          <p>
-Also, after doing an NMU, you have to open a new bug and include a
-patch showing all the changes you have made. Alternatively you can send
-that information to the existing bugs that are fixed by your NMU.
+Also, after doing an NMU, you have to send
+that information to the existing bugs that are fixed by your NMU,
+including the unified diff.
+Alternatively you can open a new bug and include a
+patch showing all the changes you have made.
 The normal maintainer will either apply the patch or employ an alternate
 method of fixing the problem.  Sometimes bugs are fixed independently
 upstream, which is another good reason to back out an NMU's patch.
@@ -3071,7 +2997,7 @@ In addition, the normal maintainer should <em>always</em> retain the
 entry in the changelog file documenting the non-maintainer upload.
 
 
-       <sect2 id="nmu-build">Building source NMUs
+       <sect1 id="nmu-build">Building source NMUs
          <p>
 Source NMU packages are built normally.  Pick a distribution using the
 same rules as found in <ref id="distribution">, follow the other
@@ -3087,8 +3013,11 @@ changes file.
 If one of your packages has been NMU'ed, you have to incorporate the
 changes in your copy of the sources. This is easy, you just have
 to apply the patch that has been sent to you. Once this is done, you
-have to close the bugs that have been tagged fixed by the NMU. You
-can either close them manually by sending the required mails to the
+have to close the bugs that have been tagged fixed by the NMU. The easiest
+way is to use the <tt>-v</tt> option of <prgn>dpkg-buildpackage</prgn>,
+as this allows you to include just all changes since your last maintainer
+upload. Alternativly, you
+can close them manually by sending the required mails to the
 BTS or by adding the required <tt>closes: #nnnn</tt> in the changelog
 entry of your next upload.
        <p>
@@ -3100,6 +3029,57 @@ ask them if they would be interested in helping you on a more frequent
 basis as co-maintainer or backup maintainer
 (see <ref id="collaborative-maint">).
 
+      <sect1 id="nmu-vs-qa">NMU vs QA uploads
+       <p>
+Unless you know the maintainer is still active, it is wise to check the
+package to see if it has been orphaned.  The current list of orphaned
+packages which haven't had their maintainer set correctly is available at
+<url id="&url-debian-qa-orphaned;">.  If you perform an NMU on an
+improperly orphaned package, please set the maintainer to ``Debian QA Group
+&lt;packages@qa.debian.org&gt;''.
+
+      <sect1 id="nmu-who">Who can do an NMU
+       <p>
+Only official, registered Debian maintainers can do binary or source
+NMUs.  An official maintainer is someone who has their key in the
+Debian key ring.  Non-developers, however, are encouraged to download
+the source package and start hacking on it to fix problems; however,
+rather than doing an NMU, they should just submit worthwhile patches
+to the Bug Tracking System.  Maintainers almost always appreciate
+quality patches and bug reports.
+
+      <sect1 id="nmu-terms">Terminology
+       <p>
+There are two new terms used throughout this section: ``binary-only NMU''
+and ``source NMU''.  These terms are used with specific technical
+meaning throughout this document.  Both binary-only and source NMUs are
+similar, since they involve an upload of a package by a developer who
+is not the official maintainer of that package.  That is why it's a
+<em>non-maintainer</em> upload.
+       <p>
+A source NMU is an upload of a package by a developer who is not the
+official maintainer, for the purposes of fixing a bug in the package.
+Source NMUs always involves changes to the source (even if it is just
+a change to <file>debian/changelog</file>).  This can be either a
+change to the upstream source, or a change to the Debian bits of the
+source.  Note, however, that source NMUs may also include
+architecture-dependent packages, as well as an updated Debian diff.
+       <p>
+A binary-only NMU is a recompilation and upload of a binary package
+for a given architecture.  As such, it is usually part of a porting
+effort.  A binary-only NMU is a non-maintainer uploaded binary version
+of a package, with no source changes required.  There are many cases
+where porters must fix problems in the source in order to get them to
+compile for their target architecture; that would be considered a
+source NMU rather than a binary-only NMU.  As you can see, we don't
+distinguish in terminology between porter NMUs and non-porter NMUs.
+       <p>
+Both classes of NMUs, source and binary-only, can be lumped by the
+term ``NMU''.  However, this often leads to confusion, since most
+people think ``source NMU'' when they think ``NMU''.  So it's best to
+be careful. Best use always ``binary NMU'' or ``binNMU'' for binary-only
+NMUs.
+
 
     <sect id="collaborative-maint">
         <heading>Collaborative maintenance</heading>
@@ -3147,6 +3127,269 @@ Collaborative maintenance can often be further eased with the use of
 tools on Alioth (see <ref id="alioth">).
       </sect>
 
+    <sect id="testing">
+        <heading>The testing distribution</heading>
+       <p>
+       <sect1 id="testing-basics">
+       <heading>Basics</heading>
+       <p>
+Packages are usually installed into the `testing' distribution after they
+have undergone some degree of testing in unstable.
+       <p>
+They must be in sync on all architectures and
+mustn't have dependencies that make them uninstallable; they also have to
+have generally no known release-critical bugs at the time they're
+installed into testing.
+This way, `testing' should always be close to being a release candidate.
+Please see below for details.
+       <sect1 id="testing-unstable">
+       <heading>Updates from unstable</heading>
+       <p>
+The scripts that update the <em>testing</em> distribution are run each
+day after the installation of the updated packages. They generate the
+<file>Packages</file> files for the <em>testing</em> distribution, but
+they do so in an intelligent manner trying to avoid any inconsistency
+and trying to use only non-buggy packages.
+       <p>
+The inclusion of a package from <em>unstable</em> is conditional on
+the following:
+<list>
+    <item>
+The package must have been available in <em>unstable</em> for 2, 5 or 10
+days, depending on the urgency (high, medium or low).
+Please note that the urgency is sticky, means that the highest
+urgency uploaded since the last testing transition is taken into account.
+Those delays may be doubled during a freeze, or testing transition may be
+switched off at all;
+    <item>
+It must have less release-critical bugs than the version available
+in <em>testing</em>;
+    <item>
+It must be available on all architectures on which it has been
+previously built in unstable. <ref id="madison"> may be of interest to
+check that information;
+    <item>
+It must not break any dependency of a package that is already available
+in <em>testing</em>;
+    <item>
+The packages on which it depends must either be available in <em>testing</em>
+or they must be accepted into <em>testing</em> at the same time (and they will
+if they respect all the necessary criteria);
+</list>
+       <p>
+To find out whether a package is progressing into testing or not, see the
+testing script output on the <url name="web page of the testing distribution"
+id="&url-testing-maint;">, or use the program <prgn>grep-excuses</prgn>
+which is in the <package>devscripts</package> package. This utility can
+easily be used in a <manref name="crontab" section="5"> to keep one
+informed of the progression of their packages into <em>testing</em>.
+       <p>
+The <file>update_excuses</file> file does not always give the precise reason
+why the package is refused, one may have to find it on their own by looking
+for what would break with the inclusion of the package. The
+<url id="&url-testing-maint;" name="testing web page"> gives some more
+information about the usual problems which may be causing such troubles.
+       <p>
+Sometimes, some packages never enter <em>testing</em> because the set of
+inter-relationship is too complicated and cannot be sorted out
+by the scripts. See below for details.
+       <p>
+Some further dependency analysis is shown on
+<url id="http://bjorn.haxx.se/debian/"> - but be warned, they show also
+the build dependencies that are not considered by britney.
+
+       <sect2 id="outdated">
+       <heading>out-of-date</heading>
+       <p>
+For the testing migration script, "outdated" means: There are different
+versions in unstable for the release architectures (except for the
+architectures in fuckedarches; fuckedarches is an list of architectures
+that don't keep up (in update_out.py), but currently, it's empty).
+"outdated" has nothing whatsoever to do with the architectures this package
+has in testing.
+       <p>
+Consider this example:
+       <p>
+       <example>
+foo      | alpha | arm 
+---------+-------+----
+testing  |   1   |  -
+unstable |   1   |  2
+</example>
+       <p>
+The package is out of date on alpha in unstable, and will not go to
+testing. And removing foo from testing would not help at all, the package
+is still out of date on alpha, and will not propagate to testing.
+       <p>
+However, if ftp-master removes a package in unstable (here on arm):
+       <p>
+       <example>
+foo      | alpha | arm | hurd-i386
+---------+-------+-----+----------
+testing  |   1   |  1  |    -
+unstable |   2   |  -  |    1
+       </example>
+       <p>
+In this case, the package is up to date on all release architectures in
+unstable (and the extra hurd-i386 doesn't matter, as it's not a release
+architecture).
+       <p>
+Sometimes, the question is raised if it is possible to allow packages in
+that are not yet built on all architectures: No. Just plainly no. (Except
+if you maintain glibc or so.)
+
+       <sect2 id="removals">
+       <heading>Removals from testing</heading>
+       <p>
+Sometimes, a package is removed to allow another package in: This happens
+only to allow _another_ package to go in, that's ready in every other
+sense. Consider e.g. that a conflicts with the new version of b; than a may
+be removed to allow b in.
+       <p>
+Of course, there is another reason to remove a package from testing: It's
+just too buggy (and having a single RC-bug is enough to be in this state).
+
+       <sect2 id="circular">
+       <heading>circular dependencies</heading>
+       <p>
+A situation that is not handled very well by britney is if package a
+depends on the new version of package b, and vice versa.
+       <p>
+An example of this is:
+       <p>
+       <example>
+  | testing         |  unstable
+--+-----------------+------------
+a | 1; depends: b=1 |  2; depends: b=2
+b | 1; depends: a=1 |  2; depends: a=2
+       </example>
+       <p>
+Package a is not considered for update, and package b also not.
+       <p>
+Currently, this requires some manual hinting from the release team.
+Please, contact them by sending mail to &email-debian-release; if that
+happens to one of your packages.
+
+
+       <sect2>
+       <heading>influence of package in testing</heading>
+       <p>
+Generally, there is nothing that the status of a package in testing means
+for transition of the next version from unstable to testing, with two
+exceptions: If the RC-bugginess of the package goes down, it may go in
+even if it is still RC-buggy. The second exception is if the version
+of the package in testing is out of sync on the different arches: Then
+any arch might just upgrade to the version of the source package;
+however, this can happen only if the package was previously forced
+through, the arch is in fuckedarches or there was no binary package of that
+arch present in unstable at all during the testing migration.
+       <p>
+In summary this means: The only influence that a package being in testing
+has on a new version of the same package is that the new version might
+go in easier.
+
+       <sect2 id="details">
+       <heading>details</heading>
+       <p>
+If you are interested in details, this is how britney works:
+       <p>
+The packages are looked at to determine whether they are valid
+candidates. This gives the "update excuses". The most common reasons
+why a package is not considered are too young, RC-bugginess and out of
+date on some arches. For this part, the release managers have hammers
+of any size to force britney to consider a package. (Also, the base
+freeze is coded in that part of britney.) (There is a similar thing
+for binary-only updates, but this is not described here. If you're
+interessted in that, please use the code.)
+       <p>
+Now, the more complex part happens: Britney tries to update testing with
+the valid candidates; first, each package alone, and then larger and even
+larger sets of packages together. Each try is accepted if sarge is not
+more uninstallable after the update as before. (Before and after this part,
+some hints are processed; but as only release masters can hint, this is
+probably not so important for you.)
+       <p>
+If you want to see more details, you can look it up on
+merkel:/org/ftp.debian.org/testing/update_out/ (or there in
+~aba/testing/update_out to see a setup with a smaller packages file). Via
+web, it's at <url
+id="http://ftp-master.debian.org/testing/update_out_code/">
+       <p>
+The hints are available via <url
+id="http://ftp-master.debian.org/testing/hints/">.
+
+
+       <sect1 id="t-p-u">
+          <heading>Direct updates to testing</heading>
+         <p>
+The testing distribution is fed with packages from unstable according to the rules
+explained above. However, in some cases, it is necessary to upload
+packages built only for testing. For that, you may want to
+upload to <em>testing-proposed-updates</em>.
+         <p>
+Keep in mind that packages uploaded there are not automatically processed, they
+have to go through the hands of the release manager. So you'd better have a good
+reason to upload there. In order to know what a good reason is in the
+release manager's eyes, you should read the instructions that he regularly
+gives on &email-debian-devel-announce;.
+         <p>
+You should not upload to <em>testing-proposed-updates</em> when you can update your
+packages through <em>unstable</em>. If you can't (for example because you have a
+newer development version in unstable), you may use it but it is recommended to ask
+the authorization of the release manager before. Even if a package is
+frozen, updates through unstable are possible, if the upload via unstable
+does not pulls an new dependency in.
+         <p>
+Version numbers are usually selected by adding the codename of the testing
+distribution and a incrementing number, like 1.2sarge1 for the first upload
+through testing-proposed-updates of the package version 1.2.
+       <p>
+Please make sure you didn't miss any of these items at your upload:
+<list>
+<item> Make sure that your package really needs to go through
+<em>testing-proposed-uploads</em>, and can't go through unstable;
+<item> Make sure that you included only the minimal amount of changes;
+<item> Make sure that you included an appropriate explaination in the
+changelog;
+<item> Make sure that you've written <em>testing</em> or
+<em>testing-proposed-updates</em> into your target distribution;
+<item> Make sure that you've build and tested your package in
+<em>testing</em>, not in <em>unstable</em>;
+<item> Make sure that your version number is higher than the version in
+<em>testing</em> and <em>testing-proposed-updates</em>, and lower than in
+<em>unstable</em>;
+<item> After uploading and successful build on all platforms, contact the
+release team at &email-debian-release; and ask them to approve your upload.
+</list>
+
+
+       <sect1 id="faq">
+        <heading>Frequently asked questions</heading>
+         <p>
+
+       <sect2 id="rc">
+       <heading>What are release-critical bugs, and how do they get counted?</heading>
+         <p>
+All bugs of some higher severities are by default considered release-critical; currently, these are critical, grave and serious bugs.
+         <p>
+Such bugs are presumed to have an impact on the chances that the package will be released with the stable release of Debian: in general, if a package has open release-critical bugs filed on it, it won't get into "testing", and consequently won't be released in "stable".
+         <p>
+The "testing" bug count for a package is considered to be roughly the bug count at the last point when the "testing" version equalled the "unstable" version. The bugs tagged woody or sarge will not be counted. Bugs with the sid tag will be counted, though.
+
+
+       <sect2>
+       <heading>How could installing a package into "testing" possibly break other packages?</heading>
+         <p>
+The structure of the distribution archives is such that they can only contain one version of a package; a package is defined by its name. So, when the source package acmefoo is installed into "testing", along with its binary packages acme-foo-bin, acme-bar-bin, libacme-foo1 and libacme-foo-dev, the old version is removed.
+         <p>
+However, the old version may have provided a binary package with an old soname of a library, such as libacme-foo0. Removing the old acmefoo will remove libacme-foo0, which will break any packages which depend on it.
+         <p>
+Evidently, this mainly affects packages which provide changing sets of binary packages in different versions (in turn, mainly libraries). However, it will also affect packages upon which versioned dependencies have been declared of the ==, <= or << varieties.
+         <p>
+When the set of binary packages provided by a source package change in this way, all the packages that depended on the old binaries will have to be updated to depend on the new binaries instead. Because installing such a source package into "testing" breaks all the packages that depended on it in "testing", some care now has to be taken: all the depending packages must be updated and ready to be installed themselves so that they won't be broken, and, once everything is ready, manual intervention by the release manager or an assistant is normally required.
+         <p>
+If you are having problems with complicated groups of packages like this, contact debian-devel or debian-release for help.
+      </sect>
 
   <chapt id="best-pkging-practices">
     <heading>Best Packaging Practices</heading>
@@ -3927,17 +4170,17 @@ LOCPATH=$LOCALE_PATH LC_ALL=$LOCALE_NAME.$LOCALE_CHARSET date
           <heading>Make transition packages deborphan compliant</heading>
           <p>
 Deborphan is a program helping users to detect which packages can be safely
-removed from the system, ie the ones that have no packages depending on
+removed from the system, i.e. the ones that have no packages depending on
 them. The default operation is to search only within the libs and oldlibs
 sections, to hunt down unused libraries. But when passed the right argument,
 it tries to catch other useless packages. 
           <p>
-For example, with --guess-dummy, tries to search all transitionnal packages
+For example, with --guess-dummy, tries to search all transitional packages
 which were needed for upgrade but which can now safely be removed. For that,
 it looks for the string "dummy" or "transitional" in their short
 description.
           <p>
-So, when you are creating ssuch a package, please make sure to add this text
+So, when you are creating such a package, please make sure to add this text
 to your short description. If you are looking for example, just run: 
   <example>apt-cache search .|grep dummy</example> or
   <example>apt-cache search .|grep transitional</example>.