Biologically-Inspired Robust Spatial Programming

Abstract Inspiredbytherobustnessandﬂexibilityofbiologicalsystems,wearedevelopinglinguisticand programming tools to allow us to program spatial systems populated by vast numbers ofunreliable componentsinterconnectedin unknown,irregular,and time-varyingways. We orga-nize our computationsaroundgeometry,makingthe fact that our system is made up of discreteindividuals implicit. Geometry allows us to specify requirements in terms of the behavior ofthe space occupiedby the aggregaterather than the behaviorof individuals,thereby decreasingcomplexity. So we describe the behavior of space explicitly, abstracting away the discrete na-ture of the components. As an example, we present the Amorphous Medium Language, whichdescribes behavior in terms of homeostatic maintenance of constraints on nested regions ofspace. Increasingly, wearefacedwiththeprospect ofprogramming spatially embedded meshnetworkscomposed of huge numbers of unreliable parts. Projects in such diverse ﬁelds as sensor networks(e.g. NEST [12]), peer-to-peer wireless (e.g. RoofNet [2]), smart materials (e.g. smart dusts [16,26]),and biological computation [18,30,31]allenvision using networks oflarge size (ranging fromthousands to trillions of nodes) where only nodes nearby in space can communicate directly, andthe network as a whole approximates the physical space through which it is deployed.Biological systems inspire us. Consider, for example, my hand. Huge numbers of unreliableprocessors (cells) collaborate to form a hand, and most hands are identical in all but the least im-portant ways. Moreover, my hand reliably maintains its structure even in the face of large-scaledamage, from cuts to broken bones. Biological systems exhibit great ﬂexibility: with only a smallchange of parameters the same process that builds a human hand can also make a lion’s paw or abat’s wing. We aspire to learn to build systems that have the same level of precision, ﬂexibility, androbustness as the processes that build and maintain our hands.Our goal is to formulate engineering principles for controlling vast systems of unreliable com-ponents connected in unknown, irregular, and time-varying ways. One way to capture engineeringprinciples istoinventprogramming languages. Whenweinventaprogramming language wechoosewhat is explicit and must be addressed by the programmer and what is implicitly represented in thethe structure of the language. In order to make some ideas effectively implicit we must understandthem thoroughly, and the correct execution of our programs is a powerful test of this understanding.We consider systems that are densely distributed in ordinary two-dimensional or three- dimen-sional space, and we assume that computation and local communication is cheap. Thus we canorganize our computations around geometry, making the fact that our system is made up of discreteindividuals implicit. The geometric abstraction allows us to specify requirements in terms of thebehavior of the space occupied by the aggregate rather than the behavior of individuals, therebydecreasing complexity. So we must invent languages that describe the behavior of space explicitly,abstracting away the discrete nature of the components.