Drum Circle Computing

For the past year or so I have been researching nearby computer networking. The basic idea is simple, if you place two devices next to each other, I want to easily be able to connect these devices and pass messages between them. Unfortunately, in practice this is actually quite a difficult problem due to differences in device hardware, ever-changing OS-level API's, and a slew of strange per-device quirks with using these API's.

Because it is actually quite a hard problem, I have been trying to reason about why nearby networking is even important at all. Nearly every major collaboration tool and software system uses centralized infrastructure, and in the edge case where there is nearby device interaction, it is usually reliant on mDNS and an existing local area network. All these tools have been tremendously successful and are used at scale, so maybe this approach offers enough functionality for most users.

I realized that I had been strongly motivated not by a logical recognition of some market inefficiency, but a feeling. One afternoon I was walking around in a park and I stumbled upon a drum circle and it hit me that this was the deep-seated feeling I had been searching for. Drummers freely flowing between rhythmic patterns, performers jumping in and out of the circle, different types of percussive instruments filling the available high frequency ranges. In many ways music is one of the most pure forms of collaboration we have access to, it requires purely our cognition and some instruments (in this case we will consider the voice an instrument). No languages, no auxiliary infrastructure, just people, a place, and some instruments. I sat there watching the drum circle thinking about how nothing in my personal computing history had come close to this collaborative experience.

There are many reasons why digital collaboration lacks these feelings. For example, the interfaces for digital collaboration are usually discrete, we generally deal with character buffers that can only have one value per buffer location at a time, so making changes to a digital document or codebase often feels like trying to not encroach on your collaborator's "areas". Music offers layers of timbre and pitch, which build upon each other to create harmony. Perhaps projects like Dynamicland can help bring continuous, harmonic interfaces to computing. But even at the networking layer, I feel that there is much that can be done. Improved nearby networking approaches could give digital collaboration a feeling of freedom reminiscent of the drum circle.

Musicians collaborate relying only on their instruments, synchronized by physics. Future nearby-networking digital collaboration systems could enable real-time, multi-cpu collaboration using personal computer radio hardware, synchronized by protocols like modern CRDTs.

Or, to put it simply, in-person digital collaboration should rely only on personal devices. With servers and additional infrastructure being optional.

On the software side, there is a tremendous amount of work being done towards building efficient data synchronization protocols, with projects like Yjs, Automerge, and delay-tolerant designs with interesting privacy properties like Bramble. What is missing however, is an open source library for efficient nearby networking.

With modern personal computing devices, we have an abundance of compute power and storage, and most modern devices have the necessary radio hardware needed to efficiently network personal devices together. It is just a problem of building a wrapper API above these various different radio hardware specifications like BLE, L2CAP, WLAN, Wifi-Direct etc.

I believe that nearby networking could potentially offer many useful features for users:

Stories for Another Time: Nearby-Networked Itemized Environments

One interesting extension of many of these ideas is how they interact with itemized environments.