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 --]
next prev 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