From: Philip McGrath <philip@philipmcgrath.com>
To: Liliana Marie Prikler <liliana.prikler@ist.tugraz.at>,
guix <guix-devel@gnu.org>
Cc: Maxime Devos <maximedevos@telenet.be>,
Liliana Marie Prikler <liliana.prikler@gmail.com>
Subject: Re: What 'sh' should 'system' use?
Date: Mon, 26 Sep 2022 04:07:57 -0400 [thread overview]
Message-ID: <a4e8fa9f-eb88-8d62-d0b5-08639f25cdb0@philipmcgrath.com> (raw)
In-Reply-To: <3147250c1695e9ff0885cec9b2ba847a31071bb1.camel@ist.tugraz.at>
Hi,
On 9/19/22 03:07, Liliana Marie Prikler wrote:
> Am Sonntag, dem 18.09.2022 um 20:13 -0400 schrieb Philip McGrath:
>> On the other hand, even Nix puts '/bin/sh' at its usual path: we
>> are really quite an outlier in this respect. (IIUC, Nix also has
>> '/usr/bin/env', but no other utilities at FHS paths.)
> We are not. We provide both /bin/sh and /usr/bin/env. If you're
> talking about the build container then that's a much smaller
> distinction.
>
Yes, I'm talking about the build container. But for the build container,
programs/libraries that use "/bin/sh" would work unmodified.
>> More broadly, I now think it would be better in we embedded zero
>> references to copies of Bash in libc.
> I don't think we can do that without breaking system.
>
When "/bin/sh" is not available at runtime, I think libc's `system`
ought to return 127, and other `system`-like functions should raise
exceptions or whatever the idiomatic way is to signal failure. Of
course, we will presumably need to make "/bin/sh" available in many more
places, but don't think it's surprising for programs that need to run
shell commands to fail in the absence of a shell.
>> However, giving every program using Glibc a hard dependency on
>> Bash—and on a particular Bash executable—seems like a much bigger
>> imposition.
> We're talking 1.7 MiB here. Certainly a "big" imposition, but
> nothing in comparison to the things you need in the store for
> bootstrapping purposes. Also note that bash-minimal, while only
> taking up 1.0 MiB for itself, requires both glibc and gcc:lib, which
> apart from creating a cycle does blow up its closure size quite a
> bit.
>
I'm less concerned with the literal size than with the significance of
putting a specific shell so near the root of most dependency graphs: I
tried to give examples in my reply to Maxime, like creating containers
without a shell.
>>> In versions of glibc before 2.1.3, [...] system() always returned
>>> 1 [...].
> Note that always returning non-zero is required by POSIX 2017.
>
To quote the whole paragraph from
<https://pubs.opengroup.org/onlinepubs/9699919799/functions/system.html>:
> Note that, system(NULL) is required to return non-zero, indicating
> that there is a command language interpreter. At first glance, this
> would seem to conflict with the ISO C standard which allows
> system(NULL) to return zero. There is no conflict, however. A system
> must have a command language interpreter, and is non-conforming if
> none is present. It is therefore permissible for the system()
> function on such a system to implement the behavior specified by the
> ISO C standard as long as it is understood that the implementation
> does not conform to POSIX.1-2017 if system(NULL) returns zero.
I understand that to mean that `system(NULL)` returning zero indicates
that the program is not (currently) running in a POSIX.1-2017
environment. Guix creates many environments that do not conform to
POSIX.1-2017: for example, any environment without `vi`.
-Philip
next prev parent reply other threads:[~2022-09-26 8:35 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-19 0:13 What 'sh' should 'system' use? Philip McGrath
2022-09-19 7:07 ` Liliana Marie Prikler
2022-09-26 8:07 ` Philip McGrath [this message]
2022-09-26 10:04 ` Liliana Marie Prikler
2022-09-19 12:55 ` Maxime Devos
2022-09-26 7:04 ` Philip McGrath
2022-09-26 9:41 ` Liliana Marie Prikler
2022-09-26 12:24 ` Maxime Devos
2022-10-01 16:54 ` Ludovic Courtès
2022-10-15 23:23 ` Philip McGrath
2022-10-16 7:04 ` Liliana Marie Prikler
2022-10-16 7:56 ` Philip McGrath
2022-10-16 8:23 ` Liliana Marie Prikler
2022-10-19 15:30 ` Ludovic Courtès
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
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a4e8fa9f-eb88-8d62-d0b5-08639f25cdb0@philipmcgrath.com \
--to=philip@philipmcgrath.com \
--cc=guix-devel@gnu.org \
--cc=liliana.prikler@gmail.com \
--cc=liliana.prikler@ist.tugraz.at \
--cc=maximedevos@telenet.be \
/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.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).