Can someone explain this sentiment to me? I know about licensing and philosophical criticisms, but are there any _technical_ faults?
Can someone explain this sentiment to me? I know about licensing and philosophical criticisms, but are there any _technical_ faults?
And then suddenly you're on a different platform and discover that you can't rely on that -- pretty bad if it's in a central part of your system (like trampolining functions for your toy lisp).
On the other hand, you might run into the same issues if the standard support is sub par. People used to declare K&R-style functions for ages after ANSI was passed, and I wouldn't bet a central part of my system on C99.
I thought the author also implied that GNU was technologically inferior and/or problematic. That would interest me...
However, since gnu is a political umbrella project which does not necessarily value code quality, we see a lot of unnecessary complexity arising from the focus on creating working "free" software and not minding the quality much.
Anyone who ever touched GNU autotools will confirm that the bloat issue is real. No need to be a diehard C head.
> GNU software is also often very bloated and overengineered, and often found in critical places like glibc.
My memory is rusty - aren't those features "protected" against accidental usage, with something like "#define GNU_SOURCE" needed before you include the headers? Or is that protection insufficient?
> Their coding styles are highly questionable and I disagree with a lot of their design decisions.
On the coding styles I agree. On the design decisions... I realize that this is a big and hard question (and that answering it probably amounts to another blog post) but could you please explain that, maybe with an example?
They are "protected", yes, but their mere presence encourages people to use them. There's no reason to use asprintf, but glibc makes it available so some software uses it. That software is now non-portable.
>On the coding styles I agree. On the design decisions... I realize that this is a big and hard question (and that answering it probably amounts to another blog post) but could you please explain that, maybe with an example?
Maybe in a blog post someday.
I think asprintf is useful - it replaces an ugly "malloc-realloc-snprintf-loop"...
On exposing non-portable functions/features:
- OpenBSD does it (pledge)
- Freebsd/NetBSD do it (kqueue)
- ... I'm certain other systems do too
I think _exposing_ non-portable features is ok, as long as you can't use them _accidentally_. Now, _if_ glibc fulfills that, the blame should fall on the (lazy) developer. If on the other hand glibc makes accidental use possible, then that is... bad for portability.> Maybe in a blog post someday.
I would like to read that. :-)
[edit: formatting...]
Well, implement it yourself then. It's really not hard to live without, though. I don't know about this loop you're talking about but I just do this:
int len = snprintf(NULL, 0, "fmt", ...);
char *foo = malloc(len + 1);
snprintf(foo, len, "fmt", ...);
Easy to wrap that up in your own asprintf function if you would find that useful. And in practice writing a lot of these functions is going to happen anyway when someone ports your non-portable code to another system.Yeah, let's reinvent the wheel anytime something is not available on all platforms in the world, wether or not you intent to target them...
If I target GNU systems, why can't I use GNU features ? If people really want to port my code, let them do so.
Thanks for that :-)
For example, Linux still does not have a sane DNS resolver interface that is useful without GNU-C library. With move to containers that lead to many issues like inability to resolve link-local names etc.
Are you opposed to dynamically linked libraries in general? Or do you simply oppose using them for name resolution? And how would you propose implementing NIS, LDAP/Kerberos, etc. without them (and without recompiling the libc itself)?
> For example, Linux still does not have a sane DNS resolver interface that is useful without GNU-C library. With move to containers that lead to many issues like inability to resolve link-local names etc.
Valid criticism. But that's not the GNU peoples' fault, IMHO - I mean, they have a working libc, it's not their fault that containers don't work with other libcs. (Or do i misunderstand you?)
As for the resolver, then consider that on Ubuntu/Fedora etc. there is hack to set the nameserver in /etc/resolv.conf to 127.0.0.1 which runs a local caching resolver. However this is broken for local name resolution with multiple interfaces as DNS replies do not include interface name. So in a better world glibc simply talks to a system daemon using well-defined protocol. Instead right now to expose, say mdns into containers, one has to spend too much efforts with various hacks even if one does use glibc in a container application.
However I thought that "blight" implies some actual technological inferiority. If there is some, I would like to know more about that.