C has all the expressive power of two dixie cups and a string.
C is quirky, flawed, and an enormous success.
As we said in the preface to the first edition, C "wears well as one's experience with it grows." With a decade more experience, we still feel that way.
C is declining somewhat in usage compared to C++, and maybe Java, but perhaps even more compared to higher-level scripting languages. It's still fairly strong for the basic system-type things.
Of course, C proved indispensible to the developers of all its alternatives. Dig down through enough implementation layers under any of the other languages surveyed here and you will find a core implemented in pure, portable C
C++ is in that inconvenient spot where it doesn't help make things simple enough to be truly usable for prototyping or simple GUI programming, and yet isn't the lean system programming language that C is that actively encourages you to use simple and direct constructs.
Besides, REAL computers have a rename system call.
Personally, I'm not interested in making device drivers look like user-level. They aren't, they shouldn't be, and microkernels are just stupid.
To a programmer, an operating system is defined by its API.
It was such a relief to program in user mode for a change. Not having to care about the small stuff is wonderful.
If POSIX threads are a good thing, perhaps I don't want to know what they're better than.