Saltzer, Reed, and Clark (SRC) provide a new analysis of function placement and its associated design principles. The problem that they are trying to solve is where to put logic in designing systems. This logic or functionality can be placed in any level between the highest and the lowest. The problem consists of creating a design principle that would generate system designs that would increase performance by placing functionality at the most appropriate level.
SRC argue that end-to-end functionality, that is, putting the functionality at the application level, is most often the best approach in system design. They base this on the principle that functionality done at the lower level faces two issues:
SRC give many examples in which this is the case. One of these examples is the reliable file transfer example. In this case, there are a multitude of problems that could occur when transferring a file from host A to host B. One type of problems are errors in network transmission. If there is low-level error correction placed in the system, it would not necessarily eliminate all errors, only those caused by network transmission. Ultimately, the file transfer application will have to deal with problems in the transmission anyways (SRC suggests sending checksums after a set of packets). Thus, the work is duplicated, and other applications that do not need reliable transfer pay the cost regardless.
Other examples provided by SRC are:
The SRC paper successfully argues why much functionality such be placed outside of the lowest levels. However, it does not go deeply into the layering paradigm that is present today. Should applications contain the functionality? Libraries that those applications use? The operating system at the API level? The kernel level? Those questions remain relevant in system design.