protoverse

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

README (4239B)


      1 
      2 PROTOVERSE
      3 
      4 Protoverse is a metaverse protocol. At a high level, protoverse is protocol for
      5 a network of virtual spaces. It is designed to be accessible and open to
      6 everyone. It achieves this by describing the world abstractly like so:
      7 
      8 
      9     (room (shape rectangle)
     10           (condition "clean")
     11           (material "gold")
     12           (name "Satoshi's Den")
     13           (width 10) (depth 10) (height 100)
     14           (group
     15             (table (id welcome-desk)
     16                    (name "welcome desk")
     17                    (material "marble")
     18                    (condition "new")
     19                    (width 1) (depth 2) (height 1)
     20                    (light (name "desk")))
     21 
     22             (chair (id welcome-desk-chair)
     23                    (name "fancy"))
     24 
     25             (light (location ceiling)
     26                    (name "ceiling")
     27                    (state off)
     28                    (shape circle))))
     29 
     30 
     31 Since this is an abstract description, we can "render" it in many
     32 different ways. For example, with natural language:
     33 
     34   $ ./protoverse parse example.space
     35 
     36   There is a(n) clean rectangular room made of gold named Satoshi's Den.
     37   It contains three objects: a welcome desk table, fancy chair and
     38   ceiling light.
     39 
     40 This is important for accessibility. If we want the metaverse to be open
     41 to everyone, we need some way to describe what is going on in this
     42 abstract space without a visual rendering.
     43 
     44 Another reason we prefer a high level description is that we want objects
     45 in the metaverse to be friendly to our machine overlords. The metaverse
     46 should be easily programmable with scripts and bots. A high level
     47 description also allows us to reload the space quickly, while keeping
     48 higher level-of-detail bits cached from previous loads.
     49 
     50 
     51 PROGRAMMABILITY
     52 
     53 The protoverse uses WebAssembly (WASM [1]) to enable computation for
     54 clients interacting with the metaverse. WASM was originally devised as a
     55 generic virtual machine for the web, but it is general enough to use for
     56 cases beyond that.
     57 
     58 With WASM you can use any programming language to code the metaverse.
     59 protoverse comes with an embedded WASM interpreter that can execute WASM
     60 code.  You will be able to augment clients to render your space in
     61 greater detail, show HUD elements, create multiplayer games, etc.
     62 
     63 You can already do a lot without client computation, for instance, your
     64 space could be served dynamically, which you could periodically fetch to
     65 get updated description of the room. This would be equivalent to "refresh
     66 the page" on the web, except due to the level-of-detail nature of the
     67 protoverse, you wouldn't need to refetch the entire room. The client
     68 could cache models and other details that have been previously fetched.
     69 
     70 The default, high-level description of the room could include position
     71 information, so you will be able to see things that have moved when you
     72 "refetch" the state of the room. State updates like this could be a bit
     73 jarring, so most likely you wouldn't want to reload the room for position
     74 updates, these can be served via "object state/position update" network
     75 messages.
     76 
     77 What you do with these network messages could be handled automatically
     78 for simple cases by the client, but otherwise could be handled by WASM
     79 code served by the protoverse server.
     80 
     81 
     82 THIS REPOSITORY
     83 
     84 The goal of this source repository is the be the "linux kernel" of the
     85 metaverse. Developers shouldn't have to deal with low level details of
     86 the metaverse, in the same sense that linux application developers
     87 shouldn't have to think about the details of TCP/IP when building their
     88 applications.
     89 
     90 This repository serves as the "monorepo" of the protoverse.
     91 
     92 Goals:
     93 
     94 * Zero dependencies. Ideally we will avoid linking to openssl as well.
     95   The metaverse should move on from certificate authorities if possible,
     96   opting for a trust-on-first-use model instead. Ideally we would use
     97   something like the noise protocol for securing communications. We can
     98   support this at the protocol level if it makes sense.
     99 
    100 * Cross platform. We should try to support all platforms. Right now we're
    101   prototyping in linux, but the metaverse should be open and accesible to
    102   all platforms.
    103 
    104 
    105 DOCUMENTATION
    106 
    107 You can find further documentation under docs/
    108 
    109 
    110 REFERENCES
    111 
    112 [1] https://webassembly.org