The IP stack has seen unprecedented tech-
nical and economic success over the past
30 years. A significant portion of all data
communications on Earth are now carried in IP
packets. One key reason for this success is the
apparent simplicity of the BSD sockets API, from
which the kernel networking stack interface on
many platforms is directly or indirectly derived.
The key insight behind BSD sockets’ success is
that streams over the network aren’t fundamen-
tally different from those between processes on a
single host or stored on disk. Network application
programming was thus significantly easier than
interfaces that treated the network completely
separately from other types of I/O. Today, most
network programming is done with higher-level
interfaces provided by application development
platforms. However, the assumptions made in the
BSD sockets API continue to constrain network
programming to the least common denominator.