chiark / gitweb /
the synopsis formula changed to either
[developers-reference.git] / developers-reference.sgml
index fbf711d4c209ae9445b4bdfa37082b02d8eeef6e..3369c851e8762ee63fea7a7d0054362a346a320d 100644 (file)
@@ -6,7 +6,7 @@
   <!entity % commondata  SYSTEM "common.ent" > %commondata;
 
   <!-- CVS revision of this document -->
-  <!entity cvs-rev "$Revision: 1.183 $">
+  <!entity cvs-rev "$Revision: 1.192 $">
   <!-- if you are translating this document, please notate the CVS
        revision of the developers reference here -->
   <!--
   <book>
       <title>Debian Developer's Reference
 
-      <author>Adam Di Carlo, current maintainer <email>aph@debian.org</email>
-      <author>Raphaël Hertzog, co-maintainer <email>hertzog@debian.org</email>
-      <author>Christian Schwarz <email>schwarz@debian.org</email>
-      <author>Ian Jackson <email>ijackson@gnu.ai.mit.edu</email>
+      <author>Developer's Reference Team &email-devel-ref;
+      <author>Adam Di Carlo, editor
+      <author>Raphaël Hertzog
+      <author>Christian Schwarz
+      <author>Ian Jackson
       <version>ver. &version;, &date-en;
 
       <copyright>
@@ -335,8 +336,8 @@ know that you're unavailable.
 In order to inform the other developers, there's two things that you should do.
 First send a mail to &email-debian-private; with "[VAC] " prepended to the
 subject of your message<footnote>This is so that the message can be easily
-filtered by people who don't want to read vacation notices.</footnote>,
-giving the period of time when you will be on vacation. You can also give
+filtered by people who don't want to read vacation notices.</footnote>
+and state the period of time when you will be on vacation. You can also give
 some special instructions on what to do if a problem occurs.
        <p>
 The other thing to do is to mark yourself as "on vacation" in the
@@ -3089,102 +3090,125 @@ this using an hand-crafted <file>debian/rules</file> file.
         </sect1>
       </sect>
 
-    <sect id="bpp-debian-maint-scripts">
-        <heading>Best practices for maintainer scripts</heading>
-        <p>
-Maintainer scripts include the files <file>debian/postinst</file>,
-<file>debian/preinst</file>, <file>debian/prerm</file> and
-<file>debian/postrm</file>.  These scripts take care of any package
-installation or deinstallation setup which isn't handled merely by the
-creation or removal of files and directories.  The following
-instructions supplement the <url id="&url-debian-policy;" name="Debian
-Policy">.
-        <p>
-Maintainer scripts must be idempotent.  That means that you need to
-make sure nothing bad will happen if the script is called twice where
-it would usually be called once.
-        <p>
-Standard input and output may be redirected (e.g. into pipes) for
-logging purposes, so don't rely on them being a tty.
-        <p>
-All prompting or interactive configuration should be kept to a
-minimum.  When it is necessary, you should use the
-<package>debconf</package> package for the interface.  Remember that
-prompting in any case can only be in the <tt>configure</tt> stage of
-the <file>postinst</file> script.
-        <p>
-Keep the maintainer scripts as simple as possible.  We suggest you use
-pure POSIX shell scripts.  Remember, if you do need any bash features,
-the maintainer script must have a bash sh-bang line.  POSIX shell or
-Bash are preferred to Perl, since they enable
-<package>debhelper</package> to easily add bits to the scripts.
+
+      <sect id="bpp-debian-control">
+       <heading>Best practices for <file>debian/control</file></heading>
         <p>
-If you change your maintainer scripts, be sure to test package
-removal, double installation, and purging.  Be sure that a purged
-package is completely gone, that is, it must remove any files created,
-directly or indirectly, in any maintainer script.
+The following practices are relevant to the
+<file>debian/control</file> file.  They supplement the <url
+id="&url-debian-policy;ch-miscellaneous.html#s-descriptions"
+name="Policy on package descriptions">.
         <p>
-If you need to check for the existence of a command, you should use
-something like
-<example>if [ -x /usr/sbin/install-docs ]; then ...</example>
+The description of the package, as defined by the corresponding field
+in the <file>control</file> file, contains both the package synopsis
+and the long description for the package.  <ref id="bpp-desc-basics">
+describes common guidelines for both parts of the package description.
+Following that, <ref id="bpp-pkg-synopsis"> provides guidelines
+specific to the synopsis, and <ref id="bpp-pkg-desc"> contains
+guidelines specific to the description.
+
+       <sect1 id="bpp-desc-basics">
+          <heading>General guidelines for package descriptions</heading>
+          <p>
+The package description should be written for the average likely user,
+the average person who will use and benefit from the package.  For
+instance, development packages are for developers, and can be
+technical in their language.  More general-purpose applications, such
+as editors, should be written for a less technical user.
+          <p>
+Our review of package descriptions lead us to conclude that most
+package descriptions are technical, that is, are not written to make
+sense for non-technical users.  Unless your package really is only for
+technical users, this is a problem.
+          <p>
+How do you write for non-technical users?  Avoid jargon.  Avoid
+referring to other applications or frameworks that the user might not
+be familiar with &mdash; "GNOME" or "KDE" is fine, since users are
+probably familiar with these terms, but "GTK+" is
+probably not.  Try not to assume any knowledge at all.  If you must
+use technical terms, introduce them.
+           <p>
+Be objective.  Package descriptions are not the place for advocating
+your package, no matter how much you love it.  Remember that the
+reader may not care about the same things you care about.
+          <p>
+References to the names of any other software packages, protocol names,
+standards, or specifications should use their canonical forms, if one
+exists.  For example, use "X Window System", "X11", or "X"; not "X
+Windows", "X-Windows", or "X Window". Use "GTK+", not "GTK" or "gtk".
+Use "GNOME", not "Gnome".  Use "PostScript", not "Postscript" or
+"postscript".
+          <p>
+If you are having problems writing your description, you may wish to
+send it along to &email-debian-l10n-english; and request feedback.
+        </sect1>
 
-If you don't wish to hard-code the path of the command in your
-maintainer script, the following POSIX-compliant shell function may
-help:
 
-&example-pathfind;
+       <sect1 id="bpp-pkg-synopsis">
+          <heading>The package synopsis, or short description</heading>
+           <p>
+The synopsis line (the short description) should be concise.  It
+must not repeat the package's name (this is policy).
+           <p>
+It's a good idea to think of the synopsis as an appositive clause, not
+a full sentence.  An appositive clause is defined in WordNet as a
+grammatical relation between a word and a noun phrase that follows,
+e.g., "Rudolph the red-nosed reindeer".  The appositive clause here is
+"red-nosed reindeer".  Since the synopsis is a clause, rather than a
+full sentence, we recommend that it neither start with a capital nor
+end with a full stop (period).  It should also not begin with an
+article, either definite ("the") or indefinite ("a" or "an").
+           <p>
+It might help to imagine that the synopsis is combined with the
+package name in the following way:
 
-You can use this function to search <tt>$PATH</tt> for a command name,
-passed as an argument.  It returns true (zero) if the command was
-found, and false if not.  This is really the most portable way, since
-<tt>command -v</tt>, <prgn>type</prgn>, and <prgn>which</prgn> are not
-POSIX.
-       <p>
-While <prgn>which</prgn> is an acceptable alternative, since
-it is from the required <package>debianutils</package> package, it's
-not on the root partition. That is, it's in <file>/usr/bin</file> rather
-than <file>/bin</file>, so one can't use it in scripts which are run
-before the <file>/usr</file> partition is mounted. Most scripts won't have
-this problem, though.
+<example><var>package-name</var> is a <var>synopsis</var>.</example>
 
+Alternatively, it might make sense to think of it as
 
-    <sect id="bpp-debian-control">
-       <heading>Best practices for <file>debian/control</file></heading>
-        <p>
-The following practices supplement the <url
-            id="&url-debian-policy;ch-miscellaneous.html#s-descriptions"
-            name="Policy on package descriptions">.</p>
+<example><var>package-name</var> is <var>synopsis</var>.</example>
+
+or, if the package name itself is a plural (such as
+"developers-tools")
+
+<example><var>package-name</var> are <var>synopsis</var>.</example>
+
+This way of forming a sentance from the package name and synopsis
+should be considered as a heuristic and not a strict rule.  There are
+some cases where it doesn't make sense to try to form a sentance.
+        </sect1>
 
        <sect1 id="bpp-pkg-desc">
-           <heading>Writing useful descriptions</heading>
+          <heading>The long description</heading>
            <p>
-The description of the package (as defined by the corresponding field
-in the <file>control</file> file) is the primary information available
-to the user about a package before they install it.  It should provide
-all the required information to let the user decide whether to install
-the package.
+The long description is the primary information available to the user
+about a package before they install it.  It should provide all the
+information needed to let the user decide whether to install the
+package.  Assume that the user has already read the package synopsis.
            <p>
-The following practices supplement the <url name="Policy on the descriptions
-of packages" id="&url-debian-policy;ch-miscellaneous.html#s-descriptions">.
+The long description should consist of full and complete sentences.
            <p>
-The synopsis line (the short description) should primarily be concise.
-You may capitalize the first letter for aesthetics. It is customary to
-make the synopsis an appositive clause (not a full sentence) in which
-case there's no need to put a full stop (period) at the end.
+The first paragraph of the long description should answer the
+following questions: what does the package do?  what task does it help
+the user accomplish?  It is important to describe this in a
+non-technical way, unless of course the audience for the package is
+necessarily technical.
            <p>
-The long description should, however, always consist of full sentences.
+The following paragraphs should answer the following questions: Why do
+I as a user need this package?  What other features does the package
+have?  What outstanding features and deficiencies are there compared
+to other packages (e.g., "if you need X, use Y instead")?  Is this
+package related to other packages in some way that is not handled by
+the package manager (e.g., "this is the client to the foo server")?
            <p>
-Since the first user impression is based on the description, be
-careful to avoid spelling and grammar mistakes. Ensure that you
+Be careful to avoid spelling and grammar mistakes. Ensure that you
 spell-check it.  <prgn>ispell</prgn> has a special <tt>-g</tt> option
 for <file>debian/control</file> files:
 
 <example>ispell -d american -g debian/control</example>
-
-If you want someone to proofread the description that you
-intend to use you may ask on &email-debian-l10n-english;.
         </sect1>
 
+
         <sect1 id="bpp-upstream-info">
           <heading>Upstream home page</heading>
           <p>
@@ -3201,7 +3225,7 @@ correctly.  To see an example of how this displays, see <url
 id="&url-eg-desc-upstream-info;">.
           <p>
 If there is no home page for the software, this should naturally be
-left empty.
+left out.
           <p>
 Note that we expect this field will eventually be replaced by a proper
 <file>debian/control</file> field understood by <prgn>dpkg</prgn> and
@@ -3283,16 +3307,10 @@ for instance, in a changelog entry like this:
 <example>
   * Maintainer upload, closes: #42345, #44484, #42444.
 </example>
-This will close the NMU bugs in "fixed" state when the package makes
-it into the archive (and also the bug for the fact that an NMU was
-done).  It is also perfectly acceptable to close NMU-fixed bugs by
-other means; see <ref id="bug-answering">.
-       <p>
-Changelogs shouldn't include general statements on life, the universe
-and everything ("sorry this upload took me so long, but I caught the
-flu").  Exceptions can be made if the comment is funny ;-) Obviously,
-this is subjective, so it's likely best if it's kept out of technical
-documentation such as changelogs.
+This will close the NMU bugs tagged "fixed" when the package makes
+it into the archive. The bug for the fact that an NMU was done can be
+closed the same way. Of course, it's also perfectly acceptable to
+close NMU-fixed bugs by other means; see <ref id="bug-answering">.
         </sect1>
 
        <sect1 id="bpp-changelog-errors">
@@ -3360,12 +3378,72 @@ start by inserting the title of each different bug.
        <p>
        &FIXME; presentation of cvs-buildpackage, updating sources
        via CVS (debian/rules refresh).
+       <url id="http://www.debian.org/devel/cvs_packages">
 -->
 
 
+      <sect id="bpp-debian-maint-scripts">
+        <heading>Best practices for maintainer scripts</heading>
+        <p>
+Maintainer scripts include the files <file>debian/postinst</file>,
+<file>debian/preinst</file>, <file>debian/prerm</file> and
+<file>debian/postrm</file>.  These scripts take care of any package
+installation or deinstallation setup which isn't handled merely by the
+creation or removal of files and directories.  The following
+instructions supplement the <url id="&url-debian-policy;" name="Debian
+Policy">.
+        <p>
+Maintainer scripts must be idempotent.  That means that you need to
+make sure nothing bad will happen if the script is called twice where
+it would usually be called once.
+        <p>
+Standard input and output may be redirected (e.g. into pipes) for
+logging purposes, so don't rely on them being a tty.
+        <p>
+All prompting or interactive configuration should be kept to a
+minimum.  When it is necessary, you should use the
+<package>debconf</package> package for the interface.  Remember that
+prompting in any case can only be in the <tt>configure</tt> stage of
+the <file>postinst</file> script.
+        <p>
+Keep the maintainer scripts as simple as possible.  We suggest you use
+pure POSIX shell scripts.  Remember, if you do need any bash features,
+the maintainer script must have a bash sh-bang line.  POSIX shell or
+Bash are preferred to Perl, since they enable
+<package>debhelper</package> to easily add bits to the scripts.
+        <p>
+If you change your maintainer scripts, be sure to test package
+removal, double installation, and purging.  Be sure that a purged
+package is completely gone, that is, it must remove any files created,
+directly or indirectly, in any maintainer script.
+        <p>
+If you need to check for the existence of a command, you should use
+something like
+<example>if [ -x /usr/sbin/install-docs ]; then ...</example>
+
+If you don't wish to hard-code the path of the command in your
+maintainer script, the following POSIX-compliant shell function may
+help:
+
+&example-pathfind;
+
+You can use this function to search <tt>$PATH</tt> for a command name,
+passed as an argument.  It returns true (zero) if the command was
+found, and false if not.  This is really the most portable way, since
+<tt>command -v</tt>, <prgn>type</prgn>, and <prgn>which</prgn> are not
+POSIX.
+       <p>
+While <prgn>which</prgn> is an acceptable alternative, since
+it is from the required <package>debianutils</package> package, it's
+not on the root partition. That is, it's in <file>/usr/bin</file> rather
+than <file>/bin</file>, so one can't use it in scripts which are run
+before the <file>/usr</file> partition is mounted. Most scripts won't have
+this problem, though.
+      </sect>
+
+
       <sect id="bpp-config-mgmt">
        <heading>Configuration management with <package>debconf</package></heading>
-       
        <p>
 <package>Debconf</package> is a configuration management system which
 can be used by all the various packaging scripts
@@ -3553,18 +3631,20 @@ Lisp packages should register themselves with
           <heading>Architecture-independent data</heading>
           <p>
 It is not uncommon to have a large amount of architecture-independent
-data packaged with a program. For example, collection of icons,
-wallpapers or other graphic files, or audio files. If the size of
-this data is negligible compared to the size of the remainder of the
-package, you can keep it all in the same package.
+data packaged with a program.  For example, audio files, a collection
+of icons, wallpaper patterns, or other graphic files.  If the size of
+this data is negligible compared to the size of the rest of the
+package, it's probably best to keep it all in a single package.
           <p>
 However, if the size of the data is considerable, consider splitting
-it out into a separate, architecture-independent package
-("_all.deb"). By doing this, you avoid needless duplication of the
-same data into eleven or more .debs per each architecture. While
-this adds some extra overhead into the Packages files, it can save a
-lot of disk space on Debian mirrors, and it also reduces processing
-time of Lintian or Linda when run over the entire Debian archive.
+it out into a separate, architecture-independent package ("_all.deb").
+By doing this, you avoid needless duplication of the same data into
+eleven or more .debs, one per each architecture.  While this
+adds some extra overhead into the <file>Packages</file> files, it
+saves a lot of disk space on Debian mirrors.  Separating out
+architecture-independent data also reduces processing time of
+<prgn>lintian</prgn> or <prgn>linda</prgn> (see <ref id="tools-lint">)
+when run over the entire Debian archive.
         </sect1>
       </sect>
 
@@ -4315,6 +4395,8 @@ it.</p>
 <!-- FIXME: add the following
 
 questionable:
+  dbs (referred to above)
+  dpatch (referred to above)
   ucf
   dpkg-awk
   grep-dctrl