People were getting around GPLv2 by providing the source, but encrypted, effectively circumventing the distribution requirement.
This was a key addition to GPLv3. You can distribute your code encrypted, but you *must* provide encryption keys with the ability for the client to view the code, as well of modify and run the modified code.