From: Alejandro Colomar <alx@kernel.org>
To: Joseph Myers <josmyers@redhat.com>
Cc: "G. Branden Robinson" <g.branden.robinson@gmail.com>,
Sam James <sam@gentoo.org>,
linux-man@vger.kernel.org, Keith Bostic <keith@bostic.com>,
Mark Harris <mark.hsj@gmail.com>,
Nevin Liber <nevin@cplusplusguy.com>,
JeanHeyd Meneide <phdofthehouse@gmail.com>,
Christopher Bazley <chris.bazley.wg14@gmail.com>,
"Serge E. Hallyn" <serge@hallyn.com>,
Iker Pedrosa <ipedrosa@redhat.com>,
"Evgeny Grin (Karlson2k)" <k2k@drgrin.dev>,
Kees Cook <keescook@chromium.org>,
bug-gnulib@gnu.org, libc-alpha@sourceware.org,
Douglas McIlroy <douglas.mcilroy@dartmouth.edu>
Subject: Re: on the irresponsibility of pursuing C language reform
Date: Mon, 3 Aug 2026 16:22:34 +0200 [thread overview]
Message-ID: <anCdgqR5omQWuVwU@devuan> (raw)
In-Reply-To: <82eff373-3460-3cff-4ed5-0a04b4fe4fad@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 6836 bytes --]
Hi Joseph,
> Date: 2026-08-03 13:42:31+0000
> From: Joseph Myers <josmyers@redhat.com>
>
> On Sun, 2 Aug 2026, Alejandro Colomar wrote:
>
> > Joseph was concerned that this documentation would conflict with many
> > documents saying that <memory.h> is deprecated. Luckily, I've never
> > seen such a document, so we can assume they don't exist (unless people
> > show evidence). I'll dismiss his negative vote, since his technical
> > reasons are incorrect. Also, <memory.h> is undoubtedly more portable
> > than a new <stdmem.h>.
>
> The glibc manual nowhere mentions <memory.h>. That's pretty clear
> evidence the header is a relic of the days when glibc just took any
> interface some 1980s Unix had rather than trying to have a cleaner API of
> more current relevance.
I don't refute that. But relics are sometimes useful and reusable.
> My main concern, in any case, is that man-pages should describe the world
> as it is, not as you'd like it to be; they should follow, not lead, on any
> proposed changes;
This has never been true. I believe Michael did a great job maintaining
them, and that included promoting some APIs over others, even when that
goes against the standards. See below.
> they should promote portable coding practices and using
> existing standard interfaces in the absence of broad consensus (not just
> your opinion; not just an opinion based on dismissing all the views
> against) of a clear technical deficiency in those interfaces; that anyone
> advocating for an interface change should avoid using man-pages as part of
> that advocacy,
I'm not using the manual pages as part of advocating for an interface
change. I'm advocating for an interface change as a consequence of the
research work I've done to improve the manual pages.
> only eventually updating it after the debate has concluded
> once there is consensus on what the conclusion of the debate was but
> ensuring the man-pages don't take any one side of the debate before then.
Would you mind expressing your feedback about the fact that str[n]cpy(3)
documented the non-standard strlcpy(3), and suggested that it'd be used
instead? This is way before POSIX.1-2024 standardized it. In fact,
POSIX.1-2008 had explicitly rejected these functions.
commit bb96fc35a3b664ef3959eaefb095608846f89df7
Author: Michael Kerrisk <mtk.manpages@gmail.com>
Date: 2012-07-19 11:29:15 +0200
strcpy.3: NOTES: Add a discussion of strlcpy()
Inspired by https://lwn.net/Articles/506530/
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
which introduced this text:
$ MANWIDTH=64 diffman-git bb96fc35a3b664ef3959eaefb095608846f89df7
--- bb96fc35a3b664ef3959eaefb095608846f89df7^:man3/strcpy.3
+++ bb96fc35a3b664ef3959eaefb095608846f89df7:man3/strcpy.3
@@ -54,6 +54,14 @@ NOTES
to test!) that the size of dest is greater than the
length of src, then strcpy() can be used.
+ One valid (and intended) use of strncpy() is to copy a C
+ string to a fixed‐length buffer while ensuring both that
+ the buffer is not overflowed and that unused bytes in the
+ target buffer are zeroed out (perhaps to prevent informa‐
+ tion leaks if the buffer is to written to media or trans‐
+ mitted to another process via an interprocess communica‐
+ tion technique).
+
If there is no terminating null byte in the first n bytes
of src, strncpy() produces an unterminated string in dest.
Programmers often prevent this mistake by forcing termina‐
@@ -67,6 +75,27 @@ NOTES
formation contained in src is lost in the copying to
dest.)
+ Some systems (the BSDs, Solaris, and others) provide the
+ following function:
+
+ size_t strlcpy(char *dest, const char *src, size_t
+ size);
+
+ This function is similar to strncpy(), but it copies at
+ most size-1 bytes to dest, always adds a terminating null
+ byte, and does not pad the target with (further) null
+ bytes. This function fixes some of the problems of str‐
+ cpy() and strncpy(), but the caller must still handle the
+ possibility of data loss if size is too small. The return
+ value of the function is the length of src, which allows
+ truncation to be easily detected: if the return value is
+ greater than or equal to size, truncation occurred. If
+ loss of data matters, the caller must either check the ar‐
+ guments before the call, or test the function return
+ value. strlcpy() is not present in glibc and is not stan‐
+ dardized by POSIX, but is available on Linux via the
+ libbsd library.
+
BUGS
If the destination string of a strcpy() is not large
enough, then anything might happen. Overflowing fixed‐
@@ -82,4 +111,4 @@ SEE ALSO
bcopy(3), memccpy(3), memcpy(3), memmove(3), stpcpy(3),
stpncpy(3), strdup(3), string(3), wcscpy(3), wcsncpy(3)
-GNU 2012‐07‐18 STRCPY(3)
+GNU 2012‐07‐19 STRCPY(3)
That commit was itself based on the LWN article it metions in the commit
message, and it contained a number of comments
<https://lwn.net/Articles/507319/#Comments> that cautioned that
strlcpy/cat(3) might not be the best interface, and I'd say there wasn't
consensus either back then. There will never be consensus on this
topic, I believe.
Yet, some things have to be done. Mistakes may be made when doing this,
and they should be eventually addressed. But manual pages should not be
a copy of the standards.
If we go back further in time, man-pages-1.0 --the very first release,
in 1993-- already documented that gets(3) should never be used. This
was certainly to the contrary of the existing standards, and indeed was
leading the removal that came later. That page was written by
Thomas Koenig. I don't think Thomas was wrong doing that.
Past times often feel better, but that's nostalgia, and often not based
on facts.
> I suggest we need to figure out how to generate man pages from the glibc
> manual so that people who prefer documentation in that format can have
> documentation of glibc interfaces that's maintained by a proper consensual
> process rather than following one person's opinion.
The Linux manual pages are not strictly the glibc manual. They also
document musl, for example. Also, I believe it's good that it's
independent of glibc and GNU. That puts a degree of criticism that is
necessary for avoiding endogamy. Let's say it's a separation of powers.
Have a lovely day!
Alex
--
<https://www.alejandro-colomar.es>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2026-08-03 14:22 UTC|newest]
Thread overview: 134+ 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 [this message]
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-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=anCdgqR5omQWuVwU@devuan \
--to=alx@kernel.org \
--cc=bug-gnulib@gnu.org \
--cc=chris.bazley.wg14@gmail.com \
--cc=douglas.mcilroy@dartmouth.edu \
--cc=g.branden.robinson@gmail.com \
--cc=ipedrosa@redhat.com \
--cc=josmyers@redhat.com \
--cc=k2k@drgrin.dev \
--cc=keescook@chromium.org \
--cc=keith@bostic.com \
--cc=libc-alpha@sourceware.org \
--cc=linux-man@vger.kernel.org \
--cc=mark.hsj@gmail.com \
--cc=nevin@cplusplusguy.com \
--cc=phdofthehouse@gmail.com \
--cc=sam@gentoo.org \
--cc=serge@hallyn.com \
/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