On Tue, Nov 28, 2017 at 9:21 AM, Nemo <cym224@gmail.com> wrote:
On 19 October 2017 at 10:52, Ron Natalie <ron@ronnatalie.com> wrote:
> My favorite reduction to absurdity was /bin/true.   Someone decided we
> needed shell commands for true and false.   Easy enough to add a script that
> said "exit 0" or exit 1" as its only line.
> Then someone realized that the "exit 0" in /bin true was superfluous, the
> default return was 0.  /bin/true turned into an empty, yet executable, file.
>
> Then the lawyers got involved.    We got a version of a packaged UNIX (I
> think it was Interactive Systems).    Every shell script got twelve lines of
> copyright/license boilerplate.     Including /bin true.
> The file had nothing but useless comment in it.

A late comment:  I seem to recall this boilerplate in earlier Solaris
but Solaris 10 has an executable.  So I looked at the OpenSolaris
source out of curiosity and found this.

[CDDL stuff here]
/*
 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#pragma ident   "%Z%%M% %I%     %E% SMI"

#include <unistd.h>

/*
 * Exit with a zero value as quickly as possible.
 */

int
main(void)
{
        _exit(0);
        /*NOTREACHED*/
        return (0);
}

Ah, the tyranny of  static analysis tools... _exit(0) should be marked such that the tools know it does not return. This means the /*NOTREACHED*/ isn't needed. And since there's no real exit path out of  main, the return (0) is equally bogus (because main can't return). Yet lint and other tools have ushered in this insanity.

I'm glad to see these days that these sorts of lame false positives have been eliminated...

Then again _exit(0) is a useless optimization. It saves three closes for files that are bound to be closed at image tear down. If it really is that important (absent data, my gut tells me it isn't), then this should be written in assembler. FreeBSD/amd64 would be something like:

#include <sys/syscall.h>
#include <machine/asm.h>

ENTRY(_start)
xor %r10, %r10
mov $SYS_exit, %eax
syscall
END(_start)

This some small hacks to each arch's SYS.h in libc, this could even be smaller and MI :). this is tiny:
-rwxrwxr-x  1 imp  imp  672 Nov 28 10:18 true
  text   data   bss   dec   hex   filename
    10      0     0    10   0xa   true

Contrast that with FreeBSD's /usr/bin/true:
-r-xr-xr-x  1 root  wheel  4624 Nov 20 11:56 /usr/bin/true
  text   data   bss    dec     hex   filename
  1540    481     8   2029   0x7ed   /usr/bin/true

which is little more than return(0), but also has a fair amount of copyright and SCCS data.

Warner