This chapter discusses software partitioning in communications systems. It describes how the OSI model can be used to partition functionality but may not be optimal for performance. It then discusses partitioning software into modules and tasks, providing an example decomposition of an Ethernet switch. Key concepts covered are protocol dependencies, performance considerations, and hardware configuration challenges related to strict layering.