Brian Mastenbrook mentions potential GPL problems. Specifically, what constitutes/does not constitute a derivative work. The specific example he chose was unfortunate in that libreadline comes in GPL flavour only and thus there is no non-GPL "vendor" who is API compatiple and one can therefore assume that his program linking against libreadline would be useless without that.
As far as I am aware, incorporating substantial material into work A from another (copyrighted) work B is, in the eyes of the law, creating a derivative work of work B. When linking against libreadline, dynamically or not, libreadline is incorporated in whatever program is written and the result is, thus, a derivative work of libreadline.
At least that is, as far as I am aware, the reasoning behind "link against GPL and you need to comply with the license". Having worked for a while at a software house, linking against any commercially available library does entail getting a specific license that allows incorporation and may (possibly) entail further per-seat or per-site license fees. This is, again, because the end result is a derivative work.
Note that in the "commercial library" case there tends to be an extreme lack of API-compatible code, so there's a choice of "write code oneself" or "use the commercial library". I can easily see the need for implementing a non-GPL libreadline with a compatible API. That way, people who want to write code using a libreadline-alike have a choice (either compile-time or, for dlopen() and friends, run-time) between using a GPL or non-GPL library.
Harking back to what Brian writes, it is slightly murky if he means dynamically link against as a compile-time "linked againsta dynamic library" or "run-time dynamic linking with explicit code handling and use of dlopen()" (there is, in my view, a small difference between these).
In the first case, I see no moral distinction between static and dynamic linking. The intent is definitely to incorporate a library into the program. In the second, it is slightly murkier, in that tehre could be code trying to find a non-free version by preference and only when not finding that falling back to a GPL version or (possibly) no version at all.
In the case of CL, it's hyper-murky, since the only way one can interact (as far as I know, with the majority of CL compilers) with a normal C library is by the latter method.
