Linux Manual Pages development
 help / color / mirror / Atom feed
From: "Arsen Arsenović" <arsen@aarsen.me>
To: Alejandro Colomar <alx@kernel.org>
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, 05 Aug 2026 11:31:11 +0200	[thread overview]
Message-ID: <865x1ohq1s.fsf@aarsen.me> (raw)
In-Reply-To: <anIaZ8X_73ZjmYtR@devuan>

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

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.

The latter, of course, being much more widely used, and standardized.
The former being used only to placate pre-standard programs.

It seems to me that your intent was also to standardize memory.h.  In
this I also see no benefit.  string.h can't be split at this point, nor
can the real memory.h installed by libcs be shrunk by removing str* from
it.

I'll skip the rest of the philosophizing about the purpose of the
man-pages project, but I will add that if the Linux man-pages project
starts diverging from harmless standard practice to promote
idiosyncrasies, I'll have no choice but to caution against relying on
it.

>> I think that, in the thread, it was already demonstrated (by Bionic
>> having an empty memory.h for a time) that nobody includes <memory.h> on
>> its own and expects to see these functions.
>
> This is part of 'factual information', which is only a secondary goal
> of this documentation project, as stated above.
>
> The purpose of this change is to help form a mental model of how these
> memory and string functions relate to each other, and how they behave.

The mental model is certainly not helped by prominently featuring a
long-dead headers which may (or may not!  as seen above) contain
declarations from <string.h> (which is a header you consequently have to
include anyway).

>> (not that Bionic is that
>> widely-used; a better test would be checking something like Debian
>> codesearch)
>> 
>> As I've noted before, what header provides what declaration is also
>> largely inconsequential.
>
> If it is largely inconsequential, I expect this change shouldn't be as
> controversial as it seemed to be.

It is largely inconsequential how a declaration is obtained from the
perspective of a programmer for reasons I've stated before.

The act of *documenting* a long dead non-standard header as a header
that provides some function has a consequence, that consequence being
that now a long-dead non-standard header gets included far more
frequently.

This means that its only effect is a detriment.

I think it's a far better idea to start emitting a warning when it is
included, to indicate that it's an obsolete non-standard header.

>> So, the only effect of this can be to create new cases where <memory.h>
>> is included, for no gain.
>
> I don't agree with the 'for no gain' claim.  But yes, the first part of
> the sentence is certainly true.

There is no gain, the programmer can't tell where a declaration comes
from, and this include is strictly redundant with string.h even on all
the various Linux systems.

>> It doesn't really matter that memory.h is only slightly less portable,
>> IMO.  It is unused, to the point where Autoconf recommends not using it,
>> and no longer bothers checking whether 'mem*' functions are also present
>> in string.h.
>
> It doesn't really matter that it is unused.  What matters is that it can
> be used just fine, [...]

Can it?  I don't accept that premise.  It's a non-standard header.

> [...] and will help --IMO-- understand these functions better.

I don't accept that either: I see no way in which understanding benefits
from this change.

>> Is suddenly reviving a dead header to copy a few declarations of
>> functions well known to be part of string.h into it not just unneeded
>> churn?  Especially as program code would (nearly?) always need to do:
>> 
>>   #include <string.h>
>>   #ifdef HAVE_MEMORY_H
>>   # include <memory.h>
>>   #endif
>
> Are there any systems without <memory.h>?  We've been seeing in this
> thread that most systems have it.  Even Microsoft has it.  I bet most
> programs can live without that conditional.
>
> I'd say most programs would be portable enough with this:
>
> 	#include <string.h>
> 	#include <memory.h>

And even more of them can live with:

  #include <string.h>

That said, I imagine that many systems do have it.  After all, it is
quite cheap to run the following during an install step:

  echo '#include <string.h>' > $(DESTDIR)$(includedir)/memory.h

... but, I also would not fault a system for not having it.

We could check what systems have it and whether any do anything besides
including string.h.

Or we could just avoid prominently featuring a long-dead non-standard
header.
-- 
Arsen Arsenović

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

  parent reply	other threads:[~2026-08-05  9:31 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ć [this message]
2026-08-05 14:15                                               ` Alejandro Colomar
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=865x1ohq1s.fsf@aarsen.me \
    --to=arsen@aarsen.me \
    --cc=alx@kernel.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox