[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)