Fefe, a German programmer and blogger, writes about software, security, and politics, and wrote dietlibc, gatling, and libowfat.
Commenters say he has good taste in software and link his tools, including dietlibc and ncp, and his compiler optimization talk.
Yeah, a lot of good programmers have alternatives to libc, either for reasons of history or taste.
I was just reading DJB's daemontools (less than 6K LOC, very tidy!), and he doesn't use libc. Actually his code has been collected in libdjb, which seems quite nice:
http://www.fefe.de/djb/
And also the Plan 9 / Go guys don't use ANSI libc as far as I remember.
Those are two examples of people who don't even use the ANSI libc interface. But there are plenty of people who don't use GNU libc, and use uclibc or various other source-compatible alternatives. I think Debian switched to eglibc awhile ago.
Thanks for this Ryan. I'll reference this gist too. I remember starting with something like this early on (w/o your sysdef) but wanted argc, argv, envp and to separate syscall* from the startup code.
Part of the reason I've started this is that libc suffers from bad design (in von Leitner's definition [0]). I find c0's & djb's APIs better designed [1][2]. *printf is a prime example of bad design. Heck, pretty much everything in stdio.h & string.h has a design flaw)
[0] http://www.fefe.de/dietlibc/diet.pdf
[1] http://c0.typesafety.net/tutorial/Strings.html
[2] http://www.fefe.de/djb/
But did you secure it against endless parser loops? At least older g++ versions have a problem with this:
template<class T> struct Loop { Loop<T*> operator->(); };
Loop<int> i, j = i->hooray;
And on older gcc versions this eats a gig RAM and a takes couple of hours:
struct a{typedef int foo;};struct a1:a{};struct a2:a{};
#define X(b,a) struct a##1:b##1,b##2{};struct a##2:b##1,b##2{};
X(a,b)X(b,c)X(c,d)X(d,e)X(e,f)X(f,g)X(g,h)X(h,i)X(i,j)X(j,k)X(k,l)
X(l,m)X(m,n) n1::foo main(){}
From slide 11 and 12 of this presentation: http://www.fefe.de/c++/c%2B%2B-talk.pdf
something that was not necessary. Init scripts can be nice and clean [1]. And yes, I'm all for a init replacement. Something new, nice and clean. But I take the shell script hackery over a dbus dependency. But that's just my personal opinion.
I have neither used it nor looked at the code, but [2] seems to be what I want. It's by the libdietc author, so i expect the code to be small, elegant and not maintained very well.
[1] http://www.freebsd.org/doc/en/articles/rc-scripting/rcng-dummy.html
[2] http://www.fefe.de/minit/
You can use DNS NOTIFY rather than sending an email. When the primary is updated, DNS NOTIFY will tell each secondary about the change.
DNS NOTIFY is standardised in: https://tools.ietf.org/rfc/rfc1996.txt
BIND 8+ supports it by default, according to http://docstore.mik.ua/orelly/networking_2ndEd/dns/ch10_03.htm
There is a perl script to achieve the same thing in djbdns, according to http://www.fefe.de/djbdns/#notify (which joe_bleau alluded to).
One man's trivial is another man's bother. I consider 30k (less than some images or the rather popular fonts) to be quite trivial for most purposes, and if it gives me a nicer syntax for common operations, it's probably worth it.
On the other hand, I've seen actual backlash against printf implementations in libs and the bloat they're causing, never mind potential bugs [1].
So there you go.
[1]: https://www.fefe.de/dietlibc/FAQ.txt