Embedded systems demand concurrency for supporting simultaneous actions in their environment and parallel hardware. Although most concurrent programming formalisms are prone to races and nondeterminism, some, such as our shim (software/hardware integration medium) language, avoid them by design. In particular, the behavior of shim programs is scheduling-independent, meaning the I/O behavior of ...