All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alejandro Colomar <alx@kernel.org>
To: "Arsen Arsenović" <arsen@aarsen.me>
Cc: Collin Funk <collin.funk1@gmail.com>, Sam James <sam@gentoo.org>,
	 "G. Branden Robinson" <g.branden.robinson@gmail.com>,
	"Maciej W. Rozycki" <macro@orcam.me.uk>,
	 Paul Eggert <eggert@cs.ucla.edu>,
	linux-man@vger.kernel.org, bug-gnulib@gnu.org,
	 libc-alpha@sourceware.org
Subject: Re: The goal of the Linux man-pages project
Date: Wed, 5 Aug 2026 16:15:07 +0200	[thread overview]
Message-ID: <anNBLjQj8-Eg1TUf@devuan> (raw)
In-Reply-To: <865x1ohq1s.fsf@aarsen.me>

[-- Attachment #1: Type: text/plain, Size: 6220 bytes --]

Hi Arsen,

> Date: 2026-08-05 11:31:11+0200
> From: Arsen Arsenović <arsen@aarsen.me>
>
> Hi Alex,
> 
> Alejandro Colomar <alx@kernel.org> writes:
> 
> >> >     man/man3/: Put first <string.h> in SYNOPSIS, then comment about <memory.h>
> >> >     
> >> >     This is a compromise between the fact that <string.h> is the standard
> >> >     header and (only slightly) most portable header file for these
> >> >     functions, while hinting at the fact that it might be more appropriate
> >> >     to use <memory.h> where possible.
> >> >     
> >> >     Remove the STANDARDS and NOTES about this, since now the SYNOPSIS
> >> >     contains all the necessary information.  The extra info is in
> >> >     memory.h(3head), which is linked to in the SYNOPSIS.
> >> >
> >> > What do you think?
> >> 
> >> Why, though?
> >
> > To help guide programmers to understand these APIs, and consequentially
> > be able to write better code.  That's the goal of this project.  It's
> > the Linux Programmer's Manual, and its purpose is that programmers on
> > a Linux system are able to write correct programs.
> 
> First of, this doesn't answer the question I asked.  Why should this
> change, even the "compromise", be done?
> 
> But, ignoring that this doesn't answer the question posed, how exactly
> is hinting that it's "more appropriate to use <memory.h> where possible"
> accomplishing the goals of the project you've stated there?
> 
> It seems to me to just sow confusion.
> 
> I think the references to <memory.h> should be confined to a single page
> that documents what it is, memory.h(3head) or whatever, which should be
> honest and say only:
> 
>   <memory.h> is an obsolete header.  It exists for compatibility with
>   older programs, and is implemented as an alias of <string.h>.
> 
> This makes it clear that the header is never useful, and that it's
> strictly redundant with <string.h>, in a way that still lets someone
> reading old code discover it.

You've convinced me to further reduce the change.  I've removed any
explicit suggestions in the functions' pages about including <memory.h>.
They're not necessary for the purpose they were meant for.  Here's how
memcpy(3) looks like now:

	SYNOPSIS
	     #include <string.h>  // see memory.h(3head)

	     void *memcpy(size_t n;
			  void dest[restrict n], const void src[restrict n],
			  size_t n);

The only reference is a comment to read the memory.h(3head) manual page,
as it contains historic details that are relevant about this header
file.  The fact that <string.h> is the only header file included, and
there no "or ...", clearly says that programmers should include
<string.h>.

We (or at least I) still want to clarify --already at the point where
<string.h> is used-- that <string.h> is the right header for this
function as a result of a historical mistake --which we can't solve at
this point in time, but it still is an (ossified) mistake--.

This should accomplish the fundamental objective of this change, which
is to clarify users that these functions are not strictly string APIs
(even if they might be used for strings, in some cases, and with great
 care).  The pure string APIs don't have this comment, as they naturally
belong in <string.h>.

The <memory.h> manual page is now the only place that documents an
'#include <memory.h>', for obvious reasons, and tells a detailed history
of why things happened as they happened.

	memory.h(3head)                                 memory.h(3head)

	NAME
	     memory.h - memory operations

	LIBRARY
	     Standard C library (libc, -lc)

	SYNOPSIS
	     #include <memory.h>

	DESCRIPTION
	   Write
	     bzero(3)
	     memset(3)

	   Copy
	     memmove(3)
	     memcpy(3)
	     mempcpy(3)
	     memccpy(3)
	     strncpy(3)

	   Catenate
	     strncat(3)

	   Duplicate
	     strndup(3)
	     strndupa(3)

	   Compare
	     memcmp(3)
	     strncmp(3)
	     strncasecmp(3)

	   Search
	     memchr(3)
	     memrchr(3)
	     memmem(3)

	VERSIONS
	     In  some systems (Illumos), <memory.h> contains only a few
	     of these functions, and thus <string.h> is needed.

	STANDARDS
	     BSD.

	     These functions are also provided in <string.h>, as speci‐
	     fied by ISO C.  This is a historic mistake maintained  for
	     compatibility  reasons.   Don’t  let  that fool you; these
	     functions don’t necessarily operate on strings.

	HISTORY
	     SVr1, 4.3BSD.

	     System V (1983) introduced an initial set  of  mem*  func‐
	     tions  in a <memory.h> header file.  4.3BSD (1986) adopted
	     them.

	     SVID Issue 1 (1985) standardized  this  header  file,  but
	     stated that the functions would be moved to <string.h>.

	     XPG  Issue  3  (1989)  listed <memory.h> as WITHDRAWN, and
	     stated that the functions had been moved to <string.h>.

	     C89 didn’t standardize this header file and instead speci‐
	     fied all these functions in <string.h>.

	     This merge of header files has historically confused  pro‐
	     grammers about the real purpose of these functions.

	     Most C libraries, including the BSDs, glibc, musl, Bionic,
	     and Illumos continue to provide <memory.h>.

	     gnulib  doesn’t  provide  it,  though,  and  instead  uses
	     <string.h>.

	SEE ALSO
	     string(3), string_copying(7)

	Linux man‐pages 6.18‐18... 2026‐08‐04           memory.h(3head)

I believe this text is quite objective.  It doesn't anywhere suggest
that users keep using it, as glibc maintainers have strongly pushed for.
It doesn't subjectively discourage its use either, though.  It just
gives a detailed clarification of how portable it is (which might indeed
discourage its use).

I believe the way this is documented will result in readers being more
aware of this history, which would help for example programmers find
existing uses of <memory.h> and wondering if they can remove them.

Does this sound reasonable to you?

I might be persuaded of further tweaks to this, FWIW.


Have a lovely day!
Alex

-- 
<https://www.alejandro-colomar.es>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2026-08-05 14:15 UTC|newest]

Thread overview: 145+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-31 21:18 [PATCH 0/2] alx-0097r1 - <memory.h>, the legitimate header for memcpy(3) et al Alejandro Colomar
2026-07-31 21:18 ` [PATCH 1/2] man/man3/{mem,strn}*(): SYNOPSIS, STANDARDS: Document these as provided by <memory.h> Alejandro Colomar
2026-07-31 21:23   ` Joseph Myers
2026-07-31 21:28     ` Alejandro Colomar
2026-07-31 21:54       ` Sam James
2026-07-31 22:18         ` Alejandro Colomar
2026-08-01  0:12           ` Alejandro Colomar
2026-08-01 14:43           ` Sam James
2026-07-31 21:51     ` on the irresponsibility of pursuing C language reform (was: [PATCH 1/2] man/man3/{mem,strn}*(): SYNOPSIS, STANDARDS: Document these as provided by <memory.h>) G. Branden Robinson
2026-07-31 21:59       ` on the irresponsibility of pursuing C language reform Sam James
2026-07-31 22:24         ` G. Branden Robinson
2026-07-31 23:19           ` Alejandro Colomar
2026-08-01 14:52           ` Sam James
2026-08-01 12:01         ` Alejandro Colomar
2026-08-01 12:04           ` Alejandro Colomar
2026-08-01 14:38           ` Sam James
2026-08-01 15:15             ` Alejandro Colomar
2026-08-01 16:10               ` Sam James
2026-08-01 17:09                 ` Alejandro Colomar
2026-08-01 21:34                   ` G. Branden Robinson
2026-08-01 22:22                     ` Alejandro Colomar
2026-08-01 22:26                       ` Alejandro Colomar
2026-08-03 13:42                       ` Joseph Myers
2026-08-03 14:22                         ` Alejandro Colomar
2026-08-03 14:38                         ` on glibc forking/reclaiming its man pages (was: on the irresponsibility of pursuing C language reform) G. Branden Robinson
2026-08-03 14:44                           ` Joseph Myers
2026-08-03 15:18                             ` G. Branden Robinson
     [not found]                   ` <CAETFuj2OwoyK9J85r2f0RoXbHbXKA4gQJ=JZ-7=QoqGcMwk0+Q@mail.gmail.com>
2026-08-01 22:44                     ` on the irresponsibility of pursuing C language reform Alejandro Colomar
2026-08-01 23:24                       ` Alejandro Colomar
2026-08-01 23:53                         ` proposed revision to memory.h(3head) (was: on the irresponsibility of pursuing C language reform) G. Branden Robinson
2026-08-02  0:27                           ` Alejandro Colomar
2026-08-02  1:03                             ` Alejandro Colomar
2026-08-03  0:47                             ` proposed revision to memory.h(3head) Alejandro Colomar
2026-08-03 17:58                               ` Mark Harris
2026-08-03 18:47                                 ` Alejandro Colomar
2026-08-03 20:14                                   ` Mark Harris
2026-08-03 23:36                                     ` Alejandro Colomar
2026-08-04  3:25                                       ` Mark Harris
2026-08-03 14:10                             ` proposed revision to memory.h(3head) (was: on the irresponsibility of pursuing C language reform) Joseph Myers
2026-08-03 14:31                               ` Alejandro Colomar
2026-08-02 12:52                         ` on the irresponsibility of pursuing C language reform Steve Summit
2026-08-02 13:17                           ` Alejandro Colomar
2026-08-02 13:45                             ` Steve Summit
2026-08-02 14:11                               ` Alejandro Colomar
2026-08-02 19:28                                 ` Paul Eggert
2026-08-02 20:31                                   ` Alejandro Colomar
2026-08-03  3:28                                     ` Paul Eggert
2026-08-03 11:39                                       ` Alejandro Colomar
2026-08-03 13:23               ` Joseph Myers
2026-08-01 20:18             ` G. Branden Robinson
2026-08-01 20:42               ` Alejandro Colomar
2026-08-01 20:45                 ` Alejandro Colomar
2026-08-01 20:52                 ` G. Branden Robinson
2026-08-01 21:12                   ` Alejandro Colomar
2026-07-31 22:10       ` on the irresponsibility of pursuing C language reform (was: [PATCH 1/2] man/man3/{mem,strn}*(): SYNOPSIS, STANDARDS: Document these as provided by <memory.h>) Joseph Myers
2026-07-31 22:21         ` Alejandro Colomar
2026-07-31 22:28           ` [PATCH 1/2] man/man3/{mem,strn}*(): SYNOPSIS, STANDARDS: Document these as provided by <memory.h> G. Branden Robinson
2026-07-31 22:42           ` on the irresponsibility of pursuing C language reform (was: [PATCH 1/2] man/man3/{mem,strn}*(): SYNOPSIS, STANDARDS: Document these as provided by <memory.h>) Joseph Myers
2026-07-31 22:52             ` Alejandro Colomar
2026-07-31 23:11               ` Joseph Myers
2026-07-31 23:32                 ` G. Branden Robinson
2026-08-01 12:39                   ` Alejandro Colomar
2026-08-01 14:26                   ` Christopher Bazley
2026-08-01 15:29                     ` Alejandro Colomar
2026-07-31 23:45                 ` on the irresponsibility of pursuing C language reform (was: " Alejandro Colomar
2026-08-01 12:39                   ` Douglas McIlroy
2026-08-01 19:54                     ` G. Branden Robinson
2026-08-01 20:35                       ` Alejandro Colomar
2026-07-31 23:08             ` [PATCH 1/2] man/man3/{mem,strn}*(): SYNOPSIS, STANDARDS: Document these as provided by <memory.h> G. Branden Robinson
2026-07-31 23:28               ` Joseph Myers
2026-07-31 23:57                 ` G. Branden Robinson
2026-08-01  0:06                   ` Alejandro Colomar
2026-07-31 22:05     ` Alejandro Colomar
2026-07-31 22:16       ` Joseph Myers
2026-07-31 22:33         ` Alejandro Colomar
2026-07-31 23:48     ` [PATCH 1/2] man/man3/{mem, strn}*(): " Collin Funk
2026-07-31 23:52       ` Alejandro Colomar
2026-08-01  0:01         ` Alejandro Colomar
2026-08-04  2:35         ` Thorsten Glaser
2026-07-31 21:19 ` [PATCH 2/2] man/man*/{string.3,memory.h.3head}: Move functions to a new page memory.h(3head) Alejandro Colomar
2026-07-31 21:20 ` [PATCH 0/2] alx-0097r1 - <memory.h>, the legitimate header for memcpy(3) et al Alejandro Colomar
2026-08-01  0:25 ` [PATCH v2] man/man3/mem*(): SYNOPSIS: Document non-standard mem*() functions as provided by <memory.h> Alejandro Colomar
2026-08-01 22:22   ` Bruno Haible
2026-08-01 22:38     ` Alejandro Colomar
2026-08-01 22:55       ` Bruno Haible
2026-08-01 23:10         ` Alejandro Colomar
2026-08-01 23:26           ` Collin Funk
2026-08-01 23:34             ` Alejandro Colomar
2026-08-01 23:29           ` Paul Eggert
2026-08-01 23:36             ` Alejandro Colomar
2026-08-02  0:08               ` the Linux man-pages as an educational tool (was: [PATCH v2] man/man3/mem*(): SYNOPSIS: Document non-standard mem*() functions as provided by <memory.h>) G. Branden Robinson
2026-08-02  0:45                 ` Alejandro Colomar
2026-08-02  1:04                   ` the Linux man-pages as an educational tool Collin Funk
2026-08-02  1:15                     ` G. Branden Robinson
2026-08-02  1:15                     ` Alejandro Colomar
2026-08-02  1:49                       ` Collin Funk
2026-08-02 11:29                         ` Alejandro Colomar
2026-08-02 11:47                           ` Alejandro Colomar
2026-08-02 12:04                       ` Alejandro Colomar
2026-08-02 21:23                       ` Maciej W. Rozycki
2026-08-02 21:34                         ` Alejandro Colomar
2026-08-02 23:08                           ` Arsen Arsenović
2026-08-02 23:10                             ` G. Branden Robinson
2026-08-02 23:27                               ` Collin Funk
2026-08-02 23:37                                 ` Alejandro Colomar
2026-08-02 23:41                                   ` Alejandro Colomar
2026-08-02 23:42                                     ` Alejandro Colomar
2026-08-03  1:12                                       ` Alejandro Colomar
2026-08-03  2:09                                       ` G. Branden Robinson
2026-08-03 12:21                                         ` Alejandro Colomar
2026-08-03 14:05                                           ` Sam James
2026-08-03 14:40                                             ` Alejandro Colomar
2026-08-03 15:34                                               ` G. Branden Robinson
2026-08-03 16:11                                                 ` Alejandro Colomar
2026-08-03 16:15                                               ` Sam James
2026-08-03 16:43                                                 ` Alejandro Colomar
2026-08-03 10:28                                   ` the Linux man-pages as an educational tool... and a bit about C Αγαθοκλής Χατζημανίκας
2026-08-03 14:03                                   ` the Linux man-pages as an educational tool Sam James
2026-08-03 14:28                                     ` Alejandro Colomar
2026-08-04  2:39                                     ` Collin Funk
2026-08-04 12:12                                       ` Alejandro Colomar
2026-08-04 15:49                                         ` Arsen Arsenović
2026-08-04 17:16                                           ` The goal of the Linux man-pages project Alejandro Colomar
2026-08-04 20:04                                             ` DJ Delorie
2026-08-04 23:07                                               ` Alejandro Colomar
2026-08-04 20:14                                             ` [GNULIB] " Αγαθοκλής Χατζημανίκας
2026-08-04 21:24                                               ` Αγαθοκλής Χατζημανίκας
2026-08-05  9:31                                             ` Arsen Arsenović
2026-08-05 14:15                                               ` Alejandro Colomar [this message]
2026-08-05 14:50                                                 ` DJ Delorie
2026-08-05 15:18                                                   ` Alejandro Colomar
2026-08-03 16:09                                   ` on project management (was: the Linux man-pages as an educational tool) G. Branden Robinson
2026-08-03 19:46                                     ` enh
2026-08-03 21:09                                       ` on project management Arsen Arsenović
2026-08-02 23:30                               ` the Linux man-pages as an educational tool Alejandro Colomar
2026-08-03 11:00                               ` Arsen Arsenović
2026-08-03 16:07                           ` Jeffrey Walton
2026-08-03 16:17                             ` Alejandro Colomar
2026-08-03 19:31                           ` Joseph Myers
2026-08-03 19:47                             ` Alejandro Colomar
2026-08-03 13:51                         ` When and why realloc(,0) was broken in glibc in 1999 Alejandro Colomar
2026-08-03 12:35                       ` the Linux man-pages as an educational tool Bruno Haible
2026-08-03 13:07                         ` Alejandro Colomar
2026-08-03 19:45                           ` Joseph Myers
2026-08-03 19:50                             ` Alejandro Colomar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=anNBLjQj8-Eg1TUf@devuan \
    --to=alx@kernel.org \
    --cc=arsen@aarsen.me \
    --cc=bug-gnulib@gnu.org \
    --cc=collin.funk1@gmail.com \
    --cc=eggert@cs.ucla.edu \
    --cc=g.branden.robinson@gmail.com \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-man@vger.kernel.org \
    --cc=macro@orcam.me.uk \
    --cc=sam@gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.