Maybe it's a bad analogy, but this reminded me of how the "actors" in Sims 1 were implemented. Rather than having a massive Sim class that knows how to interact with every object, the Sims ask each object what it can do, and it's up to the object (kernel) to handle the implementation details (IO in this case), do its work, and return later when it's done.