To be exact, GPL requirement "distribute code limitations should not exceed distribute binaries limitations", and it include derivatives, and this is tricky thing. For example, if I will use GPL licensed code in some my commercial hardware and distribute update binaries, I must also distribute code including my additions with same conditions as binaries, so if I made patches or additions (with GPL code used), I must also include code of my additions, so people could compile binaries themselves.
Viral nature of GPL is really big headache, because make big troubles to use external libs as they could be closed source, so it will be impossible to client to compile binaries himself.
Imagine, if I'll use GPL for control of nuclear reactor and have to open control schemes to comply with GPL (in real life, these things keep secret to make more hard for bad people make something wrong with such dangerous object).
This solved for very few software packages, for example, GCC, Libc, have exclusion in license, directly allowed to make closed sourced derivatives and to link external library without give access to its code (only need api definition, for example as C header).
At the same time, GPL does not limit usage of open source software by hosting companies, who don't make any contributions.
That's why some infrastructure companies switched from GPL to different licensing schemes.