[HN Gopher] Nolibc: A minimal C-library replacement shipped with...
___________________________________________________________________
Nolibc: A minimal C-library replacement shipped with the kernel
Author : todsacerdoti
Score : 57 points
Date : 2023-01-22 16:51 UTC (6 hours ago)
(HTM) web link (lwn.net)
(TXT) w3m dump (lwn.net)
| rwmj wrote:
| He briefly mentions dietlibc ("not evolving anymore") and ulibc.
| I think he'd be better off contributing to those projects (or
| musl). You might start off thinking you only need system calls,
| but at some point you'll want to print something, and even a
| basic 'printf' will be very handy.
|
| FWIW I have built a program that needs a tiny initramfs[1] and
| we've found that dietlibc and musl worked really well producing
| very tiny binaries. glibc is terrible - it links huge amounts of
| code into even the smallest program.
|
| [1]
| https://github.com/libguestfs/supermin/blob/86fd6f3e86ab99d5...
| synergy20 wrote:
| why dietlibc and uclibc instead of the modern musl?
| rwmj wrote:
| He doesn't mention musl in the article, but in my experience
| musl would also be an excellent choice.
| kitd wrote:
| I'm open to correction but I believe this is used in the
| Cosmopolitan library.
| eesmith wrote:
| Seems unlikely. My spot check of the the two vfprintf
| implementations shows no flow from one to the other, and shows
| that part of the Cosmopolitan code has an older lineage than
| nolibc.
|
| The nolibc source has many reference to copyright held by
| "Willy Tarreau", under LGPL-2.1 OR MIT license, with a
| copyright date starting in 2017.
|
| The string "Tarreau" does not exist in the Cosmopolitan
| library, so that's a strong negative there. Let's look closer.
|
| The file organization is quite different. And so is the
| implementation. So that's another negative.
|
| Compare the vfprintf in nolibc at
| https://elixir.bootlin.com/linux/v6.2-rc4/source/tools/inclu...
| (a 'minimal vfprintf()') with the one in cosmopolitan starting
| at https://github.com/jart/cosmopolitan/blob/master/libc/stdio/
| ....
|
| Right away we can see nolibc places many functions in the same
| file while Cosmopolitan uses a one-function-per-filename
| organization.
|
| Cosmopolitan's fvprintf locks the file (which nolibc doesn't
| need to do) then calls vfprintf_unlocked which calls __fmt at
| https://github.com/jart/cosmopolitan/blob/master/libc/fmt/fm...
| , which is the actual implementation. It look very different
| from NOLIBC's.
|
| Okay, so perhaps that's they way _now_ but not at the
| beginning?
|
| We can also go back to Cosmopolitan's original implementation
| and see how vfprintf goes through
| https://github.com/jart/cosmopolitan/blob/c91b3c50068224929c...
| to call "palandprintf", which
| https://github.com/jart/cosmopolitan/blob/c91b3c50068224929c...
| says is copyright "Marco Paland" from 2014-2019.
|
| That's a few years older than the start of nolibc, available
| from https://github.com/mpaland/printf , and part of
| https://github.com/embeddedartistry/libc , a "libc targeted for
| embedded systems usage".
|
| Thus, multiple factors seem to agree that nolibc code is not
| used in the Cosmopolitan library.
| MuffinFlavored wrote:
| https://www.kernel.org/doc/html/latest/RCU/whatisRCU.html
|
| Had never heard of "rcutorture" before
|
| or dracut
|
| https://en.wikipedia.org/wiki/Dracut_(software)
___________________________________________________________________
(page generated 2023-01-22 23:00 UTC)