GeekDad’s review of Hacking: The Art of Exploitation by Jon Erickson innocently catalyzed the following rant:
The distinction between hacking and non-hacking is the distinction between repurposing and purposing. In order to tell one from the other, you have to have a clear and complete understanding of intended use.
Take a claw hammer. Two ends, two intended uses: Bash nails, pull nails. Open a paint can with the claw: Hacking.
Now take a hunk of software. The only clear way to state an “intended use” is with a reproducible acceptance test. The only complete way to state “intended uses” is to assemble a suite of acceptance tests. If a test passes, that’s non-hacking. If a test fails, that’s a bug. Any use not covered byte-for-byte and click-for-click by an acceptance test is an unintended use: Hacking. Every user is a hacker.