A central problem of computer science is the integration
of knowledge and coordination of action in complex systems. The same may be
said of society. In society, however, this problem has been faced for millennia
rather than decades, and diverse solutions have been tested for effectiveness
through hundreds of generations of competition. Efforts to understand the
resulting institutions and to describe their principles of operation have
spawned the science of economics.
Contrary to common impressions (fostered by media
coverage of politics and the stock market), most economic inquiry has little to
do with guessing economic trends. Economics has many branches; the branch most
relevant to this paper studies the consequences of pursuing goals within the
constraints of limited knowledge and resources, and studies the institutions
and patterns of behavior adapted to this pursuit. This branch of economics can
without embarrassment be termed a science, since it meets the criteria for a
scientific discipline [1,2].
At the broadest level of abstraction, the problems of
social and computational coordination are fundamentally similar. Concrete
parallels, however, are rough: memory space is a bit like land, or perhaps a
raw material; processor time is somewhat like labor, or like fuel; software
objects are like workers, or perhaps like managers or firms. In [I] we list a number of fundamental differences
between computational and human markets. For example, within a computational
system, activities need produce neither pollution nor other effects on
non-consenting objects; the most typical product, information, does not form a
depletable physical inventory; specialized labor forces (copies of specialized
objects) can be expanded almost instantly and can be cut back without human
anguish.
Despite these deep differences, we argue that the
fundamental parallels between the problems of social and computational
organization are strong enough to motivate the wholesale importation of
economic models and metaphors into the computational domain, at least on a
trial basis. These differences do, however, suggest that forms of organization
that fail or are rejected in one domain may prove workable and desirable in the
other. For example, the ability of computational systems to establish rules as
genuine constraints where an analogous human legal system can only penalize
violations makes possible patterns of organization that can only be
approximated in society.
1.1. Why focus on markets?
For a variety of reasons, this work explores essentially
pure markets as models of economic organization for computation, supported by a
minimal "legal" framework of foundational constraints. A large body of economic
theory and historical experience indicates that markets are, on the whole,
remarkably effective in promoting efficient, cooperative interactions among
entities with diverse knowledge, skills, and goals. Historically, those
entities have been human beings, but economic principles extend to
decision-making agents in general and hence to software objects as well. In [I], markets are considered as ecosystems and
compared to others, such as biological ecosystems. This examination shows how
the distinctive rules of markets (such as the suppression of force and
protection of trademarks) foster the spread of cooperation (and encourage
entities to compete to be effective cooperators).
This paper argues that market ecosystems are particularly
appropriate as foundations for open systems [II], in which evolving software spread across a
distributed computer system serves different owners pursuing different goals.
When also open to human society, computational market ecosystems will enable
diverse authors to create software entities and receive royalties for the
services they provide, and enable diverse users to mold the system to their
needs by exercising their market power as consumers. Computational markets can
be made continuous with the market ecosystem of human society.
1.2. Sketch of a computational
market
This line of investigation leads us to propose what may
be called the agoric approach to software systems. Agoric stems
from agora, the Greek term for a meeting and market place. An agoric
system is defined as a software system using market mechanisms, based on
foundations that provide for the encapsulation and communication of
information, access, and resources among objects. Each of
these notions plays a role in supporting computational markets.
Here, the notion of "object" is independent of scale and
language, and includes no notion of inheritance. An object might be small and
written in an object-oriented language; it might equally well be a large,
running process (such as an expert system or a database) coded internally in
any manner whatsoever. Objects are assumed to communicate through message
passing and to interact according to the rules of actor semantics [3,4], which can be
enforced at either the language or operating system level. These rules
formalize the notion of distinct, asynchronous, interacting entities, and hence
are appropriate for describing participants in computational markets.
Encapsulation of information ensures that one object
cannot directly read or tamper with the contents of another; communication
enables objects to exchange information by mutual consent. The encapsulation
and communication of access ensures that communication rights are similarly
controlled and transferable only by mutual consent. These properties correspond
to elements of traditional object-oriented programming practice; in large
systems, they facilitate local reasoning about competence issues-about
what computations the system can perform. Extending encapsulation to include
computational resources means holding each object accountable for the cost of
its activity; providing for the communication of resources enables objects to
buy and sell them. In large systems, these extensions facilitate local
reasoning about performance issues-about the time and resources consumed
in performing a given computation. Computational foundations suitable for
markets thus offer advantages in the performance domain like those offered in
the competence domain by object-oriented programming.
For concreteness, let us briefly consider one possible
form of market-based system. In this system, machine resources-storage space,
processor time, and so forth-have owners, and the owners charge other objects
for use of these resources. Objects, in turn, pass these costs on to the
objects they serve, or to an object representing the external user; they may
add royalty charges, and thus earn a profit. The ultimate user thus pays for
all the costs directly or indirectly incurred. If the ultimate user also owns
the machine resources (and any objects charging royalties), then currency
simply circulates inside the system, incurring computational overhead and (one
hopes) providing information that helps coordinate computational
activities.
|