Friday, April 18, 2003

End-to-End Software

Arguably, the single greatest success that computer science has had, and the single greatest contribution to society, is one really good protocol. The fundamental insight of the IP protocol stack--indeed, the idea of a protocol stack--and the distributed, end-to-end design of the Internet have transformed, and continue to transform, society. This architecture, known as end-to-end, places the burden of functionality at the endpoints, rather than in the network. As a side effect, the Internet is built on top of an unreliable, failure-prone layer.

This architecture has provided significant advantages. The Internet is resilient to failure, is amazingly scalable (from hundreds to hundreds of millions of nodes), is supportive of an astounding degree of innovation.

Can this architecture be applied to software? Software suffers usually suffers failure if even a single module fails; it generally scales poorly, and is brittle in respect to new uses. If only software could be written end-to-end, it might be able to perform as well as the Internet.