Source: https://autosys.informatik.haw-hamburg.de/papers/2017SarnowInterfaceProgramming.pdf