Processes don’t share memory with the OS so can’t use its memory address, so we use opaque ‘handles’ to identify OS-level objects. The OS mediates access to the hardware and abstracts away device details so we can’t use device-level identifiers. Some ‘objects’ are also OS constructs: threads, processes.