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