A few things: A kernel module that supports overlay file-system. A set of user space tools to mount writable FS overlaid on top of the read-only FS. And managing your application that resides on the overlay part of the tree other than arbitrary places in the FS.
For the overlay file-system, aufs is one of the most usable ones. You can get a specific for almost all the major Linux kernel releases, and the user-land tools is easy to port.
And the strategies of managing application locations can be described by the auroot example in the aufs user-land utility package, by this list of web pages:
- ReadonlyRoot Debian wiki. FHS and how to modify the standard stuffs without non-standard hacks. At the article end there is also a link to the aufs way of readonly root.
- Hot To Build a Read-Only Linux System by Forest. This article explains the history and current practices, quite informative.
- How to create a read-only root file system on Linux-from-scratch, dated 2003, but still very relevant.
- And this short and yet complete article on google.