protoverse

A metaverse protocol
git clone git://jb55.com/protoverse
Log | Files | Refs | README | LICENSE

commit b91d7f4a4da4f8cc220f3e2fd132fd5b17647db6
parent 0b6bc8ea9c1cf11b3c0c06cd20be0cb1ac76465d
Author: William Casarin <jb55@jb55.com>
Date:   Wed,  7 Jul 2021 08:46:47 -0700

README updates

Added some thoughts on programmability

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
MREADME | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+), 0 deletions(-)

diff --git a/README b/README @@ -41,6 +41,70 @@ This is important for accessibility. If we want the metaverse to be open to everyone, we need some way to describe what is going on in this abstract space without a visual rendering. +Another reason we prefer a high level description is that we want objects in the +metaverse to be friendly to our machine overlords. The metaverse should be +easily programmable with scripts and bots. A high level description also allows +us to reload the space quickly, while keeping higher level-of-detail bits cached +from previous loads. + + +PROGRAMMABILITY + +The protoverse uses WebAssembly (WASM [1]) to enable computation for clients +interacting with the metaverse. WASM was originally devised as a generic virtual +machine for the web, but it is general enough to use for cases beyond that. + +Using WASM you use any programming language to code the metaverse. protoverse +comes with an embedded WASM interpreter that can execute WASM code. + +With WASM, you will be able to augment clients to render your space in greater +detail, show HUD elements, create multiplayer games, etc. + +You can already do a lot without client computation, for instance, your space +could be served dynamically, which you could periodically fetch to get updated +description of the room. This would be equivalent to "refresh the page" on the +web, except due to the level-of-detail nature of the protoverse, you wouldn't +need to refetch the entire room. The client could cache models and other details +that have been previously fetched. + +The default, high-level description of the room could include position +information, so you will be able to see things that have moved when you +"refetch" the state of the room. State updates like this could be a bit jarring, +so most likely you wouldn't want to reload the room for position updates, these +can be served via "object state/position update" network messages. + +What you do with these network messages could be handled automatically for +simple cases by the client, but otherwise could be handled by WASM code served +by the protoverse server. + + +THIS REPOSITORY + +The goal of this source repository is the be the "linux kernel" of the +metaverse. Developers shouldn't have to deal with low level details of the +metaverse, in the same sense that linux application developers shouldn't have +to think about the details of TCP/IP when building their applications. + +This repository serves as the "monorepo" of the protoverse. + +Goals: + +* Zero dependencies. Ideally we will avoid linking to openssl as well. The + metaverse should move on from certificate authorities if possible, opting for + a trust-on-first-use model instead. Ideally we would use something like the + noise protocol for securing communications. We can support this at the + protocol level if it makes sense. + +* Cross platform. We should try to support all platforms. Right now we're + prototyping in linux, but the metaverse should be open and accesible to all + platforms. + + DOCUMENTATION You can find further documentation under docs/ + + +REFERENCES + +[1] https://webassembly.org