This document discusses how to write shared libraries. It begins with a brief history of shared libraries for Linux, noting the limitations of the original a.out format. It then summarizes some of the drawbacks of the a.out approach for shared libraries, before introducing ELF (Executable and Linkable Format) as an improved standard. The document stresses that while ELF removes many restrictions, there are still rules that must be followed to generate decent code from shared libraries and additional techniques required for optimized code.