6 ms·
And some code is absolutely unnecessary. Look at the yes command. GNU version is optimized to death for no reason at all[1]. OpenBSD's version is as simple as
by rootnod3 2mo ago
And some code is absolutely unnecessary. Look at the yes command. GNU version is optimized to death for no reason at all[1].
OpenBSD's version is as simple as it gets[2].
[1]: https://github.com/coreutils/coreutils/blob/master/src/yes.c https://github.com/coreutils/coreutils/blob/master/src/yes.c
[2]: https://github.com/openbsd/src/blob/master/usr.bin/yes/yes.c https://github.com/openbsd/src/blob/master/usr.bin/yes/yes.c
- ptx 2mo agoJust as another point of comparison, FreeBSD's version seems somewhere in-between. It also enables a Capsicum sandbox before processing any data, akin to what the OpenBSD version does with pledge. [1] https://github.com/freebsd/freebsd-src/blob/main/usr.bin/yes/yes.c https://github.com/freebsd/freebsd-src/blob/main/usr.bin/yes...
- rootnod3 2mo agoDifference is that capsicum is after the fact and mostly about file descriptors. You need to open them in advance and _then_ call capsicum. But it does nothing about syscalls. Capsicum is really nice if you plan ahead, but pledge/unveil is easy to drop into any existing code base.
- ptx 2mo agoYour blog isn't loading at the moment, so I'm not entirely sure what you mean here, but... > capsicum is after the fact After the fact in what sense? The program enters capability mode before touching any arguments or doing I/O. You have to set things up before enter capability mode because you can't escape out of it afterwards. > it does nothing about syscalls It does quite a lot about syscalls, in that it blocks or limits most of them. As the man page says: "Access to system calls in capability mode is restricted: some system calls requiring global namespace access are unavailable, while others are constrained." In capability mode, you can use specific syscalls that operate on file descriptors, which limits the program to the specific capabilities it has been granted, e.g. pdkill(2) which is like kill(2) except you can only signal processes for which you have a process descriptor.
- rootnod3 2mo agoAnd yes, I went into that a while ago on my blog (https://blog.wollwage.com/2026/20260212-daily-source-reading-yes.html https://blog.wollwage.com/2026/20260212-daily-source-reading...)
- collinfunk 2mo agoThe others and I, working on GNU coreutils, frequently use 'yes' to generate a bunch of garbage input for testing programs. It is nice that it can do so quickly.