Sharing read-only code and data between address spaces reduces physical memory usage as well as paging I/O and disk space. In this paper, we study mechanisms for read-only sharing in operating systems. Our work consists of three parts. First, we discuss the issues that arise in the design and implementation of such mechanisms. We examine the solutions adopted by different operating systems. Second, we analyze memory and disk space savings obtained by sharing programs in 4.3 BSD Unix. We show that introduction of a more general sharing mechanism in 4.3 BSD has potential for substantial savings. Finally, we analyze the efficiency of different sharing mechanisms. The read-only sharing mechanism in DASH is shown to be as efficient as the Unix mechanism for program code sharing. Moreover, the DASH approach allows for general read-only sharing (such as shared libraries), not just program code.