Every exploit had a different interface and different options - **Payload coupling** — Most exploits had their payloads hardcoded; changing the payload meant modifying source code - **Limited platform support** — An exploit written for Linux often would not compile on other platforms - **No modulari