Interfaces are the building blocks of software. Interfaces explain what software can do but not how. They can be an API, a wire protocol (think HTTPS), or ABI (application binary interface). How you implement these interfaces is up to you. And if done in the right way, the software should be a drop-in compatible replacement for anything else that shares the same interface.

Sometimes the implementation is wildly different than the original intention. Compatibility means that it's easier for existing users to switch over. New products can start with a large addressable install base (technical wedge). New implementations can deliver stepwise increases in performance and efficiency with only incremental work from the user.

Here's how you can get creative with programming to the interface.

Make the interface embeddable

Make the interface available in a different environment

Reimplement the interface with a permissive license (or avoid copyright infringement)

Specialize an implementation

Optimize the interface

Virtualize an interface