What is VWRAP? (Linden's ten year old open Virtual World protocol)
meadhbh.hamrick.rocks
meadhbh.hamrick.rocks
Linden Lab went through a period when they envisioned a 3D web, where the same client would talk to multiple virtual worlds. Around 2011, they backed off on that. But others went on, and to the surprise of Linden Lab, Open Simulator was developed. The Second Life simulator is proprietary, while the client is open source. Both are in C++. Open Simulator is in C#, and it's roughly compatible, although totally different internally.
I've been writing a Second Life / Open Simulator client in Rust for the last year or so, so I know the wire protocol. VWRAP seems to be an attempt to define a more portable wire protocol with roughly the same information.
The current Second Life wire protocol has two parts, events via binary UDP messages, and assets via HTTP. The UDP message formats are defined here.[1] This is a painful system. Both ends have to use exactly the same message template file, because messages do not contain length information. You have to parse each message perfectly just to find the next message. This makes adding new messages very difficult. No new messages have been added in years. That's one problem VWRAP was intended to solve.
Assets come in from ordinary web-type servers, and complex ones are encapsulated in Linden Lab Serial Data Protocol, which is documented and has multiple implementations. Those are reasonably straightforward to deal with.
The conceptual problems of interoperability are much tougher. There are some metaverse standards organizations starting up, but they're working more on diversity, inclusion, and safety than wire protocols. Content standardization is making progress. Content standardization seems to be settling on some subset of GLTF/USD formats. NVidia is pushing that, and the major tools (Maya, Blender, Unity, Unreal) all speak it. That's a file format, not a wire protocol.
Enough standardization to allow portals between virtual worlds would be a big win. There's talk about this, but not much is happening, except in the Open Simulator ecosystem, where it works now.
One company, Ready Player Me, has an interesting concept - outsourced avatars. Avatars are created on the Ready Player Me site. Cooperating games have a module which renders such avatars, going out to Ready Player Me for the assets. This gives Ready Player Me a lock on avatar appearance and wearable items. For now, this is free. For now. "Wolf3D has the right to amend the Terms unilaterally." Some smaller games are using this, but the big studios have mostly stayed away. If that catches on, those guys have control over the air supply of the Metaverse.
[1] https://vcs.firestormviewer.org/phoenix-firestorm/files/tip/...
The commonly held belief was that if you want speed, you have to use UDP. But then the first thing people do is they re-implement TCP poorly at the application layer to get fragmentation, reliability, windowing or large datagrams.
OGP and "Assets Over HTTP" were introduced later and used TCP to carry some of the application protocol, but by the time they came around, UDP was wedged very far up in the application code and it was difficult to get it all out.
I haven't looked at the SL Viewer code in over a decade. Maybe it's better now.
Of course, TCP is a much better protocol for infrequent and request/response type interactions, so while I was at Linden we converted as much traffic as possible to TCP/XML. But a lot of the "realtime" stuff like object updates had to remain UDP, for empirical reasons.
Second Life didn't reimplement fragmentation -- messages just got truncated if they went over the MTU, lol.
TCP is not slow unless you encounter congestion or packet loss. But you have to deal with those problems if you're sending data over UDP.
When I was at Linden, we activated fast start and bic on ADITI when testing OGP and Assets over HTTP and things worked MUCH BETTER.
I think TCP works reasonably well today because the network is better and there is often very little packet loss, but as soon as you get some, TCP will optimise for throughput, like designed and at the expense of latency.
I have. It's a little better. Bulk file transfers over UDP are finally gone, moved to HTTP.
The commonly held belief was that if you want speed, you have to use UDP. But then the first thing people do is they re-implement TCP poorly at the application layer to get fragmentation, reliability, windowing or large datagrams.
Yes. The protocol Second Life uses has both unreliable and reliable UDP datagrams. "Reliable" means they have retransmits, on a fixed timer with a fixed retry count. Some get lost on overload, because the viewer's one-thread implementation discards if too many packets arrive in a frame time. In order delivery, reliability, no head of line blocking. - pick two. You can't have all three. TCP picks the first two. The Second Life protocol picks the second two. This results in occasional trouble where there really is an in-order requirement imposed by the way the state of the system changes.
Unreliable messages are common in game protocols. "Unreliable" means that lost messages should be superseded by the next one of the same type. The intent is to be consistent-eventually. Second Life is almost consistent-eventually, but not quite, which results in occasional viewer out of sync errors which make some objects in the world look wrong.
(Personally, I'd do this with one UDP path of unreliable messages, plus two TCP connections, one for high priority, low-traffic stuff, and one for lower-priority bigger stuff. Get rid of "reliable UDP". Only a very few message types, such as user mouse activity and movement updates, should be unreliable, because those can tolerate a lost message.)
The evolution was hardcoded -> message template -> "Liberación" which allows the protocol to tolerate unknown fields, and thus be future-compatible, much like Protobuf does.
Source: worked on the Liberación project.
Turns out both communities didn't have a perfect idea of what they should be doing.
Consider the web today. We have web pages that display some text and a few pictures. Yet viewing one requires downloading tens of megabytes of data, perhaps a hundred network transactions, a few gigabytes of RAM, a CPU or two running at upwards of 3GHz, a little help from a GPU, and several seconds of loading time. This is an awesome level of inefficiency. Today's web browsing uses at least an order of magnitude more resources than it should based on what appears on the screen.
We cannot afford that level of inefficiency in good quality 3D worlds. Just doing a good 3D world with every known optimization is at the upper limits of what available hardware can do. Watch the Unreal Engine 5 Matrix demo to see what's possible with the best known techniques. Then read up on what's done to put those meshes into Nanite format, an appallingly complex, insanely optimized, and very clever representation. One full of internal offset fields, so hostile content would be a huge problem.
That's the problem with adapting web technology to virtual worlds. If you make the system as general, portable, and robust as web services, it's too bulky, too slow, and too low-rez.
Which means you get all the bloat of re-shipping an OS (js libs), because the ecosystem as a whole would rather have diversity, speed of framework iteration, minimized developer time, and absolutely minimal client friction.
And by and large, those have been good choices! Look at how far the web's come in just the last 30 years.
But as you note, many of those goals are incompatible with game engines, which have seriously tight minimum performance requirements.
So what do you think are the most important priorities for a 3D world format? I'm assuming performance (rendering and network) comes first, but what gets optimized for after that?
We know how to build user-created virtual worlds, but we don't know how to make them fun. I could say more on this, but not right now.
Compare
https://www.crunchbase.com/organization/secondlife
https://www.crunchbase.com/organization/vrchat
They were well ahead of their time. Or even if they weren't, the market simply wasn't ready for them.
As an aside, I have a few anecdotes about Second Life:
- I remember IBM paying money for virtual real estate in second life. They set up a marketing presence, too. It seemed like such an IBM thing to do.
- My university was giving class credit to a grad student for building a virtual mock up of our campus in Second Life. It was a thesis project, I think. I remember thinking he was rather late to the game, as Second Life had already dropped in popularity versus MMOs such as WoW.
I wonder what those events would have been like today, with VRChat and the emergence of the "metaverse". Everything old is new again.
I was a super early adopter of things like virtual communities and MMOs, myself (and a huge Neal Stephenson fan to boot, so immediately recognized that they were using the Metaverse as their inspiration) and Second Life held very little attraction to me because of the performance. I tried it a few times, but there wasn't much immersion happening at the standard 1.5Mbps DSL speed, never mind modem.
If they'd come out at a point where the asset streaming worked smoothly for most customers, and the hype came after that--and especially if they'd come out after things like Dreams or even Little Big Planet or Mario Maker had prepped people for the idea of crowdsourced assets--I think they'd have absolutely smashed the market.
It needs about 50Mb/s and a GTX 1060 or better to work well. With gigabit networking and a GTX 3070, it's pretty good. Now once the viewer becomes multi-threaded...
https://en.bitcoin.it/wiki/VirWoX
Before the era of MtGox, you would buy Linden dollars for SecondLife, and then trade them for bitcoin on VirWoX.
SecondLife was well positioned to become a gateway into the world of cryptocurrency back in 2010, but instead they decided to start banning people doing anything Bitcoin related, and everyone had to move to MtGox.
If you want anything else you need to incorporate and enforce standards and practices right from the start, but then you'll be perceived as corporate and lame.
If you hold an event on your own land, you can block people, or require they be in a your group just to get in. You can prevent objects owned by others from entering. You can kick people out and send them to their home location. You can even use weapons they can't use on your property to apply large physical forces to their avatar and kick them up a few thousand meters. That's usually considered overkill. Property owners have more than enough tools to deal with problems. This is why Second Life needs only a tiny "governance" unit.
I have a virtual motorcycle shop in an adult area of Second Life and I'm not seeing annoyances like that. All the action is in nightclubs and people's own houses, just like real life.
What exactly are we warning people about?
This would've been funnier if it weren't 11 hours later.
If this is what you want then that's fine, but it doesn't mesh with "The Metaverse" as it is typically envisioned.
Calling people names says a lot more about you than it does about furries and "weirdos." I am happy you are in no way responsible for defining what the metaverse is or isn't.
They're people just like you. They also run the internet. [1]
[1] https://thespinoff.co.nz/irl/11-01-2022/who-runs-the-interne...
So are serial killers. If people can't judge you by what you say and do, it really limits the range of human interaction.
A common con in capitalism is to sell people on "free-speech" and "anti-corporate" agendas in your capitalist corporate product. I think most sensible people see through this, but there's a segment who just take to it pretty well and they tend to have marginalized and very questionable ideas about politics, race, religion, age of consent, boundaries, and justifiable terrorism.
Every "free speech" equivalent to the big players has failed and badly. Voat can't touch reddit. Parlour can't touch twitter, etc.
The real problem with these companies is that ultimately they want growth and profitability, thus when they try to expand out you now have the "Nazi Bar" problem, where the marginalized end up owning the establishment and chasing away everyone else.
Good moderation, protection of minorities, protection of LGBTQ people, protection of women, curtailing all hate speech, strict penalties, etc is the formula for success whether the tech libertarian crowd likes it or not. This is why your company has HR policies like this too. Once you let in the first Nazi into your bar, its over.
Vladislav Surkov doesn't work for Putin anymore, so the likelihood he'll be griefing Kasparov with flying penises is pretty low.
But you make a very valid point, some online experiences are probably better when restraint can be enforced.
Those pushing out past games in VR are brave and I'm thankful they are there. Maybe Meta will figure it out, but I'm skeptical.
http://www.metaverseink.com/blog/standards/virtual-world-int...
That message resonated well with Linden, who saw the "Open Metaverse" as a place where their existing customers building UGC assets could find new markets for their goods. Linden could then jump in and take a percentage for cash transactions or hosting or whatever other services people would pay for.
I honestly don't know how FB/Meta sees their market / business model. Selling ads in a virtual world? Content to justify selling head-mounted-hardware? But it does sort of seem like walled gardens are in their DNA.
On the other hand Roblox could really pull a coup by replicating this functionality natively.
Though Facebook also has some advantage because they are already maintaining a bunch of relationship information and they use that to bootstrap Messenger For Kids since one of the common patterns is parents become Facebook friends with clear identities and then they connect their children.