1. A computer-implemented method comprising: running a software unit in an isolation container located on a software platform; allocating an instance of a device function instantiated by the software platform to the software unit; storing usage data associated with the instance to a memory region logically external to the isolation container, the usage data being generated by the software unit operating the device function; detecting a failure of the software unit; responsive to detecting the failure, restarting the software unit based, at least in part, on: providing the software unit with the usage data; enqueuing an event delivered from the instance during an unavailability period associated with restarting the software unit in an event queue; and dispatching the event from the event queue to the software unit, wherein dispatching is delayed until a new software event handler corresponding to a software event handler registered with the instance prior to the failure is registered by the software unit.