Comment GCC, stable APIs and subversion of Free software. (Score 5, Interesting) 359
Hi RMS,
Firstly I am fan of what you've done and what you have given the world. I also asked you a weakly related quesion about two decades ago when I was a teenager and didn't realise one shouldn't just email random well known people on the internet. You were kind enough to take the time to write a thoughtful reply.
The question is about subversion of Free software via a stable API. If a stable API exists in some popular library/piece of software, it is possible to write a shim layer, where the GPL shim serialises the interaction then sends that to a non-free component[*]. The non-free component of course has the interesting and useful logic. Since it's not linking to the Free part, then it's not covered by the GPL.
Via such a mechanism, one could use a significant GPL component in a non-free program. Naturally this is very much at odds with the spirit of the GPL, but not the letter. From what I recall, you explicitly warned about this sort of thing when GCC were creating an API for interacting with external tools. GCC being arguably the leading compiler in the world[1], would be prone to such subversion.
I believe your suggestion at the time was to essentially neuter the plugin API so that there was nothing left to subvert. Naturally though that comes with downsides is that it also makes it harder for the Free software community to work with GCC. GCC did eventually decide to go with the plugin API.
Do you still think that not having an API would have been the right choice? If so, what to you think the relative tradeoff is between making Free software better and as a side effect making it easier for non-free software development? If not, what made you change your mind? Either way, where do you draw the line---gcc always could be used to compile non-free software and of course making GCC better makes such things easier.
It also seems that GCC went with the plugin interface because they believed that the improvement to the usability of GCC was worth it relative to the risks. Do you think it's possible in theory to have flexible plugin interfaces without openning the door to non-free software, such as some hypothetical license change?
Thankyou for your time
[*] related: if one has two libraries offering identical APIs such as the various libcs, then it's hard to argue that something using libc is a derived work of a particular implementation. Especially if it's dynamically linked it could easily pick up any number of several different compatible ones. The concept of derived work is what gives the GPL and indeed all of copyright its teeth.
[1] To anyone who wants to argue that LLVM or Intel CC or etc is better please don't. GCC is arguable the best in that I and others could make reasonable arguments for that case. It's not provably the best.