Current embedded systems are made of multiple heterogeneous devices interconnected. These devices present a great variation of functionality, performance, and interfaces. Therefore, it is difﬁcult to build applications for these platforms. In this paper we present the notion of hardware-software operating systems to increase the abstraction level and to introduce component- based methodologies into hardware-software codesign. We make special emphasis on the use of simple, homogeneous interfaces to hide the inherent complexity of current designs. We show, with a detailed example, that the use of a hardware-software operating system does not imply a signiﬁcant overhead.