Tuesday, January 11, 2011
a platform for a compelling, immersive 3d virtual world
Friday, September 10, 2010
announcing project brookdale
this is a quick post to announce "project brookdale," an open source implementation of the Virtual World Region Agent Protocol (VWRAP) suite. VWRAP is a collection of specifications produced by the IETF's VWRAP Working Group. these specifications define interoperability for a "second life-like" virtual world. you can find more information about VWRAP on my VWRAP Page or the blog post "what's the virtual world region agent protocol?"
here's a quick list of things you'll find in brookdale:
- Dynamic Structured Data (DSD) and HTTP Transport Bindings
"DSD" is an evolution of the previous LLSD and LLIDL abstract type system and interface description language. the main difference between DSD and LLSD are minor changes in the XML serialization and a "layered" approach making it easier to use VWRAP messages with non-HTTP transports. more information about the motivations behind DSD can be found in a "abstract resource definitions vs. LLIDL". the internet draft draft-hamrick-vwrap-data-00 describes DSD in more detail.
one feature desired by implementers of previous OGP and early VWRAP work was clear guidance or agreement for how to handle content negotiation and caching of VWRAP messages carried over HTTP(S). draft-hamrick-vwrap-foundation-00 builds on the previous work and describes the use and interpretation of HTTP headers and status codes for content negotiation and caching.
project brookdale provides PHP and JavaScript classes and C functions implementing the interface semantics of DSD. it allows web and application developers to easily manipulate VWRAP requests, responses and events.
- a capability management facility and capability broker
web capabilities are an integral part of VWRAP. they allow distributed, trusted systems to grant fine grained access to sensitive resources without a global identity management system. an informal introduction to capabilities in VWRAP can be found in the earlier blog post, "VWRAP essentials : capabilities".
capabilities serve as aliases for RESTful VWRAP resources. composed of a cryptographically unguessable URL, they combine authorization to access a resource with that resource's address. the "capability broker" is the system component that maps a URL managed by a system to the object or database row it represents.
- a simple VWRAP event queue over long poll
the VWRAP event queue is a simple abstraction for unsolicited server to client communication. VWRAP currently reifies the event queue as a "long poll" over HTTP. it is hoped that future work will specify the use of WebSockets as a carrier for VWRAP events.
- simple connection manager with trust model support
trust between components in a VWRAP system is established by asserting identity using an X.509 client certificate. the VWRAP specifications do not require systems to trust any particular entity or certification authority, but they do require entities accept connections that use client side certs. in other words, a VWRAP system is free to ignore X.509 credentials from a client, but it must not disallow clients from sending them.
one ramification of the VWRAP trust model is it requires a "trusted" service to potentially present a destination-dependent certificate to a remote peer. an authentication service, for instance, may identify itself to an asset service by presenting it with a certificate issued by the asset service (or a trusted third party certification authority.) the brookdale connection manager maintains a mapping between destination URLs, client certificates and their related private keys.
- VWRAP Authentication (including OAuth support)
VWRAP defines several "native" authentication technqiues as well as the use of OAuth in protocol transactions. the brookdale authentication components manage the process of user authentication and the seed capability lifecycle.
- Client Application Launch Message processing
the VWRAP client application launch message (CALM) is an optional message sent to a web browser with specific details of which servers a client application (like the second life™ viewer) should contact to complete the login and rez process. intended to be used in conjunction with web authentication and authorization schemes like OpenID or OAuth, brookdale contains PHP, JavaScript and C functions to generate and process calm messages.
we're starting by publishing a few PHP and JavaScript files at the project brookdale page. these files are much more "middleware-ish" than they are "application-ish," but more will be coming in the next week.
- the release of the code corresponds with the latest VWRAP abstract type system proposal. more code will be released at the brookdale site as the newer VWRAP drafts are published this month.
Tuesday, July 27, 2010
pay for your lag?
Tuesday, April 13, 2010
VWRAP essentials : what's in the protocol?
but this isn't the case; there will be many features of Linden's virtual world that won't be found in VWRAP. in this post, we're going to look at the VWRAP charter, a recent presentation by josh bell [PDF], and talk about why it's not a big deal some things are left out. but let's start with what's in and what's out.
what follows is a list of features that are widely believed to be "in" and "out." this is not an authoritative list; the feature list will only be official when the internet drafts describing VWRAP become RFCs. there's still time to influence the VWRAP protocol suite; join the vwrap@ietf.org mailing list and make your voice heard.
what's in : authentication and trust
the first step a client application should take when dealing with the virtual world is to authenticate themselves. in VWRAP the authentication process begins with the presentation of credentials and ends with the client application receiving a "seed capability" or "seed cap." you can find more information about this process in the "VWRAP Trust Model and User Authentication" draft.
the seed cap is a randomly generated, difficult to guess web address (URL.) when queried it returns information about where to find other services (like how to place your avatar in a region or manipulate your inventory.)
some members of the VWRAP mailing list have suggested that a virtual world open to anyone without authentication would be a productive use of the protocol. to support this use case, the authenticator in an authentication message is optional. which is to say, the protocol does not require an authenticator like a hashed password to accompany a login message, but the virtual world you connect to might.
it's also been pointed out that using Transport Layer Security (TLS) client certificates, OAuth or even HTTP authentication may be useful in some situations. so it may be more accurate to call the "authentication" phase more of an "identification with optional authentication" phase.
no matter what technique you use to successfully authenticate your client application to your authentication service, after it's over, the client has a seed capability and the authentication service has enough information to identify the client's user.
what's in : inventory, assets and basic permissions
developers should expect a "streamlined" asset system. there is a requirement to maintain positive copy control on objects for users who want such control. but the existing inventory / asset system used in Second Life™ is starting to show it's age.
assets in VWRAP will be represented as LLSD maps, retrieved using resources defined using the LLIDL interface description language, most likely over HTTP. an "asset" in VWRAP is a collection of meta-data and data. the "data" of an asset is tightly constrained by the asset's type: cubes are represented by cube data; textures with texture data; etc. asset meta-data will identify the creator, describe base permissions, and include textual descriptions of the object. assets will use URLs to reference other assets, and not UUIDs. for example, when a cube references a texture for each of it's faces, it will use URLs to point to the textures.
the SimianGrid project, which was born out of the Cable Beach Asset Server, has announced they will be participating in the development of the VWRAP inventory and asset system. Linden Research has not made a public statement of support of VWRAP inventory, but is expected to participate in it's development.
it should also be mentioned that regions could have region-specific assets. ground textures, the shape of buildings, etc. all might be stored in an asset server associated with the region and not with the user who created them.
what's in : spatial, user-to-user and group text and voice
text chat in Second Life™'s legacy protocol is mildly broken. spatial chat has reasonable performance, but uses the same protocol to carry text chat as to carry friend requests, inventory offers and such-like. group chat performance is much worse. its mostly the result of an arcane architecture involving routing chat messages though a simulator on the way to the user's viewer. simplification and performance enhancement is expected in both spatial and group text chat.
VWRAP will define a service for spatial, user-to-user and group text chat. there has been significant interest in using XMPP (or other established IM protocols) to carry text chat. this is a natural fit for user-to-user and group text chat.
voice is expected to work in radically the same way, but using SIP and RTP protocols instead of XMPP.
what's in : basic agent information
this does not mean "profile info." basic information would likely include very basic presence information like "this user is logged in" or "you can find this agent in this region." basic agent information is there to support other protocol functions (like teleportation and retrieving avatar shape info.)
what's in : teleport and region crossing
teleportation has changed radically from the Second Life™ legacy protocol. the biggest change is the idea that an agent's presence information can potentially be stored in two locations. OGP experimented with the idea that agent-oriented services should be segregated from simulation-oriented services. so if you wanted to know what region a user's avatar was rezzed in, you would query a service associated with that user, not with the region.
remember, in the OGP world, there may be several organizations that operate simulation regions. querying each of them to ask, "is this avatar located here?" is sub-optimal.
so this means that BOTH agent oriented services and region oriented services need to know where the user's avatar is. VWRAP is proposing extending the OGP Draft 5 Teleport specification to manage the intricate dance of moving an agent from one region to another.
what's in : avatar shape information
so we mentioned above that an agent's avatar will be available through the basic agent info service. it's unclear now what format avatar meshes will take. the existing Linden legacy format could be used. as could MPEG-V's ADML (avatar data markup language.) or maybe both.
whatever the format, a user's avatar will be made available to both client applications and simulation services.
what's in : the scene graph and object updates
when your avatar is rezzed into a region, the user's client application may pull a description of the scene graph. that is, the list of 3d objects observable in a given field of view.
there are several ways to communicate this information. for instance, the simulator could package up references to all items in the avatar's field of view and send it to the client as one large chunk. or it could just start sending a stream of messages; one message per object.
in the past, object update messages have been carried over raw UDP. in the future, object updates may be carried over RTP or an HTTP event queue.
what's in : object presence and physics simulation
objects in the virtual world persist. once they're rezzed, they should stay where they are until acted upon by an external force. "object presence" services will allow a client to query objects rezzed in the world for information like internal state, an object control channel (if you have rights to control it), etc.
objects that are subject to physical simulation may be moved or rotated by the simulation software running on the region they're rezzed in.
one of the fundamental features of VWRAP is that physics simulation happens centrally. that is, we don't do co-simulation where each client simulates physical interactions and then check with each other to see if any clients are out of sync.
what's in : region adjacency information
Second Life™ regions are rectangles, 256 meters on a side in the x and y dimension and stretching to infinity along the z axis. Second Life™ itself is a collection of these regions arranged in a grid. VWRAP will likely NOT mandate this shape as the standard for virtual worlds.
proposals have surfaced that describe the virtual world with spherical, cylindrical and toroidal coordinates. But even flat "grids" may have non-rectangular regions in the future. to help client applications figure out which systems to query for object information, a service is needed to describe the shape and partitioning of the virtual world.
this is not a map service per se, but something more fundamental. the virtual world is composed of multiple regions being stitched together to give the illusion of a seamless multi-dimensional space.
what's in : object and avatar control
a virtual world would be pretty boring if you couldn't move or animate your avatar. VWRAP will provide a simple, extensible protocol for sending control information to your avatar. the same protocol may be used to control other objects; think of virtual vehicles you climb in and drive.
what's out?
what's being left out of VWRAP is at least as interesting as what's going in. here's a rundown of major Second Life™ features you won't find in the spec.
what's out : game script
do not look for linden dollars in the VWRAP drafts; you won't find them. or at least you won't find them now. Linden expressed a preference that the linden dollar interface not be made part of the official specification. there are multiple reasons why this could be the case. VWRAP is still a technology under construction; a design flaw in VWRAP could lead to a very real vulnerability costing thousands if not millions of dollars. Linden also charges a fee for linden dollar transactions. it is possible they want to maintain control of the specification for purely mercantile reasons; to prevent VWRAP from letting third parties to wedge into the linden dollar exchange business.
some OpenSim developers expressed a desire to prevent Linden from encroaching on their turf. typical of their position is the statement, "why should i let Linden take a cut of my OpenSim based business?" the fear is that if a linden dollar API was included in the specifications, it would be considered mandatory. many OpenSim grid operators would not accept a mandatory linden dollar economy.
this is one of the most obvious places where business interest meets standards development, and it will be interesting to see what happens in the future. maybe Linden will open up a private VWRAP-like API for trusted partners. if you're an OpenSim operator not focused on eCommerce, this may be something you would be interested in. maybe third parties like two fish / live gamer will produce an alternative specification? it will certainly be interesting to watch the market develop.
what's out : land ownership
before i start any rumors, i should say that Linden is NOT going to eliminate private land ownership on it's grid. land ownership is not part of the VWRAP protocol suite because it's expected that different virtual worlds will manage land ownership differently.
VWRAP clients are expected to be able to query a region for "information about the place my user's avatar is at right now" and get a URL to a human readable, HTML web page. if the region supports land ownership, the web page will list that info. but the land ownership schema from Second Life™ will not be forced on all VWRAP virtual worlds.
this may be an issue for viewer developers. different protocols for land management will require client developers to know how to query a region for information about if and how ownership is represented and how to present it to the user.
what's out : building
so far there's been no mention of building as a use case for VWRAP. this doesn't mean it won't be supported, but it may be that building is handled by way of the generic object and avatar control protocol.
what's out : media attached to prims
Second Life™ has had "parcel media" for a while and recently added the ability to add media to a prim face. to date, this use case hasn't been discussed at length in the VWRAP working group. this is not to say it's not important, but it may be that the participants are happy to develop this standard later; perhaps after seeing what happens with Linden's "media on a prim" feature.
what's out : detailed avatar and user profiles
Second Life™ users are likely familiar with the standard user profile. imagine the ability to extend your profile to include information YOU think is important. this is what we're hoping to achieve by moving the profile information out of the core protocol and rebuild it as a simple web application. in the future, expect seeing a HTML page with protocol information instead of a fixed "floater" window in your favorite viewer. about the only thing the core protocol will specify is how to find the URL to the HTML profile page.
it sounds scary. but trust me; it'll be better.
why the sky not falling
some Second Life™ users may have an uneasy feeling, hearing that important features like game script, building and profile management WON'T be in the VWRAP protocol.
don't panic.
just because a feature is not in the VWRAP specification, it doesn't mean that feature will disappear from Second Life™ or any other virtual world. what it means is that Linden and the OpenSim developers may diverge on how they want to implement those features.
the lack of a feature in the specification means only that the participants could not find consensus on the feature's functionality. VWRAP will be complete enough to provide a rich experience. by agreeing to core functionality, it frees us to experiment with solutions for other, high-margin features.
it will, however, make client application coder's lives a little more complicated. where Second Life™ and OpenSimulator diverge, viewer developers will have to know how to work with both systems. this isn't as bad as it might seem; Linden's stock viewer already uses well known techniques to cope with protocol divergence. but more on that later...
in conclusion, let me encourage readers to subscribe to the vwrap mailing list where these specifications are being discussed. what to leave in and what to take out will certainly be the subject of continuing discussions. if you don't speak up now, you don't get to complain later.
Monday, April 12, 2010
VWRAP essentials : what does it mean to be "Second Lifelike" ?
now it's time to start recruiting people to help with the effort. the documents we produce will require a number of participants documenting use cases, writing documents, creating sample code implementations, checking the technical contents of draft documents and reviewing the group's output to make sure it just plain makes sense.
but every time i ask someone to help out, they want to read our background documents. and this is where i start getting kind of embarrassed. we don't have nearly as many as we need. so i'm writing a series of blog posts about it to give an informal and informational introduction to VWRAP, the Virtual World Region Agent Protocol.
if you're new to VWRAP, you may want to read the "what's VWRAP.". for more detailed info, you may want to read the "VWRAP : Introduction and Goals" document. the current draft is 32 pages and is written to be as precise as possible. because it was written with "correctness" in mind, it can be a bit wordy at times. so my first couple blog posts will be high level discussions about what we're trying to accomplish.
several people have used the term "Second Lifelike" to describe the type of virtual world we're hoping to create. but that's a little bit of a fail; it's bad form to describe something new by saying "hey, it's just like this other thing, only a little different." so maybe the first question to ask is...
what does it mean to be second lifelike ?
if you've visited Second Life(tm) as a user and then visited World of Warcraft(tm) or EVE Online(tm), you know they're each pretty different experiences. WoW is mostly about fighting. sure, you can be social in some corners of the world, but what you're paying for is the ability to reign down hurt on other players. EVE Online is about dueling spaceships while Second Life is about capturing the experience of burning man by socializing and building interesting bits of art. or maybe its about business and education; we're still trying to figure that one out. but it's clearly more open ended than other popular massively multi-participant systems.
but for software developers and virtual world deployers, it's probably a good idea to have a better description of the protocol than "oh, it's sorta like Second Life(tm) or OpenSim." in the "intro and goals" document referenced above, there are three primary features of VWRAP virtual worlds:
- the virtual world exists independently of the participants,
- avatars have a single, unique presence in a single virtual world, and,
- the virtual world contains persistent objects.
the virtual world exists independently of the participants
some readers will remember VRML (Virtual Reality Markup Language.) it was a text based language for describing virtual world scene graphs. there was an interactivity model for VRML, so you could get objects to do things by interacting with the virtual environment. but for the most part, tools that used VRML rendered scene graphs on local systems and did not interact with remote systems or users.
so you loaded a virtual experience from local storage or from the web, rendered the scene, twirled around to look at the objects and could optionally interact with this "pocket universe."
some of the tools seemed advanced (even for today) and you could mock up some relatively interesting scenes. but, at the end of the day, there were no standards for how to invite other participants into your virtual creation.
this is NOT what VWRAP is all about. VWRAP is about multiple individuals accessing the same scene graph hosted on a public server somewhere and everyone sees the same thing when they log in. VWRAP worlds are inherently shared experiences, not pocket universes on someone's desktop system.
avatars have a single, unique presence in a single virtual world
like the reified world, the virtual world is a social space. the locus of social activity in the virtual world is the user's avatar; each avatar representing a single user. with due respect to even the best "real world" multi-taskers, you can still only be in one place at a time. so it is with avatars in the virtual world.
it also means that for every different virtual world, there is only one of you. by default, you can interact with everyone else in the world and they can interact with you.
the virtual world contains persistent objects
objects in the virtual world, like virtual worlds themselves, persist beyond a user's presence in the virtual world. if a user created a desk and chairs in a VWRAP virtual world, it would continue to exist until explicitly deleted. so the user could log in, create an object in a particular location in the virtual world and then log out. when another user logs in and travels to the same location, they would see that object.
the "intro and goals" draft referenced above describes these characteristics in more detail, but the text here describes the basics of VWRAP virtual worlds: there's only one of you, there's stuff in the world and the world doesn't disappear when you turn your back.
Wednesday, April 7, 2010
notes on the history of the VWRAP working group
VWRAP recent history begins with an interoperability test sponsored by IBM and Linden Lab in the summer of 2008. using ideas that had been discussed in the Second Life(tm) architecture working group, several users were able to teleport their avatars from Linden-owned to systems owned by third parties.
there were significant limitations however. avatar appearance was inconsistent across regions and cross-grid access to inventory was more or less nonexistent. but as a first step, it showed that cross-grid teleports were possible.
inside the lab, we knew the UDP-based legacy SL protocol had some serious scalability problems; we wanted to move more services to LLSD over HTTP. most of our work serialized LLSD messages as XML documents and sent them over the internet. as part of our "wrapping up" process, we figured we should register the MIME types we used for LLSD. this was the motivation for the original "LLSD Abstract Type System" draft published in early 2009.
at around this same time, the bidirectional http effort inside the IETF was heating up and mark lentczner was asked to submit a draft and a presentation on "Reverse HTTP" which was based on previous work at the lab with donovan preston.
originally intended to be small, stand-alone drafts with a limited scope, we began the task of publishing an informational RFC for the purpose of registering the LLSD MIME types.
starting a virtual worlds working group in the IETF was not a new idea. the SWMP mailing list had been setup in 2007 to discuss the idea. it eventually failed to result in a working group for reasons that are too complicated to discuss here. there was considerable resistance to the idea, but around this time, david lavine at IBM started asking "what's next with interop?" david and suzy deffeyes had invested a fair amount of effort in the 2008 interop trail, so it was a reasonable question.
the more we talked about it, the more it seemed like a good idea. in early 2009, mark lentczner and i lobbied inside the lab for the idea while david and suzy pushed the idea inside IBM. the IETF does not officially recognize corporate members, people who show up at IETF meetings represent themselves. but if a working group was ever to be formed, but none of us felt comfortable pushing the idea without the support of our management.
we eventually produced an argument for interop good enough to garner support inside IBM and linden, so in january of 2009, david lavine of IBM and i approached the IETF informally with a proposal to sponsor the work of developing a virtual worlds interoperability prototype. at the time, we had hoped to develop a protocol that would work for a broad range of virtual experiences.
IETF process calls for a "Birds of a Feather" or BoF meeting to be held to see if there is sufficient interest to justify creation of an official working group. on march 24th, 2009 the "MMOX BoF" was held at the 74th IETF meeting in San Francisco, CA.
eventually settled on the name "VWRAP: Virtual Worlds Region Agent Protocol."
on march 23rd, 2010, the working group held it's first official face to face meeting in Anaheim, California. it was a mixed reality event with approximately 15-20 people being present in incarnate reality and 50 avatars attending in the virtual world.
the work continues on the vwrap mailing list, and anyone with an interest in virtual worlds interoperability is encouraged to participate.