<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "https://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<link rel=stylesheet type="text/css" href="style.css" title="style">
    <title>
        Maintaining Linux man-pages
    </title>
</head>

<body>

<!--BEGIN-LINKS-->
<form method="get" action="https://www.google.com/search">
<table border=0 cellpadding=0 cellspacing=0 width="100%">
<tr>
<td align="left">
<font size="-1">

Linux <em>man-pages</em>: &nbsp;
<a href="./index.html">home</a>
&nbsp; || &nbsp;
<a href="https://git.kernel.org/pub/scm/docs/man-pages/">git</a>
| <a href="https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/README">readme</a>
| <a href="https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING">contributing</a>
| <a href="https://www.alejandro-colomar.es/share/dist/man-pages/git/HEAD/man-pages-HEAD.pdf#man-pages.7">conventions</a>
&nbsp; | &nbsp;
<a href="https://subspace.kernel.org/vger.kernel.org.html">mailing list</a>
| <a href="https://lore.kernel.org/linux-man/">archives</a>
&nbsp; | &nbsp;
<a href="https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/">releases</a>
| <a href="https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/book/">book</a>
| <a href="https://man7.org/linux/man-pages/index.html">online pages</a>
</td>
<td align="right">
<input type="text" name="q" size=10 maxlength=255 value="">
<input type="hidden" name="sitesearch" value="man7.org/linux/man-pages">
<input type="submit" name="sa" value="Search online pages">
</td>
</tr>
</table>
</form>
<!--END-LINKS-->

<h1>
Maintaining Linux <em>man-pages</em>
</h1>

    <p>
        The current <em>man-pages</em> maintainer is (since 2004)
        <a href="https://man7.org/mtk/">Michael Kerrisk</a>
        (<span class="email">mtk.manpages@gmail.com</span>;
        <a href="https://blog.man7.org/">blog</a>);
        starting in 2020,
        <a href="http://www.alejandro-colomar.es/">Alejandro Colomar</a>
        (<span class="email">alx.manpages@gmail.com</span>)
        has joined as comaintainer.
    </p>
    <p>
        This page provides
        some tips on how to maintain the Linux <em>man-pages</em> project
        (also useful for anyone who wants to help with work
        on <em>man-pages</em>).
    </p>

<h2>Read some man pages</h2>

    <p>
        Read at least the following:
    </p>

    <ul>
        <li>
            <span class="man-page">
            <a href="https://man7.org/linux/man-pages/man7/man-pages.7.html">man-pages(7)</a>
            </span>
        </li>
        <li>
            <span class="man-page">
            <a href="https://man7.org/linux/man-pages/man7/man.7.html">man(7)</a>
            </span>
        </li>
        <li>
            <span class="man-page">
            <a href="https://man7.org/linux/man-pages/man7/standards.7.html">standards(7)</a>
            </span>
        </li>
        <li>
            <span class="man-page">
            <a href="https://man7.org/linux/man-pages/man7/feature_test_macros.7.html">feature_test_macros(7)</a>
            </span>
        </li>
        <li>
            <span class="man-page">
            <a href="https://man7.org/linux/man-pages/man7/groff.7.html">groff(7)</a>
            </span>
        </li>
        <li>
            <span class="man-page">
            <a href="https://man7.org/linux/man-pages/man7/groff_man.7.html">groff_man(7)</a>
            </span>
        </li>
        <li>
            <span class="man-page">
            <a href="https://man7.org/linux/man-pages/man7/groff_man_style.7.html">groff_man_style(7)</a>
            </span>
        </li>
        <li>
            <span class="man-page">
            <a href="https://man7.org/linux/man-pages/man7/groff_char.7.html">groff_char(7)</a>
            </span>
        </li>
    </ul>

    <p>
        All of these pages are relevant for maintaining <em>man-pages</em>.
        Some of them are part of packages other than <em>man-pages</em>.
    </p>



<h2>Get the source code</h2>
    <p>
        History matters.
        The <em>man-pages</em> project documents not just the current
        state of the Linux kernel and glibc APIs,
        but also how they have changed over time.
    </p>

    <blockquote>
        Once upon a time, <em>man-pages</em> also used to document
        Linux libc details (libc4, libc5),
        but Linux libc started disappearing in the late 1990s
       	(see
        <a href="https://en.wikipedia.org/wiki/GNU_C_Library#Linux_libc">here</a>
        and
        <a href="https://web.archive.org/web/20040411191201/http://people.redhat.com/~sopwith/old/glibc-vs-libc5.html">here</a>
        for some details),
        and there is no longer any need to keep documenting its peculiarities.
    </blockquote>



<h3>Kernel source code</h3>
    <p>
        You can find nearly every kernel release ever made at
        <a href="https://www.kernel.org/">https://www.kernel.org/</a>.
    </p>
    <p>
            You can get a copy of Linus' Git tree (i.e., the current development tree)
            using this command:
            <!-- https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/ -->
            <pre class="shell">$ <strong>git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git</strong></pre>
            Thereafter, just update the copy using <span class="func">git pull</span>.
    </p>

    <p>
        For browsing the kernel source code, the

        <a href="https://elixir.bootlin.com/linux/latest/source">Elixir Cross Referencer</a>
        can be useful.
        (Online browsable versions of various free kernels can be found at
        <a href="http://fxr.watson.org/">http://fxr.watson.org/</a>.)
    </p>


<h3>Glibc source code</h3>

    <p>
        A lot of glibc tarballs can be found at
        <a href="https://ftp.gnu.org/gnu/glibc/">https://ftp.gnu.org/gnu/glibc/</a>.
        Many older tarballs can be found at
        <a href="https://www.win.tue.nl/~aeb/ftpdocs/linux-local/libc.archive/">https://www.win.tue.nl/~aeb/ftpdocs/linux-local/libc.archive/</a>.
        A copy of the latest glibc development tree can be obtained via git:
    </p>
    <pre class="shell">git clone git://sourceware.org/git/glibc.git </pre>


<h3>Other source code</h3>

    <p>
       Sometimes it can be useful to grep through random source code
       to see what uses a certain API and how.
       For example, one could unpack all of the source code of a distribution
       and then grep that code.
       Download locations for source code: <a href="https://download.fedoraproject.org/pub/fedora/linux/releases/">Fedora</a>;
       <a href="https://download.opensuse.org/source/">OpenSUSE</a>.
    </p>

<h2>Keeping up</h2>
    <p>
        One of the biggest challenges is keeping up to date with changes in
        the kernel and glibc.
        There are a few ways to do this.
	This section lists some of the most useful ways.
    </p>


<h3>Websites</h3>

    <p>
        These websites are useful because they in part include attempts
        by others to summarize changes to the Linux kernel.
    </p>

    <ul>
        <li>
            <a href="https://lwn.net/">https://lwn.net/</a>.
            The weekly kernel page is especially useful, since it summarizes
            a lot of current and planned changes to the kernel.
	    There is also a
	    <a href="https://lwn.net/Kernel/Patches">kernel patch page</a>
	    where the LWN.net editors attempt to filter some
	    of the more noteworthy patches.
            <br>
            <br>
        </li>

        <li>
            <a href="https://wiki.kernelnewbies.org/LinuxChanges">https://wiki.kernelnewbies.org/LinuxChanges</a>.
            Summarizes major internal and interface changes for each
            kernel release (starting sometime in the 2.6.x series).
            <br>
            <br>
        </li>
    </ul>

<h3>Linux API mailing list</h3>

    <p>
        The <a href="linux-api-ml.html">linux-api mailing list</a>
        (<span class="email">linux-api@vger.kernel.org</span>)
        discusses
        changes that affect the Linux programming interface</a>
        (API or ABI).
        In theory, all patches that change the interface should be CCed to this list.
        To subscribe, send a message containing the
        following <em>body</em> to
        <span class="email">majordomo@vger.kernel.org</span>:
    </p>

    <pre>    subscribe linux-api </pre>

    <p>
        An archive of this list can be found on
        <a href="https://lore.kernel.org/linux-api/">lore.kernel.org</a>.
    </p>


<h2>Keeping up&mdash;some other possibilities</h2>

<p>
   Below are some other ways of trying to discover changes in the
   kernel and glibc. There's way too much information here to track
   (in particular, it's pretty much impossible to track all of
   of the mailing lists), but the list below serves as a reminder of
   some places where useful information could be found.
</p>

<h3>Looking ahead: <em>linux-next</em></h3>

<p>
    The <a href="https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git"><em>linux-next</em> tree</a>
    is the holding area for patches aimed at the next kernel merge window.
    It can be useful to track what's going on there,
    in order to get some idea of upcoming changes to the kernel.
    (<a href="linux-next.html">Some notes on working with <em>linux-next</em></a>.)
</p>

<h3>Git</h3>

    <p>
        If you are looking for a specific kernel commit,
        or a commit log message containing a particular string, then searching
        <a href="https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git"> Linus' Git tree</a>
        can be useful.
    </p>


<h3>Mailing lists</h3>

    <p>
        <strong>Linux Kernel (LKML)</strong>
    </p>

    <p>
        This list
        (<span class="email">linux-kernel@vger.kernel.org</span>)
        contains patches,
        bug reports, and general discussions about the kernel.
        To subscribe, send a message containing the
        following <em>body</em> to
        <span class="email">majordomo@vger.kernel.org</span>:
    </p>

    <pre>    subscribe linux-kernel </pre>

    <p>
        The problem with this list is that the volume is extremely high,
        so keeping close track of it all would require a lot of time.
    </p>

    <p>
        <a href="http://vger.kernel.org/vger-lists.html#linux-kernel">vger.kernel.org/</a>
        provides the locations of a few searchable
        archives of this mailing list, and of course there is an archive at
	<a href="https://lore.kernel.org/lkml/">lore.kernel.org</a>.

    </p>

    <p>
        <strong>Linux Kernel Announce</strong>
    </p>
    <p>
        This low-volume list
        (<span class="email">linux-kernel-announce@vger.kernel.org</span>)
        announces releases of new versions of various kernel branches,
        including release candidates for the mainline kernel and
        new <em>-mm</em> kernels.
        To subscribe, send a message containing the following <em>body</em> to
        <span class="email">majordomo@vger.kernel.org</span>:
    </p>

    <pre>    subscribe linux-kernel-announce </pre>

    <p>
        <strong>netdev</strong>
    </p>
    <p>
        The netdev list
        (<span class="email">netdev@vger.kernel.org</span>)
        is the list used by the developers of the Linux networking subsystem.
    </p>

    <p>
        To subscribe, send a message containing the following <em>body</em> to
        <span class="email">majordomo@vger.kernel.org</span>:
    </p>

    <pre>    subscribe netdev </pre>

    <p>
        Archives of this list can be found on
        <a href="https://lore.kernel.org/netdev/">lore</a>
        and
        <a href="https://marc.info/?l=linux-netdev">marc</a>.
    </p>

<!--
The linux-net@vger.kernel.org mailing list is for networking
user questions. Subscribe by sending
subscribe linux-net in the message body to majordomo@vger.kernel.org
-->

    <p>
        <strong>Linux Test Project (LTP)</strong>
    </p>

    <p>
        The
        <a href="https://linux-test-project.github.io/">LTP</a>
        produces test suites for the Linux kernel.
        Subscribe to the discussion list
        <a href="https://lists.linux.it/listinfo/ltp">here</a>.
        There are list archives
        <a href="https://lists.linux.it/pipermail/ltp/">here</a>.
    </p>
    <p>
        <strong>Kernel Newbies</strong>
    </p>
    <p>
        This list
	(<span class="email">kernelnewbies@kernelnewbies.org</span>)
       	be useful for asking questions on aspects of the kernel source that
        you don't understand.
    </p>

    <p>
        To subscribe, send a message containing the following <em>body</em> to
        <span class="email">listar@nl.linux.org</span>:
    </p>

    <pre>    subscribe kernelnewbies </pre>

    <p>
        Archives of this list can be found on
        <a href="https://lore.kernel.org/kernelnewbies/">lore</a>
        and
        <a href="https://marc.info/?l=kernelnewbies">marc</a>.
        See the
        <a href="https://kernelnewbies.org/">kernelnewbies website</a>
        for more information.
    </p>

    <p>
        <strong>libc-announce</strong>
    </p>
    <p>
        This list
	(<span class="email">libc-announce@sourceware.org</span>)
	announces each <em>glibc</em> release.
        Subscribe by sending an email to
        <span class="email">libc-announce-subscribe@sourceware.org</span>
        or visiting <a href="https://sourceware.org/glibc">this page</a>.
        There is a list archive
        <a href="https://sourceware.org/pipermail/libc-announce/">here</a>.
    </p>

    <p>
        <strong>libc-alpha</strong>
    </p>
    <p>
        This list
	(<span class="email">libc-alpha@sourceware.org</span>)
        is the development list for glibc.
        Subscribe by sending an email to
        <span class="email">libc-alpha-subscribe@sourceware.org</span>
        or visiting <a href="https://sourceware.org/glibc">this page</a>.
        There is a list archive
        <a href="https://sources.redhat.com/ml/libc-alpha/">here</a>.
    </p>

    <p>
        <strong>libc-help</strong>
    </p>
    <p>
        This list
	(<span class="email">libc-help@sourceware.org</span>)
	is for asking general questions and getting help on
        <em>glibc</em>.
        Subscribe by sending an email to
        <span class="email">libc-help-subscribe@sourceware.org</span>
        or visiting <a href="https://sourceware.org/glibc">this page</a>.
        There is a list archive
        <a href="https://sourceware.org/pipermail/libc-help/">here</a>.
    </p>


<!--
<h3>Kernel releases</h3>

    <p>
        When a new kernel release is made, scan the
        patch and ChangeLog, to see what important changes there have been.
        This is quite a big job, and pretty much impossible to do thoroughly,
        unless doing <em>man-pages</em> is your full time job,
        but a bit of scripting
        can help (e.g., to discard device driver stuff and
        architecture-specific stuff other than for (say) x86 and ARM).
    </p>
-->

<h3>Glibc releases</h3>

<!--
    <p>
        Just as for the kernel, when a new glibc release comes out,
        scan the Changelog and the differences in the source code tree.
        Reading the <span class="email">NEWS</span>
        file in the glibc root directory also provides
        information about important changes in a glibc release.
    </p>
-->
    <p>
        The following is useful to get a rough idea of what symbols
        are new or changed in various glibc releases -- execute it
        at the root of a glibc tree:
    </p>
    <strong>
    <pre class="shell">
    cat  $(find . -name 'Versions' |
    egrep -v '/(s390|alpha|sparc|hurd|sh4|bsd|ia64|powerpc|x86_64)') |
	    sed -n '/GLIBC/,/}/p' | sed 's/#.*//'| tr ';' '\012' |
	    sed 's/^ *//' | sed 's/ *$//' | sed '/^$/d' |
	    grep -v '^_' |
	    awk '{ if ($1 ~ "^GLIBC_2.*") {
	             tag = $1
	           } else if ($1 ~ "^[a-z].*") {
	             printf "%-32s %s\n", $1, tag
	         }
	    }' |
	    sort -u
    </pre>
    </strong>


<h3>Kernel bugzilla</h3>

    <p>
        The kernel.org bugzilla can be used to
        <a href="https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING">report</a> <em>man-pages</em> bugs.
        The list of unresolved bugs in the bugzilla can be seen
        <a href="https://bugzilla.kernel.org/buglist.cgi?query_format=advanced&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailassigned_to1=1&emailtype1=substring&email1=documentation_man-pages@kernel-bugs.osdl.org">here</a>.
    </p>
    <p>
        Also useful:
	<a href="https://korg.wiki.kernel.org/userdoc/bugzilla">How to use
	bugzilla.kernel.org</a>.
    </p>

<h3>Distribution-specific bug tracking systems</h3>

<h4>Debian</h4>

    <p>
        <a href="https://www.debian.org/">Debian</a>
        makes it easy for upstream maintainers to subscribe to bug
        reports for man pages.
        To do this, visit
        <a href="https://packages.qa.debian.org/">https://packages.qa.debian.org/</a>
        and look for the Debian source packages
        <em>manpages</em>.
    </p>

    <p>
        A current list of
        <a href="https://www.debian.org/">Debian</a>
        bug reports for <em>man-pages</em> can be viewed
        <a href="https://bugs.debian.org/cgi-bin/pkgreport.cgi?src=manpages">here</a>.
	The Debian <em>manpages</em> patch tracker is
	<a href="https://tracker.debian.org/pkg/manpages">here</a>.
    </p>

    <p>
        Debian even provides an email interface that allows an upstream
        maintainer to manipulate Debian bug reports (using the "tags"
        command; see
        <a href="https://www.debian.org/Bugs/server-control">https://www.debian.org/Bugs/server-control</a>).
    </p>

    <p>
            The Debian developer/upstream-centric view of manpages can be seen
            <a href="https://packages.qa.debian.org/manpages">here</a>.
    </p>

    <p>
        Every now and then it may be worth reviewing the Debian downstream
        diff patches applied to <em>man-pages</em>, to see if there's anything they
        should have pushed upstream, but didn't.
        Have a look at the diff patches that are available by
        following the "unstable" release links at
        <a href="https://packages.debian.org/manpages">https://packages.debian.org/manpages</a>
        and
        <a href="https://packages.debian.org/manpages-dev">https://packages.debian.org/manpages-dev</a>,
	and downloading the Debian tarballs.
        Or look at the web <a href="https://tracker.debian.org/pkg/manpages">patchtracker</a>.
    </p>
    <p>
        The following mail address reaches people with an interest in man pages at Debian:
        <span class="email">manpages@packages.debian.org</span>.
    </p>



<h4>Ubuntu</h4>

    <p>
        <a href="https://www.ubuntu.com/">Ubuntu</a> uses Launchpad for
        manpages (<a href="https://bugs.launchpad.net/ubuntu/+source/manpages">bugs</a>,
        <a href="https://launchpad.net/ubuntu/+source/manpages">package</a>)
        and manpages-posix
        (<a href="https://bugs.launchpad.net/ubuntu/+source/manpages-posix">bugs</a>,
        <a href="https://launchpad.net/ubuntu/+source/manpages-posix">package</a>).
        There are links on the "bugs" pages to allow subscribing to bug reports.
    </p>


<h4>Red Hat</h4>

    <p>
        <a href="https://www.redhat.com/">Red Hat</a>
        provides a
        <a href="https://bugzilla.redhat.com/bugzilla/buglist.cgi?component=man-pages&&order=bugs.bug_id"><em>man-pages</em> bugzilla component</a>.
    </p>
    <p>
        URL for Fedora package:
        <a href="https://koji.fedoraproject.org/koji/packageinfo?packageID=401">https://koji.fedoraproject.org/koji/packageinfo?packageID=401</a>.
        From there, you can reach the RPM files, and unpack them to see the
        diffs from upstream, using:
    </p>
    <pre class="shell">    rpm2cpio foo.rpm | cpio -idmv --no-absolute-filenames </pre>

    <p>
        Downstream Git repo for Red Hat patches:
    </p>

    <pre class="shell">    git clone https://src.fedoraproject.org/rpms/man-pages.git</pre>



<h4>Fedora</h4>

    <p>
            It is possible to subscribe to Fedora man-pages bug reports, as follows:
    </p>

    <ul>
        <li>
            Get a Fedora account at <a href="https://admin.fedoraproject.org/accounts">https://admin.fedoraproject.org/accounts</a>.
        </li>
        <li>
            Go to the <em>man-pages</em> package in
            <a href="https://admin.fedoraproject.org/pkgdb/acls/name/man-pages">the package database</a>,
            log in, and for each branch (Fedora NN to Fedora devel) click
            "Add myself to the package" and then check watchbugzilla checkbox.
            This has to be done only once,
            preferences for new Fedoras are inherited from Fedora devel branch.
            Once this is done, you will be in the CC list of
            every new bug created for <em>man-pages</em> in Fedora.
        </li>
        <li>
            A list of currently open Fedora <em>man-pages</em> bugs can be found
            <a href="https://bugzilla.redhat.com/buglist.cgi?list_id=1102610&query_format=advanced&bug_status=NEW&bug_status=ASSIGNED&component=man-pages&product=Fedora">here</a>.
        </li>
    </ul>



<h2>Testing new features</h2>

<h3>Test programs</h3>
    <p>
        Writing test programs (in C) is an essential part of writing man pages.
        It verifies the author's understanding of what is being
        documented and also finds bugs in the kernel and glibc.
        In some cases, example programs are also suitable for inclusion
        in the man pages themselves.
    </p>



<h3>Testing new kernel features</h3>

    <p>
        To follow the development curve closely, try building and testing
	release candidate ("rc") kernels; the release candidates are tagged in the
	<a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git">Git repository</a>.
        After building and installing the kernel, write programs to test new features.
        Since the declarations of new system calls probably
        won't yet be in your (g)libc, the use of
        <span class="func">syscall(2)</span>
        may be required; see the
        <span class="man-page">
        <a href="https://man7.org/linux/man-pages/man2/syscall.2.html">syscall(2)</a>
        </span>
        man page.
    </p>



<h3>Testing new glibc features</h3>

    <p>
        For information on building and testing glibc releases, see
	<em><a href="https://www.gnu.org/software/libc/manual/html_node/Installation.html">Appendix C Installing the GNU C Library</a></em>
	in the glibc manual,
	<em><a href="https://sourceware.org/glibc/wiki/FAQ">Frequently Asked Questions about the GNU C Library</a></em>
	on the glibc wiki,
	and especially Carlos O'Donell's
	<em><a href="https://sourceware.org/glibc/wiki/Testing/Builds">Testing a glibc build</a></em>
	page on the glibc wiki.
    </p>



<h2>All the world is not Linux</h2>

    <p>
        It is not enough to document what Linux does.
        Programmers writing portable applications need to know about places where
        Linux differs from other UNIX implementations, and about
        places where it doesn't adhere to standards.
    </p>


<h3>Test programs</h3>

    <p>
        If in doubt about portability, write a test program and run it
        on a few other systems.
        As a starting point, testing say Solaris,
        FreeBSD, and HP-UX is likely to reveal most of the range of
        differences that occur on other implementations.
        Bonus points for testing on other BSDs, on AIX, etc.
    </p>

<h3>Standards</h3>

    <p>
        Join the
        <a  href="https://www.opengroup.org/austin/">Austin group</a>.
        (Membership is free.)
    </p>

    <p>
        Get electronic copies of current and past UNIX standards, especially
        the POSIX.1-2008/SUSv4 standard, available in
        PDF format to members of the
        <a  href="https://www.opengroup.org/austin/">Austin group</a>,
        and
        <a href="https://www.unix.org/version3/online.html">browsable online</a>.
        Note also that section 3p
        of the man pages includes pages containing the
        specifications for all functions in POSIX.1 (e.g., try
        <span class="cmd">man 3p stat</span>).
    </p>

    <p>
        Other standards to look out for are SUSv1, SUSv2, and the SVID
        (System V Interface Definition), all of which are available in
        electronic form.
    </p>

    <p>
        And get the
        <a href="http://www.open-std.org/jtc1/sc22/wg14/www/standards">C programming language standards</a>.
    </p>
    <p>
        And have a look at the
        <a href="https://www.linux-foundation.org/en/LSB">LSB</a>.
    </p>



<h3>Read man pages for other systems</h3>

    <p>
	It can be useful to check the manual pages from other UNIX
	systems to see what differences there are from Linux.
	The FreeBSD project website displays manual pages for a
	range of UNIX implementations; look
	<a href="https://www.freebsd.org/cgi/man.cgi">here</a>.
    </p>



<h3>Glibc <em>info</em></h3>

    <p>
        Sometimes there is useful information to be found in the
        <a href="https://xkcd.com/912/"><span class="man-page">info(1)</span></a>
        documentation for a particular function
        (if the <em>info</em> documentation exists...).
        Always worth checking.
    </p>



<h3>Header files on other implementations</h3>

    <p>
        It can be handy to have a set of
        <span class="pathname">/usr/include</span>
        trees from various other implementations.
        Grepping all of these trees can give some clues about interfaces that
        are/aren't present on other UNIX implementations.
    </p>



<h3>Source code</h3>

    <p>
        The source code of some other UNIX implementations is available, and
        useful to study in order to determine undocumented details of
        behaviour on those systems.
    </p>

<!--
    <p>
        Instructions on how to get the source code of Open Solaris can be found
        <a href="https://dlc.sun.com/osol/on/downloads/hg-build-snapshots/">here</a>.
        You'll need to install Mercurial ("hg").
    </p>
-->
    <p>
        The FreeBSD source code is available via Git mirror at
        <a href="https://github.com/freebsd/freebsd">https://github.com/freebsd/freebsd</a>.
    </p>


<h2>Get set up on kernel.org infrastructure</h2>

    <p>
            Look <a href="https://linux-man-pages.blogspot.com/2012/02/reestablishing-kernelorg-access.html">here</a>.
    </p>

<h2>Making <em>man-pages</em> releases</h2>


<h3>Uploading files</h3>

    <p>
        Release tarballs are made available at
        <a href="https://www.kernel.org/pub/linux/docs/man-pages/">https://www.kernel.org/pub/linux/docs/man-pages/</a>.
        Files are uploaded using <em>kup</em>.
        Look <a href="https://linux-man-pages.blogspot.com/2012/02/reestablishing-kernelorg-access.html">here</a>.
    </p>


<h4>man-pages website</h4>

    <p>
        The <em>man-pages</em> website resides at
        <a href="https://www.kernel.org/doc/man-pages/">https://www.kernel.org/doc/man-pages/</a>.
    </p>
    <p>
        The Git repository for the website is at
	<a href="https://git.kernel.org/pub/scm/docs/man-pages/website.git/">https://git.kernel.org/pub/scm/docs/man-pages/website.git/</a>.
	Publication of new versions of the website are done by publishing
	an annotated tag and pushing to the repo.
    </p>
    <!--
        Files are uploaded using <em>kup</em>.
        Look <a href="https://linux-man-pages.blogspot.com/2012/02/reestablishing-kernelorg-access.html">here</a>.
    -->


<h3>Release notifications</h3>

    <ul>
        <li>
            <strong>Contributors, maintainers, translators:</strong>
            Send a release message that includes the change
            log to all of the contributors to this release.
            CC the message to
            <span class="email">linux-man@vger.kernel.org</span>,
	    <span class="email">libc-alpha@sourceware.org</span>,
            and to a small group of people
            (e.g., maintainers, translators) who like
            to get notification of *every* <em>man-pages</em> release.
            I (mtk) manually maintain a list of those people.
            <br>
            <br>
        </li>

        <li>
            <strong>LKML:</strong>
            send a release note to
            <span class="email">linux-kernel@vger.kernel.org</span>,
            noting those changes that are of
            special relevance to readers of LKML.
        </li>
    </ul>



<h2>Reporting kernel and glibc bugs</h2>
    <p>
        Testing kernel and glibc features while writing man pages will
        inevitably uncover bugs, which ideally should be reported.
    </p>

    <p>
        For the kernel, the most effective way to report bugs
        (e.g., in a new system call)
	is typically to send an email to the developers of the API
        with a CC to LKML
        (<span class="email">linux-kernel@vger.kernel.org</span>)
	or another relevant list.
	Alternatively, you can try making a bug report in the
        <a href="https://bugzilla.kernel.org/">kernel bugzilla</a>.
    </p>

    <p>
        For information about reporting glibc bugs (including errors
	in the glibc
        <span class="man-page">info(1)</span> documentation),
	see
        <a href="https://sourceware.org/glibc/wiki/FilingBugs">https://sourceware.org/glibc/wiki/FilingBugs</a>.
    </p>


<h2>Some history</h2>

    <p>
        The <em>man-pages</em> project was begun in 1993 by
        <a href="https://www.cs.unc.edu/~faith/">Rik Faith</a>, who created
        releases 1.0 through to 1.5 (February 1995).
    </p>

    <p>
        Rik Faith was succeeded by
        <a href="https://www.win.tue.nl/~aeb">Andries Brouwer</a>
        (<span class="email">aeb</span>),
        who continued in the role for more than nine years,
        creating releases 1.6 (June 1995) through to 1.70 (October 2004).
    </p>

    <p>
        The current maintainer, Michael Kerrisk
        (<span class="email">mtk</span>),
        took over
	in November 2004, starting with release 2.00.
    </p>

<!--BEGIN-STATCOUNTER-->
<!-- SITETRACKING.linux_man-pages -->
<!-- Start of StatCounter Code -->
<script type="text/javascript">
var sc_project=5618989;
var sc_invisible=1;
var sc_partition=60;
var sc_click_stat=1;
var sc_security="4f8507d7";
</script>

<script type="text/javascript"
src="https://www.statcounter.com/counter/counter.js"></script><noscript><div
class="statcounter"><a title="customisable counter"
href="https://www.statcounter.com/free_hit_counter.html"
target="_blank"><img class="statcounter"
src="https://c.statcounter.com/5618989/0/4f8507d7/1/" alt="customisable
counter" ></a></div></noscript>
<!-- End of StatCounter Code -->
<!--END-STATCOUNTER-->
</body>
</html>
