In 2005, early in his tenure as CTO of Microsoft, Ray Ozzie
wrote a memo
to Microsoft developers in which he points out that: "Complexity
kills. It sucks the life out of developers, it makes products
difficult to plan, build and test, it introduces security
challenges, and it causes end-user and administrator
frustration." He went on to suggest that better software
engineering techniques and improvements to processes within
their programming culture can keep complexity under control.
He's certainly right about the problem. Consider the call graph of Microsoft's IIS Web Server serving one HTTP request asking for a single image (click on thumbnail for full-size image).
However, naming the problem does not make it solvable!
Windows continues to grow more complex. Reportedly, there were
20 million lines of code in Windows 2000, 25m in XP and 50m in
Vista. Microsoft has not revealed the number for Windows 7 or 8.
More code, more bugs! Complexity has not been brought under
"control" in Windows. Even if by brute force-of-will Microsoft
could tame complexity within its domain, the digital world
outside their walls continues to grow more and more complex
because it is beyond our
control. Operating systems, applications, browser
plug-ins, clusters and grids, blogs and wikis, peer-to-peer
file-sharing networks, and collaborating web-services grow and
mutate before our eyes
Various sorts of encapsulation mechanisms, i.e., barriers to unwanted interactions, have evolved in both living and computing systems to help control runaway complexity. We can and should continue improving our systems in a piecemeal way when possible. Nonetheless, it is impossible to permit only desired and safe interactions. Thus we cannot precisely control and manage all interactions in complex living or digital systems.
Instead of stubbornly believing that we can control runaway complexity, we should look for large-scale architectural approaches that are inherently less susceptible to failure. And where better to look than the complex world of living systems? Carver Mead, a professor of Computer Science at Cal Tech, said years ago that, “engineers would be foolish to ignore the lessons of a billion years of evolution. He was talking then (1993) about constructing a silicon retina and silicon cochlea. The rapid growth of the Internet was just beginning at that time. Its current extent and complexity was beyond our imagination then, just as the extent and complexity of the Internet/Web of 2020 is beyond our imagination today.
This site explores some of the lessons we can draw from a billion years of evolution. It focuses in particular on four organizing principles that evolved during the evolution of multicellular organisms. I argue that these principles can illuminate our development of multicellular computing.