A couple years or so after that, Stallman seems to have changed his mind on compatible libraries.

Someone started distributing a program called RIPEM which was an implementation of the PEM (Privacy Enhanced Mail) standard, using RSA.

At the time RSA was patented and could not be legally used without permission in free software in jurisdictions that recognized the patent. RSA (the company) provided a library, RSAREF, that could be used for things like personal and noncommercial use, but could not be distributed on terms that were compatible with GPL.

RIPEM was public domain. The user was expected to get RIPEM, separately get RSAREF, and compile and link them on the BSD or Linux system. You also needed a bigint library.

The source code for RIPEM was written so it could work with either the BSD bigint library or the GNU bigint library. Something like this (but I'm making up the names):

#ifdef BSD_BIGINT
struct bsd_bigint_stricture * x;
#endif

#ifdef GNU_BIGINT
struct gnu_bigint_structure * x;

#endif

Same sort of thing at places that called the bigint library functions to operate on bigints.

Stallman objected. He said that the RIPEM author could not distribute that source code because on Linux systems the user would build it with GNU_BIGINT set, and link it with the GNU bigint library and RSAREF, and RSAREF licensing was incompatible with the licese of the GNU bigint library.

A lot of us thought that Stallman must be claiming some kind of interface or API copyright, because that was the only way we could see to try to make a copyright argument against distributing the RIPEM source code. Distributing a binary of RIPEM linked with RSAREF and the GNU library? Sure...that would clearly be not allowed. But source?

To be a derivative work of the GNU library, the RIPEM source code would have to incorporate some copyrighted elements of that library. Contrary to popular belief, it is not enough that work X is not useful without work Y to make X a derivative work of Y. It's got to actually take something from Y.

So unless the names of the library's functions, the calling sequences, and things like that are copyrighted (i.e., the API is copyrighted), RIPEM source could not be a derivative work.

What it turned out that Stallman was arguing is that when a Linux users ends up with a binary that combines RIPEM, RSAREF, and the GNU bigint library, that would not have have happened if not for the code in the GNU_BIGINT ifdef. Because that code has no use or purpose other than the building of those binaries, that code induces or causes people to make GPL violating binaries. The RIPEM author would be vicariously liable for those violations.

What finally resolved this was that someone wrote a library for BSD that implemented the GNU library's interface on top of BSD's bigint library. Now you could build RIPEM on BSD with GNU_BIGINT defined but not actually linking any GPL code.

This satisfied Stallman because now defining GNU_BIGINT had a use other than building a GPL violating binary.

There actually is vicariously liability in copyright law in the US. You can be found liable for enabling someone else's copyright infringement. That generally requires either you have control over them, or you provided them the means to infringe and there is no substantial non-infringing use for whatever it was you provided.

Vicarious infringement only works though if there is someone who is directly infringing so that there is someone whose liability you can be vicariously responsible for.

Stallman was not saying the the user who downloaded RIPEM, separately download RSARREF, and theb compiled them and linked to the GNU bigint library was infringing. GPLv2 generally allowed the user to whatever they wanted as long as they were not distributing any GPL code. Only when you distributed were GPL conditions imposed. But with no direct infringement on the part of that user, it is hard to see how you can hang vicarious infringement on the RIPEM developers.