The design of Floyd sketched above works fairly well in practice for the size of application that it was intended for (about ten agents). Queries about whether a world is up or where someone was last seen are answered efficiently and reasonably reliably. The mechanism to synchronize the list of Floyds is more effective than expected. New Floyds are able to join the network with little effort, usually one registration and one request to learn from another Floyd. The list of Floyds remains synchronized across the network. Most surprisingly, individual Floyds are able to use the information available on the Floyd network to recover from their own local database crashes: because the list of Floyds is distributed, it is robust to local failures. Floyd shows the power of having distributed agents cooperate to accomplish global information tasks.
One design problem that will manifest itself as the Floyd network grows is the simpleminded communication substrate. UDP is an inherently unreliable protocol: messages are not guaranteed to be delivered. A few dropped packets have been seen in practical usage, resulting in incomplete information about where someone was or whether a particular world was running. Presumably as more agents are added to the system and traffic goes up, more packets will be dropped. A reliable transport layer built on top of UDP (either in Perl or in ccrl) would solve this problem, although moving to a stateful protocol will increase the complexity of the code.
In addition, the current broadcast mechanism used by Floyd to make requests will not scale well. For a Floyd network of size N, each agent has to be able to talk to all N-1 other agents. One possible solution is to have each Floyd only talk to a small set of other Floyds, but try to have enough communication pathways open that the network is completely connected. A simple form of message forwarding could then be layered on this sparsely connected Floyd network in order to create broadcast capability. The architecture of this network is challenging because nodes in the routing graph are only functioning if those Floyds are running, and many Floyds are expected to be down at any given time. Redundancy and possibly some form of adaptive routing will be necessary to maintain integrity of the broadcast network.
A major problem with Floyd is that his design currently does not address any privacy or security issues. Floyd will answer any request he receives from any other agent: he gladly shares all information he knows. In particular, every Floyd is sharing its database with the entire world, and every Floyd is monitoring people's movements and reporting them to whomever asks. In order for Floyd to succeed longterm, the need for privacy must be balanced against the need for information sharing. If every Floyd refuses to give up any information, then the network fails.
In addition, Floyd assumes that other Floyds he communicates with are not malicious, are not deliberately trying to deceive or exploit him. This problem is not simple to fix: fundamentally, Floyd has to ask other agents for information. If another agent chooses to be deceptive, how can Floyd detect this? A careful design review to minimize the damage other agents can inflict is needed, along with some consideration for a social enforcement network so cheating is discouraged.