<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jhurliman</id>
		<title>OpenSimulator - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jhurliman"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Special:Contributions/Jhurliman"/>
		<updated>2026-05-06T10:14:13Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/wiki/Hypergrid_Protocol</id>
		<title>Hypergrid Protocol</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Hypergrid_Protocol"/>
				<updated>2010-08-07T23:13:12Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Overview=&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
&lt;br /&gt;
==Grid Service==&lt;br /&gt;
&lt;br /&gt;
* Provides globally accessible authentication of local user accounts&lt;br /&gt;
* Requests authentication of incoming users from remote grid services&lt;br /&gt;
* Provides virtual world services such as inventory and asset access to remote grids that local users are visiting&lt;br /&gt;
* Negotiates arrivals and departures of users to remote grids&lt;br /&gt;
&lt;br /&gt;
==Simulator==&lt;br /&gt;
&lt;br /&gt;
* Initiates the teleport process&lt;br /&gt;
* Transfers a session token to the target simulator to complete the teleport process&lt;br /&gt;
&lt;br /&gt;
==Viewer==&lt;br /&gt;
&lt;br /&gt;
* Speaks to the current and target simulators using LLUDP and capabilities&lt;br /&gt;
&lt;br /&gt;
=Protocol Flow=&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Hypergrid_Protocol</id>
		<title>Hypergrid Protocol</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Hypergrid_Protocol"/>
				<updated>2010-08-07T23:05:16Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: New page: Placeholder for protocol documentation of HyperGrid 1.5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Placeholder for protocol documentation of HyperGrid 1.5&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Webinterface</id>
		<title>Webinterface</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Webinterface"/>
				<updated>2010-04-02T21:13:51Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: Updated SimianGrid info and added SimianGridFrontend&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
= PHP =&lt;br /&gt;
== Web interfaces ==&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/opensimwi/ OpenSim Web Interface (Redux)] - This is a [http://www.php.net PHP] Web Interface for OpenSim (Open Simulator Project), it allows grid citizens to create User Accounts to access the grid. Grid Owners can also manage all users for the grid. Very light CMS system included. - Should be useable on live grid.&lt;br /&gt;
&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/wixtd/ WiXTD] - PHP OpenSimulator-interface, combined with python xmlrpc-daemon for service-control. The project is abondoned, and replaced by HWIOS.&lt;br /&gt;
&lt;br /&gt;
* [http://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?XoopenSim XoopenSim]&lt;br /&gt;
&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/flexcp/ FlexCp] A fast, simple, secure, and easily-extendable php5 web control panel for OpenSim grids. Use ADODB, QuickForms2, and Savant3 to make development and modifications simple (improves response to security concerns).&lt;br /&gt;
&lt;br /&gt;
* [http://groups.drupal.org/d4os D4os] is a set of [http://drupal.org Drupal] modules to control a grid. (actually in alpha stage using OpenSim 0.6.8)&lt;br /&gt;
&lt;br /&gt;
* [http://www.adamfrisby.com/blog/2009/12/introducing-gridmix/ GridMix] This project is not already available&lt;br /&gt;
&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/webgrid/ WebGrid] is a PHP-based Web Interface for the grid servers built on code from OpenSimWI and the DeepGrid backend. Webgrid is based on the CodeIgniter PHP MVC framework.&lt;br /&gt;
&lt;br /&gt;
* [http://openmetaverse.googlecode.com/ SimianGridFrontend] is the PHP-based web interface that accompanies SimianGrid. SimianGridFrontend is based on the CodeIgniter PHP MVC framework.&lt;br /&gt;
&lt;br /&gt;
== Web Services ==&lt;br /&gt;
* [http://code.google.com/p/openmetaverse/wiki/SimianGrid SimianGrid] is a scalable, extensible, light-weight, open source persistence layer for MMOs and virtual worlds, written in PHP. Also provides the frontend mentioned above and WebDAV access to inventory.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/apps/trac/unga/wiki/WikiStart unga] is both an UGAIM (User, Grid, Assets, Inventory, Messaging) server system and a backend for configuring that servers. Also, its modular architecture allows to create (or plug) specialized modules created in standard PHP.&lt;br /&gt;
&lt;br /&gt;
== Optional modules ==&lt;br /&gt;
* [http://code.google.com/p/flotsam/wiki/XmlRpcGroups XmlRpcGroups] is a set of xmlrpc methods to manage groups in opensim. See [http://opensimulator.org/wiki/Groups this page] for how to configure it.&lt;br /&gt;
&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/ossearch ossearch] is a set of xmlrpc methods to manage search, events and classifieds. See [http://opensimulator.org/wiki/OpenSimSearch this page] for how to configure it.&lt;br /&gt;
&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/osprofile osprofile] is a set of xmlrpc methods to manage persistent profile.&lt;br /&gt;
&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/webassets/ webassets] is a script to render assets pictures to display on a website.&lt;br /&gt;
&lt;br /&gt;
= Python =&lt;br /&gt;
== Web interfaces ==&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/hwios/ Hwios]&lt;br /&gt;
&lt;br /&gt;
== Web Services ==&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/osservices OSServices] is a set of xmlrpc methods to control the servers.&lt;br /&gt;
&lt;br /&gt;
== Optional modules ==&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/osmaps OsMaps] is a tilemap service, capable of rendering and displaying a world map through openlayers on a web page.&lt;br /&gt;
&lt;br /&gt;
= Proposals for Advanced Web Interface =&lt;br /&gt;
Follow-on versions of the API should have advanced user management functions like:&lt;br /&gt;
* Require Login on/off&lt;br /&gt;
* Grant User Rights (build, fly, run script, teleport, etc.)&lt;br /&gt;
* Create Group / Remove&lt;br /&gt;
* Add User to Group / Remove&lt;br /&gt;
&lt;br /&gt;
== Basic API ==&lt;br /&gt;
I suggest we create a new API, that's clean and structured. It should be nothing more than a php class-library that can perform the most basic database functions. Functions to think about are:&lt;br /&gt;
* Show Userinfo&lt;br /&gt;
* Create User&lt;br /&gt;
* Remove User&lt;br /&gt;
* Show Regions&lt;br /&gt;
* Max Region-revision cache (blobsize get too big otherwise)&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Talk:Definitions</id>
		<title>Talk:Definitions</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Talk:Definitions"/>
				<updated>2009-10-15T21:42:34Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We need an overhaul of term definitions in OpenSim before we can clean up the ScenePresence vs. ClientManager mess. Here's a starting point, feel free to revise/append/discuss:&lt;br /&gt;
&lt;br /&gt;
==Definitions==&lt;br /&gt;
&lt;br /&gt;
===Entity===&lt;br /&gt;
An entity in OpenSim is &amp;quot;something that exists in the 3D simulation&amp;quot;. It has a position in the world, a rotation, velocity, etc. It is responsible for providing a physical proxy that can be handed off to a physics engine. It might break every rule and be invisible, static, and have no physical proxy but it must still implement all of these concepts.&lt;br /&gt;
&lt;br /&gt;
===Prim===&lt;br /&gt;
A prim is one type of entity that is very common in OpenSim. It has roots in the Second Life(tm) world, and is a procedurally generated basic shape that has an efficient network representation. It implements the basic concepts required to be an entity, plus many additional concepts that are specific to the LLUDP protocol. It also implements some extra generic concepts in OpenSim, such as acting as a script container.&lt;br /&gt;
&lt;br /&gt;
===Mesh===&lt;br /&gt;
Although mesh support was originally introduced as a proof of concept in OpenSim by the realXtend team, there are many different types of mesh representations and file formats. This blanket term refers to any type of entity that stores geometry data instead of procedural instructions to generate geometry. Depending on the implementation, a mesh may or may not implement additional interfaces such as the scripting container interface or LLUDP concepts.&lt;br /&gt;
&lt;br /&gt;
===Scene Presence===&lt;br /&gt;
A scene presence is another type of entity (sibling of prim and mesh) that represents a [mostly anthropomorphic] character. Scene presences interact with scenes and their entities by subscribing to and raising events. Given the foundations in the LL system, the collection of interaction events pertaining to scene presences is very large. We would want to divide this collection in smaller sub-sets that specific implementations of scene presences may choose to implement.&lt;br /&gt;
&lt;br /&gt;
(Note: I can tolerate calling scene presences &amp;quot;avatars&amp;quot;, even though I don't like the word avatar. We can pick one in the code, but use the two terms &amp;quot;scene presence&amp;quot; and &amp;quot;avatar&amp;quot; interchangeably)&lt;br /&gt;
&lt;br /&gt;
===Agent===&lt;br /&gt;
An agent is OpenSim's internal representation of a client that connects to the simulation via a network. This may be an end user that has a Second Life(tm) viewer and wants to connect, a search engine that wants to connect to the simulator and scrape information, a proxy that is managing hundreds of connections, an external engine that is sending and receiving data to control the simulation, or anything else that needs to establish a connection to the simulator. Agents are distinguished by the protocol they use to communicate, such as a LindenUDP client vs. an MXP client. &lt;br /&gt;
&lt;br /&gt;
===Client===&lt;br /&gt;
Any external program that connects to OpenSim servers via a network. It's not part of OpenSim.&lt;br /&gt;
&lt;br /&gt;
===User===&lt;br /&gt;
A person that uses a client program to connect to OpenSim servers. Users may have accounts, and may have storage provided by OpenSim-related services. Or they may not. User accounts and storage may be available to users by means other than the client that they use to connect to OpenSim worlds. For example, an inventory service provider may serve inventory manipulation over a regular web browser. Etc.&lt;br /&gt;
&lt;br /&gt;
===Relations between these concepts===&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;normal&amp;quot; chain: a ''user'' uses the LL ''client'' program to connect to an OpenSim server; inside OpenSim, this connection is represented by an ''agent'' which is associated with a ''scene presence/avatar''; the ''agent'' acts on behalf of the ''user'' in order for the OpenSim server to access the user's services.&lt;br /&gt;
* An agent may or may not be associated with a scene presence. Some agents may simply not have scene presences at all (e.g. a search engine http bot, or even sophisticated agents that send back graphical information but are &amp;quot;invisible&amp;quot;).&lt;br /&gt;
* A Scene Presence may or may not be associated with an agent. Some scene presences may simply not have agents behind them at all (e.g. server-side characters).&lt;br /&gt;
* As a consequence, we can also have the following chain: a ''user'' uses XPTO ''client'' to connect to an OpenSim server; inside OpenSim this connection is represented by an XPTO ''agent'' which does not associate with any ''scene presence/avatar''; using this XPTO client, the user does not need to provide an identification, so the user is effectively browsing the world invisibly and anonymously. Some OpenSim worlds may allow these agents, while others may not.&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Talk:Definitions</id>
		<title>Talk:Definitions</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Talk:Definitions"/>
				<updated>2009-10-15T18:03:28Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: New page: We need an overhaul of term definitions in OpenSim before we can clean up the ScenePresence vs. ClientManager mess. Here's a starting point, feel free to revise/append/discuss:  ===Entity=...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We need an overhaul of term definitions in OpenSim before we can clean up the ScenePresence vs. ClientManager mess. Here's a starting point, feel free to revise/append/discuss:&lt;br /&gt;
&lt;br /&gt;
===Entity===&lt;br /&gt;
An entity in OpenSim is &amp;quot;something that exists in the 3D simulation&amp;quot;. It has a position in the world, a rotation, velocity, etc. It is responsible for providing a physical proxy that can be handed off to a physics engine. It might break every rule and be invisible, static, and have no physical proxy but it must still implement all of these concepts.&lt;br /&gt;
&lt;br /&gt;
===Prim===&lt;br /&gt;
A prim is one type of entity that is very common in OpenSim. It has roots in the Second Life(tm) world, and is a procedurally generated basic shape that has an efficient network representation. It implements the basic concepts required to be an entity, plus many additional concepts that are specific to the LLUDP protocol. It also implements some extra generic concepts in OpenSim, such as acting as a script container.&lt;br /&gt;
&lt;br /&gt;
===Mesh===&lt;br /&gt;
Although mesh support was originally introduced as a proof of concept in OpenSim by the realXtend team, there are many different types of mesh representations and file formats. This blanket term refers to any type of entity that stores geometry data instead of procedural instructions to generate geometry. Depending on the implementation, a mesh may or may not implement additional interfaces such as the scripting container interface or LLUDP concepts.&lt;br /&gt;
&lt;br /&gt;
===Avatar===&lt;br /&gt;
An avatar is a specially identified entity that acts just like any other entity (takes up space in 3D, provides a physical proxy, etc). In addition to their 3D presence, avatars have many concepts attached to them such as owning inventory, having groups and friends, and belonging to access control lists that grant or deny them permissions throughout the world.&lt;br /&gt;
&lt;br /&gt;
===Client===&lt;br /&gt;
A client is something that connects to the simulation. This may be an end user that has a Second Life(tm) viewer and wants to connect as an avatar, a search engine that wants to connect to the simulator and scrape information, a proxy that is managing hundreds of avatar connections, an external engine that is sending and receiving data to control the simulation, or anything else that needs to establish a connection to the simulator. Clients are distinguished by the protocol they use to communicate, such as a LindenUDP client vs. an MXP client. OpenSim is moving away from the concept of monolithic client interfaces to many smaller client interfaces, so one implementation may implement everything used in the LLUDP protocol while another may only implement chat and IM. These are event driven interfaces. For example, if an entity moves in the scene, any clients that are listening for entity movements will be notified and are responsible for converting the movement event into a network event.&lt;br /&gt;
&lt;br /&gt;
===Endpoint===&lt;br /&gt;
Although clients can have very different implementations, one requirement is that each client can be identified by a single remote endpoint (IPEndPoint). This allows indexing and generic operations across clients regardless of their implementation.&lt;br /&gt;
&lt;br /&gt;
===Viewer===&lt;br /&gt;
The viewer concept plays a very minor role in the OpenSim architecture. Some client implementations may use the concept of viewer software that is responsible for the client-side of the networking, but viewers do not exist outside of individual client implementations. For example, the LindenUDP implementation may choose to define a viewer concept and the MXP implementation may also choose to define its own viewer concept, but a remote scripting engine client implementation would have no such concept.&lt;br /&gt;
&lt;br /&gt;
===Presence===&lt;br /&gt;
HELP: What is a presence? I can't think of a good definition. Entities are 3D simulated concepts, avatars have all of the avatar-specific concepts, clients process network events, presence seems to be a hack to merge all of these together. Should we try to remove the concept of a presence altogether? This needs more thought.&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/New_Region_Modules</id>
		<title>New Region Modules</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/New_Region_Modules"/>
				<updated>2009-06-01T21:02:20Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(This is a first draft-version and can change at any time until complete&lt;br /&gt;
implementation. Feel free to comment, either on the Discussion page or on the&lt;br /&gt;
opensim-dev mailing list)&lt;br /&gt;
&lt;br /&gt;
= Why =&lt;br /&gt;
&lt;br /&gt;
The current RegionModule system's API is in part inconsistent and doesn't&lt;br /&gt;
really support region-restarts and adding/removing regions on the fly during&lt;br /&gt;
a region-server run.&lt;br /&gt;
E.g., the API says ''Initialise'' is called for every region (in every&lt;br /&gt;
region-module), after that, ''PostInitialise'' is called for every region-module.&lt;br /&gt;
When a new region is added, what should happen?&lt;br /&gt;
* Don't call ''Initialise'': Then the region-module isn't initialised for that region, which leads to missing functionality.&lt;br /&gt;
* Call ''Initialise'': Then ''PostInitialise'' was called too early. Actually, ''PostInitialise'' can not be called at all, because you can add a region after that anytime.&lt;br /&gt;
&lt;br /&gt;
What should happen if a region is restarted? What should happen if a region&lt;br /&gt;
is removed?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= What =&lt;br /&gt;
&lt;br /&gt;
The new region-module system is based on three interfaces: ''ISharedRegionModule'',&lt;br /&gt;
''INonSharedRegionModule'' and ''IRegionModuleBase'', which is the base interface for&lt;br /&gt;
the other two.&lt;br /&gt;
&lt;br /&gt;
  public interface IRegionModuleBase&lt;br /&gt;
  {&lt;br /&gt;
      string Name { get; }&lt;br /&gt;
      void Initialise(IConfigSource source);&lt;br /&gt;
      void Close();&lt;br /&gt;
      void AddRegion(Scene scene);&lt;br /&gt;
      void RegionLoaded(Scene scene);&lt;br /&gt;
      void RemoveRegion(Scene scene);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public interface ISharedRegionModule : IRegionModuleBase&lt;br /&gt;
  {&lt;br /&gt;
      void PostInitialise();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public interface INonSharedRegionModule : IRegionModuleBase&lt;br /&gt;
  {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
* Loading the region-modules' classes happens via ''Mono.Addins'' on server-start. &lt;br /&gt;
* Instantiating the region-modules happens...&lt;br /&gt;
** for ''ISharedRegionModule''s once after loading (on server start)&lt;br /&gt;
** for ''INonSharedRegionModule''s after creation of the ''Scene'' object.&lt;br /&gt;
* You can cleanup when a region is removed.&lt;br /&gt;
* You can cleanup before the server shuts down.&lt;br /&gt;
&lt;br /&gt;
;Note:&lt;br /&gt;
:A ''PostInitialise'' for a ''INonSharedRegionModule'' doesn't make a lot of sense, as we don't have a certain point from which on we won't call ''Initialise'' on a ''INonSharedRegionModule'' again. Every time a new region is added (on restart, too), a new instance is created and ''Initialise'' is called on that instance, so the intended semantics of ''PostInitialise'' will never apply.&lt;br /&gt;
&lt;br /&gt;
= Details =&lt;br /&gt;
&lt;br /&gt;
== Creating a region module assembly ==&lt;br /&gt;
&lt;br /&gt;
You will need to add several attributes to your assembly and the extension classes in the assembly for Mono.Addins to recognize the .dll file as containing valid addins. Put the following anywhere in your library:&lt;br /&gt;
&lt;br /&gt;
 [assembly: Addin(&amp;quot;MyAddin&amp;quot;, &amp;quot;0.1&amp;quot;)]&lt;br /&gt;
 [assembly: AddinDependency(&amp;quot;OpenSim&amp;quot;, &amp;quot;0.5&amp;quot;)]&lt;br /&gt;
&lt;br /&gt;
And for each extension class use the attribute:&lt;br /&gt;
&lt;br /&gt;
 [Extension(Path=&amp;quot;/OpenSim/RegionModules&amp;quot;,NodeName=&amp;quot;RegionModule&amp;quot;)]&lt;br /&gt;
&lt;br /&gt;
== Start of region-server ==&lt;br /&gt;
&lt;br /&gt;
* Region-server starts, the classes of all region-modules are loaded in no particular order&lt;br /&gt;
** For every ''ISharedRegionModule'', one instance is created and ''Initialise'' is called.&lt;br /&gt;
** For every ''ISharedRegionModule'' instance, ''PostInitialise'' is called.&lt;br /&gt;
* The ''Scene''s are instantiated, one by one:&lt;br /&gt;
** For every ''Scene''&lt;br /&gt;
*** for every ''INonSharedRegionModule'', a new instance is created and ''Initialise'' called.&lt;br /&gt;
*** for every ''INonSharedRegionModule'' and ''ISharedRegionModule'', ''AddRegion(scene)'' is called. The modules are associated to the ''Scene'' (for deletion on remove)&lt;br /&gt;
*** for every ''INonSharedRegionModule'' and ''ISharedRegionModule'', ''RegionLoaded(scene)'' is called (you can access the methods in other modules of that scene via ''scene.RequestModuleInterface&amp;lt;ModuleInterfaceType&amp;gt;()'' here).&lt;br /&gt;
&lt;br /&gt;
== Adding a region ==&lt;br /&gt;
* for every ''INonSharedRegionModule'', a new instance is created and ''Initialise'' called.&lt;br /&gt;
* for every ''INonSharedRegionModule'' and ''ISharedRegionModule'', ''AddRegion(scene)'' is called. The modules are associated to the ''Scene'' (for deletion on remove)&lt;br /&gt;
* for every ''INonSharedRegionModule'' and ''ISharedRegionModule'', ''RegionLoaded(scene)'' is called.&lt;br /&gt;
&lt;br /&gt;
== Removing a region ==&lt;br /&gt;
&lt;br /&gt;
* For every ''INonSharedRegionModule'' of the scene and every ''ISharedRegionModule'', ''RemoveRegion(scene)'' is called&lt;br /&gt;
** For the ''INonSharedRegionModule''s, ''Close'' is called&lt;br /&gt;
* Every module reference of the scene is removed from the scene. No references should be left after that; the ''INonSharedRegionModule''s could be garbage collected now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Restarting a region ==&lt;br /&gt;
&lt;br /&gt;
Restarting happens as a sequence of [[#Removing_a_region|&amp;quot;Removing a region&amp;quot;]], followed by a&lt;br /&gt;
[[#Adding_a_region|&amp;quot;Adding a region&amp;quot;]]. As usual, avatars that are in that region when it restarts are kicked.&lt;br /&gt;
&lt;br /&gt;
== Shutdown of the region-server ==&lt;br /&gt;
&lt;br /&gt;
* For every scene, perform the [[#Removing_a_region|&amp;quot;Removing a region&amp;quot;]] step:&lt;br /&gt;
** ''RemoveRegion'' is called for all scenes and modules, ''Close'' is called for all the ''INonSharedRegionModule''s&lt;br /&gt;
* ''Close'' is called for all the ''ISharedRegionModule''. The ''ISharedRegionModule'' could now be garbage-collected.&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&lt;br /&gt;
* ''RemoveRegion''/''Close'' is for cleaning up. Things you added in ''Initialise''/''AddRegion'' should be removed in ''Close''/''RemoveRegion'' again, respectively.&lt;br /&gt;
* The modules are loaded via ''Mono.Addins''. This means, you can build your own assemblies with region modules, and by putting them into the ''&amp;lt;opensim&amp;gt;/bin'' folder, they will be loaded automatically. Make sure the correct attributes are set for the addin to be loaded correctly&lt;br /&gt;
: clear enough? Or should we add a spelled out example? [[User:HomerHorwitz|HomerHorwitz]] 18:21, 12 May 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
= TODOs =&lt;br /&gt;
* Configuration about which modules should be loaded.&lt;br /&gt;
: we already have the &amp;lt;tt&amp;gt;enabled = true/false&amp;lt;/tt&amp;gt; OpenSim.ini config option for most region modules --- [[User:DrScofield|DrScofield]] 09:53, 26 January 2009 (UTC)&lt;br /&gt;
: which is a horribly ad hoc solution - we really do need a better way of controlling this imho --- [[User:Justincc|Justincc]] 20:26, 28 January 2009 (UTC)&lt;br /&gt;
: agree with Justin.  A module shouldn't be responsible for turning itself off, it should never get loaded in the first place --[[User:SeanDague|SeanDague]] 21:51, 28 January 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:Cablebeach-auth-login-01.png</id>
		<title>File:Cablebeach-auth-login-01.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:Cablebeach-auth-login-01.png"/>
				<updated>2009-05-20T00:17:47Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-05-14T06:17:14Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: Major update, cut the X.509 information out (will be a separate proposal)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{proposal}}&lt;br /&gt;
&lt;br /&gt;
=Cable Beach Proposal=&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, virtual world administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual worlds modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Cable Beach is a service based architecture. Every category of functionality in a virtual world is designated as a service. The services can be organized in any number of different ways and spread across different processes, different servers, or different trust domains. In fact, several services can collectively provide a rich experience with complex interactions while still operating completely independently of one another.&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of the Cable Beach architecture divided up into trust domains. Everything operating inside of a trust domain has some implicit level of trust for all of the other members of the trust domain, although that level of trust will vary depending on the purpose of the trust domain and the policy put in place for that domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:Cablebeach-trustoverview.png]]&lt;br /&gt;
&lt;br /&gt;
===World Domain===&lt;br /&gt;
&lt;br /&gt;
All of the services responsible for simulating a virtual world fall under the umbrella of the world domain. The ultimate authority of this domain is the world service, which acts as both the gatekeeper for incoming clients and oversees all of the simulation nodes in the world. All clients wishing to connect to this world should connect through the world server, which will enforce global policy such as access lists. The trust requirements of the world domain are not defined by the architecture, but rather the policies of each world. In other words, the level of trust services in the world domain have for each other is entirely dependent on the world policies. Some worlds might choose a very tight controlled policy to facilitate the safety of online transactions, while other worlds might choose a very open membership policy. The mechanisms and policies used to establish trust between services inside the world domain is out of the scope of this architecture.&lt;br /&gt;
&lt;br /&gt;
===Identity===&lt;br /&gt;
&lt;br /&gt;
Identity is not tied to a particular world. Instead, identity is treated as an independent service, allowing any client to attempt to login to any world. Which logins will actually be allowed are defined by policy of the world service. The closed world of fantasygameworld.com might provide its own identity server at users.fantasygameworld.com and only accept logins from identities at that domain. Another world might default to allowing logins from anywhere, but blacklist specific domains such as virtualspammers.com. The external identity service abstracts the security requirements for worlds away from the architectural design and allows a wide variety of policy decisions for clients to be enforced.&lt;br /&gt;
&lt;br /&gt;
In the Cable Beach architecture, identity is more than just a URL identifier. A list of attributes are attached to each identity that provide the metadata necessary to simulate the presence of an identity in a virtual world. Attribute types are defined by URLs, similar to OpenID Attribute Exchange. Each attribute stores LLSD; the format of the LLSD is specific to the attribute. As an example, an identity might have first name and last name attributes of the string type. Some attributes are references to the URL of a service, such as inventory or messaging. Some attributes will naturally be closely tied to the identity itself, such as the avatar name. Other attributes may be specific to a particular world, such as a high score or a list of completed quests. World services may request any list of attributes from an identity service, as well as supplementing the list with additional avatar attributes stored in the world service.&lt;br /&gt;
&lt;br /&gt;
===Services===&lt;br /&gt;
&lt;br /&gt;
In addition to data attributes such as avatar name, some attributes store service URLs. When a client contacts a world service to log in, the world service compiles a list of required services and service capabilities that will be used during the client session in this world. While the communication between the world service and trusted services outside of the scope of this architecture, communication between the world service and untrusted services is well defined to ensure interoperability. The OAuth protocol is used to allow third party services to independently confirm the client identity and then confirm the list of required capabilities with the client. Once authentication and authorization have been confirmed, the world service uses the OAuth authorization token to retrieve temporary capability URLs for each requested capability.&lt;br /&gt;
&lt;br /&gt;
Any number of services can be attached to an identity. Some services such as inventory might be very common across many worlds, while world-specific services such as a trophy server might apply to a very small subset of worlds or even a single world. For example, fantasygameworld.com may associate a trophy service with all incoming clients to track progress and achievements in that world. Inventory may be restricted to items only found in fantasygameworld.com by ignoring external inventory services and associating an internal inventory service with each identity. Future revisions may support multiple services for the same service type, such as accessing an internal and external inventory service simultaneously.&lt;br /&gt;
&lt;br /&gt;
==Prototype==&lt;br /&gt;
&lt;br /&gt;
The prototype implementation of Cable Beach is designed in a modular way to support centralized and decentralized concepts simultaneously. For example, the WorldServer can also act as an identity service to provide a login path for XML-RPC requests (using username and password combination) from the current Second Life client. Client authentication can be skipped in the InventoryServer, making the assumption that the WorldServer and InventoryServer exist in the same trust domain and only the WorldServer has access to the InventoryServer OAuth endpoint. This gives existing virtual worlds the immediate benefit of a more flexible service architecture while remaining backward compatible with the current login flow. Client modifications are being developed to allow the existing Second Life viewer to participate in completely decentralized grids.&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-30T17:46:09Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{proposal}}&lt;br /&gt;
&lt;br /&gt;
=Cable Beach Proposal=&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, virtual world administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual worlds modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One sensible way to look at the Cable Beach architecture is by breaking it up into trust domains. Everything operating inside of a trust domain has some implicit level of trust for all of the other members of the trust domain, although that level of trust will vary depending on the purpose of the trust domain and the policy put in place for that domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:Cablebeach-trustoverview.png]]&lt;br /&gt;
&lt;br /&gt;
===World Domain===&lt;br /&gt;
&lt;br /&gt;
All of the services responsible for simulating a virtual world fall under the umbrella of the world domain. The ultimate authority of this domain is the world server, which acts as both the gatekeeper for incoming clients and oversees all of the simulation nodes in the world. The actual definition of trust is not defined by the architecture, but rather the policies of each world. In other words, the level of trust each simulator in the world has for other simulators in the world is entirely dependent on the world policies. Some worlds might choose a very tight controlled policy to facilitate the safety of online transactions, while other worlds might choose a very open membership policy. To create the notion of a trust domain across many different servers (potentially hosted by many different administrators), the world server acts as an X.509 root certificate authority. Certificates are issued to each simulator to grant world membership. These certificates can be later revoked; perhaps a member of the world has not paid their monthly dues, or has broken world policy. All clients wishing to connect to this world should connect through the world server, which will enforce global policy such as access lists. &lt;br /&gt;
&lt;br /&gt;
===Identity===&lt;br /&gt;
&lt;br /&gt;
Identity is not tied to a particular world. Instead, federated identity allows any client to attempt to login to any world. Which logins will actually be allowed are defined by policy on the world server. The closed world of fantasygameworld.com might provide its own identity server at users.fantasygameworld.com and only accept logins from identities at that domain. Another world might default to allowing logins from anywhere, but blacklist specific domains such as virtualspammers.com. This abstracts the identity and security requirements for worlds away from the architectural design and allows a wide variety of policy decisions for clients to be enforced.&lt;br /&gt;
&lt;br /&gt;
In the Cable Beach architecture, identity is more than just a URL identifier. A list of attributes are attached to each identity that provide the metadata necessary to simulate the presence of an identity in a virtual world. Attribute types are defined by URLs, just as they are defined in OpenID Attribute Exchange. Each attribute stores LLSD; the format of the LLSD is specific to the attribute. As an example, an identity might have first name and last name attributes of the string type. Some attributes are references to the URL of a service, such as inventory or messaging.&lt;br /&gt;
&lt;br /&gt;
When a client contacts a world server to log in, the world server contacts the identity server for the given identity. OpenID maps nicely into this process to provide proof that the client owns the supplied identity. Once authentication has completed, the identity server must contact each service the requested identity links to and request one or more capabilities on behalf of the identity. The capability is a temporary, difficult to guess URL that can be given to clients or other services to provide some level of access to a service. The confirmation of identity ownership, list of attributes for the identity, and list of services and capabilities are all returned to the world server where the login requested initiated from.&lt;br /&gt;
&lt;br /&gt;
===Other Services===&lt;br /&gt;
&lt;br /&gt;
Any number of services can be attached to an identity. Some services such as inventory might be very common across many worlds, while world-specific services such as a trophy server might apply to a very small subset of worlds or even a single world. While the first point of association with services is from identities on an identity service, world servers may also associate services with identities. For example, fantasygameworld.com may associate a trophy service with all incoming clients to track progress and achievements in that world. Inventory may be restricted to items only found in fantasygameworld.com by ignoring external inventory services and associating an internal inventory service with each identity. Future revisions may support multiple services for the same service type, such as accessing an internal and external inventory service simultaneously.&lt;br /&gt;
&lt;br /&gt;
==Roadmap==&lt;br /&gt;
&lt;br /&gt;
A roadmap has been designed to provide a migration from the current OpenSim implementation of the Second Life® protocol to a decentralized service protocol. The first step will provide some of the services in a disaggregated virtual world and will improve the security of existing models such as OSGrid's decentralized hosting with centralized trust. The second step will remove any assumptions about tightly coupled services and present a true decentralized virtual world service platform. Step three will remove any leftover baggage by making service authentication and authorization client-centric, and potentially enable new use cases such as multiple inventory servers or content migration.&lt;br /&gt;
&lt;br /&gt;
===Step 1: Login With Existing LL Client===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_3.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the world server, since identity servers are no longer tightly coupled to worlds.&lt;br /&gt;
# The login is forwarded to a known identity server along with a list of requested services and the names of requested capabilities for each service. Note that because the client is providing a world server with sensitive information (md5 hash of the agent password) and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, including a list of URLs for various services. The identity server will try to match up requested service URLs with service URLs it knows about for the requested identity. For each match, a request is sent to the service URL to request the capabilities that the world server asked for. In the example above, only an inventory server is contacted. This request is trusted as coming from the given identity because it originates from the identity server for that identity.&lt;br /&gt;
# Each service checks permissions for the requested capabilities against the given identity and returns temporary capability URLs back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the world server with information about the agent, the list of known services, and capabilities that were granted for each service.&lt;br /&gt;
# The world server determines which simulator the client will start in. This might be the closest available location to a requested destination, the agent's home location in this world, or the default starting location for the world.&lt;br /&gt;
# A request for the inventory skeleton is sent from the world server to the inventory server. This is required because the XML-RPC login response for the client expects a list of all inventory folders for the avatar. The request is sent to the temporary capability for get_inventory_skeleton, so no additional security checks need to be done when the request arrives at the inventory server.&lt;br /&gt;
# A list of folders for the given identity is sent back to the world server.&lt;br /&gt;
# The world server contacts the starting simulator to prepare a login. (Contact information for the simulator is received when the simulator first comes online and registers with the world server.) Information about the agent, the list of services for the agent, and the capabilities for each service are given to the simulator. In this model, the simulator will need all of the capabilities since it will act on behalf of the client. In future models, the simulator might only receive a subset of capabilities that it can be trusted with while the client uses the rest directly. The world server uses its certificate as a client certificate so the simulator can authenticate the request. The simulator checks the presented client certificate and confirms it as being signed by the world server.&lt;br /&gt;
# Information about the simulator (IP address, port, UDP circuit code) is sent back to the grid server along with a success response.&lt;br /&gt;
# Agent information, inventory information, and the simulator information are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
===Step 2: OpenID Login With web_login_key===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_3.png]]&lt;br /&gt;
&lt;br /&gt;
This is the same login flow as the first diagram, but the client passes an OpenID identity URL to the grid server instead of login credentials. An OpenID login process is initiated with the identity server where the client supplies login credentials directly to the identity server. This removes the restriction that the grid server and identity server must be in the same trust domain. Once the OpenID identity has been confirmed, an authenticate_openid message (similar to the authenticate_ll message) is sent from the world server to the identity server and the login continues as in the first diagram.&lt;br /&gt;
&lt;br /&gt;
===Step 3: Client-Centric World===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Several common virtual world operations are presented below. Teleporting between two regions in the same trust domain or between domains that have shared trust, teleporting between two untrusted domains, content publishing from digital content creation tools, and content migration between untrusted domains. [TODO]&lt;br /&gt;
&lt;br /&gt;
===Trusted Teleport===&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_OpenID_Client_Login_3.png</id>
		<title>File:CableBeach OpenID Client Login 3.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_OpenID_Client_Login_3.png"/>
				<updated>2009-04-30T17:44:13Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_3.png</id>
		<title>File:CableBeach LL Client Login 3.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_3.png"/>
				<updated>2009-04-30T17:43:55Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: uploaded a new version of &amp;quot;Image:CableBeach LL Client Login 3.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_3.png</id>
		<title>File:CableBeach LL Client Login 3.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_3.png"/>
				<updated>2009-04-30T17:27:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: uploaded a new version of &amp;quot;Image:CableBeach LL Client Login 3.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-30T17:26:25Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: Brought the documentation up to speed with the latest diagrams&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{proposal}}&lt;br /&gt;
&lt;br /&gt;
=Cable Beach Proposal=&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, virtual world administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual worlds modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One sensible way to look at the Cable Beach architecture is by breaking it up into trust domains. Everything operating inside of a trust domain has some implicit level of trust for all of the other members of the trust domain, although that level of trust will vary depending on the purpose of the trust domain and the policy put in place for that domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:Cablebeach-trustoverview.png]]&lt;br /&gt;
&lt;br /&gt;
===World Domain===&lt;br /&gt;
&lt;br /&gt;
All of the services responsible for simulating a virtual world fall under the umbrella of the world domain. The ultimate authority of this domain is the world server, which acts as both the gatekeeper for incoming clients and oversees all of the simulation nodes in the world. The actual definition of trust is not defined by the architecture, but rather the policies of each world. In other words, the level of trust each simulator in the world has for other simulators in the world is entirely dependent on the world policies. Some worlds might choose a very tight controlled policy to facilitate the safety of online transactions, while other worlds might choose a very open membership policy. To create the notion of a trust domain across many different servers (potentially hosted by many different administrators), the world server acts as an X.509 root certificate authority. Certificates are issued to each simulator to grant world membership. These certificates can be later revoked; perhaps a member of the world has not paid their monthly dues, or has broken world policy. All clients wishing to connect to this world should connect through the world server, which will enforce global policy such as access lists. &lt;br /&gt;
&lt;br /&gt;
===Identity===&lt;br /&gt;
&lt;br /&gt;
Identity is not tied to a particular world. Instead, federated identity allows any client to attempt to login to any world. Which logins will actually be allowed are defined by policy on the world server. The closed world of fantasygameworld.com might provide its own identity server at users.fantasygameworld.com and only accept logins from identities at that domain. Another world might default to allowing logins from anywhere, but blacklist specific domains such as virtualspammers.com. This abstracts the identity and security requirements for worlds away from the architectural design and allows a wide variety of policy decisions for clients to be enforced.&lt;br /&gt;
&lt;br /&gt;
In the Cable Beach architecture, identity is more than just a URL identifier. A list of attributes are attached to each identity that provide the metadata necessary to simulate the presence of an identity in a virtual world. Attribute types are defined by URLs, just as they are defined in OpenID Attribute Exchange. Each attribute stores LLSD; the format of the LLSD is specific to the attribute. As an example, an identity might have first name and last name attributes of the string type. Some attributes are references to the URL of a service, such as inventory or messaging.&lt;br /&gt;
&lt;br /&gt;
When a client contacts a world server to log in, the world server contacts the identity server for the given identity. OpenID maps nicely into this process to provide proof that the client owns the supplied identity. Once authentication has completed, the identity server must contact each service the requested identity links to and request one or more capabilities on behalf of the identity. The capability is a temporary, difficult to guess URL that can be given to clients or other services to provide some level of access to a service. The confirmation of identity ownership, list of attributes for the identity, and list of services and capabilities are all returned to the world server where the login requested initiated from.&lt;br /&gt;
&lt;br /&gt;
===Other Services===&lt;br /&gt;
&lt;br /&gt;
Any number of services can be attached to an identity. Some services such as inventory might be very common across many worlds, while world-specific services such as a trophy server might apply to a very small subset of worlds or even a single world. While the first point of association with services is from identities on an identity service, world servers may also associate services with identities. For example, fantasygameworld.com may associate a trophy service with all incoming clients to track progress and achievements in that world. Inventory may be restricted to items only found in fantasygameworld.com by ignoring external inventory services and associating an internal inventory service with each identity. Future revisions may support multiple services for the same service type, such as accessing an internal and external inventory service simultaneously.&lt;br /&gt;
&lt;br /&gt;
==Roadmap==&lt;br /&gt;
&lt;br /&gt;
A roadmap has been designed to provide a migration from the current OpenSim implementation of the Second Life® protocol to a decentralized service protocol. The first step will provide some of the services in a disaggregated virtual world and will improve the security of existing models such as OSGrid's decentralized hosting with centralized trust. The second step will remove any assumptions about tightly coupled services and present a true decentralized virtual world service platform. Step three will remove any leftover baggage by making service authentication and authorization client-centric, and potentially enable new use cases such as multiple inventory servers or content migration.&lt;br /&gt;
&lt;br /&gt;
===Step 1: Login With Existing LL Client===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_3.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the world server, since identity servers are no longer tightly coupled to worlds.&lt;br /&gt;
# The login is forwarded to a known identity server along with a list of requested services and the names of requested capabilities for each service. Note that because the client is providing a world server with sensitive information (md5 hash of the agent password) and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, including a list of URLs for various services. The identity server will try to match up requested service URLs with service URLs it knows about for the requested identity. For each match, a request is sent to the service URL to request the capabilities that the world server asked for. In the example above, only an inventory server is contacted. This request is trusted as coming from the given identity because it originates from the identity server for that identity.&lt;br /&gt;
# Each service checks permissions for the requested capabilities against the given identity and returns temporary capability URLs back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the world server with information about the agent, the list of known services, and capabilities that were granted for each service.&lt;br /&gt;
# The world server determines which simulator the client will start in. This might be the closest available location to a requested destination, the agent's home location in this world, or the default starting location for the world.&lt;br /&gt;
# A request for the inventory skeleton is sent from the world server to the inventory server. This is required because the XML-RPC login response for the client expects a list of all inventory folders for the avatar. The request is sent to the temporary capability for get_inventory_skeleton, so no additional security checks need to be done when the request arrives at the inventory server.&lt;br /&gt;
# A list of folders for the given identity is sent back to the world server.&lt;br /&gt;
# The world server contacts the starting simulator to prepare a login. (Contact information for the simulator is received when the simulator first comes online and registers with the world server.) Information about the agent, the list of services for the agent, and the capabilities for each service are given to the simulator. In this model, the simulator will need all of the capabilities since it will act on behalf of the client. In future models, the simulator might only receive a subset of capabilities that it can be trusted with while the client uses the rest directly. The world server uses its certificate as a client certificate so the simulator can authenticate the request. The simulator checks the presented client certificate and confirms it as being signed by the world server.&lt;br /&gt;
# Information about the simulator (IP address, port, UDP circuit code) is sent back to the grid server along with a success response.&lt;br /&gt;
# Agent information, inventory information, and the simulator information are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
===Step 2: OpenID Login With web_login_key===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
This is the same login flow as the first diagram, but the client passes an OpenID identity URL to the grid server instead of login credentials. An OpenID login process is initiated with the identity server where the client supplies login credentials directly to the identity server. This removes the restriction that the grid server and identity server must be in the same trust domain. The list of services and tokens are carried in the OpenID response, defined as a new namespace of data.&lt;br /&gt;
&lt;br /&gt;
===Step 3: Client-Centric World===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Several common virtual world operations are presented below. Teleporting between two regions in the same trust domain or between domains that have shared trust, teleporting between two untrusted domains, content publishing from digital content creation tools, and content migration between untrusted domains. [TODO]&lt;br /&gt;
&lt;br /&gt;
===Trusted Teleport===&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_3.png</id>
		<title>File:CableBeach LL Client Login 3.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_3.png"/>
				<updated>2009-04-30T17:01:00Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Freeswitch_Module</id>
		<title>Freeswitch Module</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Freeswitch_Module"/>
				<updated>2009-04-24T23:36:00Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The FreeSwitch module enables voice in opensim with no changes required to the SL or Hippo clients (must be over 1.22 for SL and 0.5 for Hippo)&lt;br /&gt;
&lt;br /&gt;
== FreeSwitch Install == &lt;br /&gt;
&lt;br /&gt;
Follow the instructions [http://wiki.freeswitch.org/wiki/Installation_Guide here] on how to compile from source. We need to enable two specific modules.&lt;br /&gt;
'''&lt;br /&gt;
please ensure you compile from the freeswitch trunk for now until we can post a minimum version number (there are known issues with older versions)'''&lt;br /&gt;
&lt;br /&gt;
When you get to the part in the instructions where it says  &amp;quot;'''Edit modules.conf so that it will build the modules you desire.'''&amp;quot; edit the modules.conf file and uncomment out the entries for xml_curl and the siren14 codec&lt;br /&gt;
&lt;br /&gt;
    codecs/mod_siren&lt;br /&gt;
    and&lt;br /&gt;
    xml_int/mod_xml_curl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* You can also use this [http://madhawa.com/?p=10 guide] for setting it up in a quick way -- [[User:Fly-man-|Fly-man-]]&lt;br /&gt;
&lt;br /&gt;
==FreeSwitch Config==&lt;br /&gt;
&lt;br /&gt;
Install and compile Freeswitch, making sure you enable the xml_curl module and also the siren14 codec.&lt;br /&gt;
&lt;br /&gt;
=== enable mod_xml_curl ===&lt;br /&gt;
&lt;br /&gt;
Next, do not forget to activate mod_xml_curl in /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml. mod_xml_curl is disabled by default on fresh install.&lt;br /&gt;
&lt;br /&gt;
uncomment the lines...&lt;br /&gt;
    &amp;lt;load module=&amp;quot;mod_xml_curl&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;load module=&amp;quot;mod_siren&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
are uncommented&lt;br /&gt;
&lt;br /&gt;
=== configure mod_xml_curl === &lt;br /&gt;
&lt;br /&gt;
the xml_curl module configuration should point to an opensim region that has the freeswitch voice module enabled (voice also needs to be enabled in the estate setting for all regions)&lt;br /&gt;
&lt;br /&gt;
example xml_curl.conf.xml  found in /usr/local/freeswitch/conf/autoload_configs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;configuration name=&amp;quot;xml_curl.conf&amp;quot; description=&amp;quot;cURL XML Gateway&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;bindings&amp;gt;&lt;br /&gt;
        &amp;lt;binding name=&amp;quot;example&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;param name=&amp;quot;gateway-url&amp;quot; value=&amp;quot;http://youropensimregion:9000/api/freeswitch-config&amp;quot; bindings=&amp;quot;directory&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;param name=&amp;quot;disable-100-continue&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/binding&amp;gt;&lt;br /&gt;
        &amp;lt;binding name=&amp;quot;local&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;param name=&amp;quot;gateway-url&amp;quot; value=&amp;quot;http://youropensimregion:9000/api/freeswitch-config&amp;quot; bindings=&amp;quot;dialplan&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;param name=&amp;quot;disable-100-continue&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/binding&amp;gt;&lt;br /&gt;
  &amp;lt;/bindings&amp;gt;&lt;br /&gt;
  &amp;lt;/configuration&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The /usr/local/freeswitch/conf/vars.xml requires modification to enable the siren14 codec&lt;br /&gt;
&lt;br /&gt;
search within vars.xml for the global_codec_prefs and change the line to read&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;X-PRE-PROCESS cmd=&amp;quot;set&amp;quot; data=&amp;quot;global_codec_prefs=G7221@32000h,G722,PCMU,PCMA,GSM&amp;quot;/&amp;gt; &lt;br /&gt;
&lt;br /&gt;
G7221@32000h is the siren14 codec&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OpenSim Config==&lt;br /&gt;
&lt;br /&gt;
Add the following section to OpenSim.ini. You will also need to enable voice in the regions estate settings. Make sure the freeswitch server is started BEFORE bringing the region up.&lt;br /&gt;
&lt;br /&gt;
    [FreeSwitchVoice]&lt;br /&gt;
    enabled = true&lt;br /&gt;
    ;FreeSwitch server is going to contact us and ask us all&lt;br /&gt;
    ;sorts of things.&lt;br /&gt;
    freeswitch_server_user = freeswitch&lt;br /&gt;
    freeswitch_server_pass = password&lt;br /&gt;
    freeswitch_api_prefix = /api&lt;br /&gt;
    ;The  IP address of your opensim voice region&lt;br /&gt;
    freeswitch_service_server = youropensimexternalIP&lt;br /&gt;
    ;the port your region is running on&lt;br /&gt;
    freeswitch_service_port = 9000 &lt;br /&gt;
    ;your freewitch IP address&lt;br /&gt;
    freeswitch_realm = 192.168.0.2&lt;br /&gt;
    freeswitch_sip_proxy = 192.168.0.2:5060&lt;br /&gt;
    freeswitch_attempt_stun = false&lt;br /&gt;
    freeswitch_stun_server = 192.168.0.2&lt;br /&gt;
    freeswitch_echo_server = 192.168.0.2&lt;br /&gt;
    freeswitch_echo_port = 50505&lt;br /&gt;
    freeswitch_well_known_ip = 192.168.0.2&lt;br /&gt;
    freeswitch_default_timeout = 5000&lt;br /&gt;
    freeswitch_subscribe_retry = 120&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-17T18:54:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{proposal}}&lt;br /&gt;
&lt;br /&gt;
=Cable Beach Proposal=&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, grid administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual worlds modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One sensible way to look at the Cable Beach architecture is by breaking it up into trust domains. Everything operating inside of a trust domain has some implicit level of trust for all of the other members of the trust domain, although that level of trust will vary depending on the purpose of the trust domain and the policy put in place for that domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:Cablebeach-trustoverview.png]]&lt;br /&gt;
&lt;br /&gt;
===World Domain===&lt;br /&gt;
&lt;br /&gt;
All of the services responsible for simulating a virtual world fall under the umbrella of the world domain. The ultimate authority of this domain is the world server, which acts as both the gatekeeper for incoming clients and oversees all of the simulation nodes in the world. The actual definition of trust is not defined by the architecture, but rather the policies of each world. In other words, the level of trust each simulator in the world has for other simulators in the world is entirely dependent on the world policies. Some worlds might choose a very tight controlled policy to facilitate the safety of online transactions, while other worlds might choose a very open membership policy. To create the notion of a trust domain across many different servers (potentially hosted by many different administrators), the world server acts as an X.509 root certificate authority. Certificates are issued to each simulator to grant world membership. These certificates can be later revoked; perhaps a member of the world has not paid their monthly dues, or has broken world policy. All clients wishing to connect to this world should connect through the world server, which will enforce global policy such as access lists. &lt;br /&gt;
&lt;br /&gt;
===Identity===&lt;br /&gt;
&lt;br /&gt;
Identity is not tied to a particular world. Instead, federated identity allows any client to attempt to login to any world. Which logins will actually be allowed are defined by policy on the world server. The closed world of fantasygameworld.com might provide its own identity server at users.fantasygameworld.com and only accept logins from identities at that domain. Another world might default to allowing logins from anywhere, but blacklist specific domains such as virtualspammers.com. This abstracts the identity and security requirements for worlds away from the architectural design and allows a wide variety of policy decisions for clients to be enforced.&lt;br /&gt;
&lt;br /&gt;
In the Cable Beach architecture, identity is more than just a URL identifier. A list of attributes are attached to each identity that provide the metadata necessary to simulate the presence of an identity in a virtual world. Attribute types are defined by URLs, just as they are defined in OpenID Attribute Exchange. Each attribute stores LLSD; the format of the LLSD is specific to the attribute. As an example, an identity might have first name and last name attributes of the string type. Some attributes are references to the URL of a service, such as inventory or messaging.&lt;br /&gt;
&lt;br /&gt;
When a client contacts a world server to log in, the world server contacts the identity server for the given identity. OpenID maps nicely into this process to provide proof that the client owns the supplied identity. Once authentication has completed, the identity server must contact each service the requested identity links to and request one or more capabilities on behalf of the identity. The capability is a temporary, difficult to guess URL that can be given to clients or other services to provide some level of access to a service. The confirmation of identity ownership, list of attributes for the identity, and list of services and capabilities are all returned to the world server where the login requested initiated from.&lt;br /&gt;
&lt;br /&gt;
===Other Services===&lt;br /&gt;
&lt;br /&gt;
Any number of services can be attached to an identity. Some services such as inventory might be very common across many worlds, while world-specific services such as a trophy server might apply to a very small subset of worlds or even a single world. While the first point of association with services is from identities on an identity service, world servers may also associate services with identities. For example, fantasygameworld.com may associate a trophy service with all incoming clients to track progress and achievements in that world. Inventory may be restricted to items only found in fantasygameworld.com by ignoring external inventory services and associating an internal inventory service with each identity. Future revisions may support multiple services for the same service type, such as accessing an internal and external inventory service simultaneously.&lt;br /&gt;
&lt;br /&gt;
==Roadmap==&lt;br /&gt;
&lt;br /&gt;
A roadmap has been designed to provide a migration from the current OpenSim implementation of the Second Life® protocol to a decentralized service protocol. The first step will provide some of the services in a disaggregated grid and will improve the security of existing models such as OSGrid's decentralized hosting with centralized trust. The second step will remove any assumptions about tightly coupled services and present a true decentralized virtual world service platform. Step three will remove any leftover baggage by making service authentication and authorization client-centric, and potentially enable new use cases such as multiple inventory servers or content migration.&lt;br /&gt;
&lt;br /&gt;
===Step 1: Login With Existing LL Client===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request. The simulator checks the presented client certificate and confirms it as being signed by the grid server.&lt;br /&gt;
# The simulator contacts any services that need to be contacted before login completes. In this case, inventory information is requested from the inventory server.&lt;br /&gt;
# The inventory server checks the given access token and confirms that it is valid and not expired.&lt;br /&gt;
# The inventory server returns information about the agent's inventory.&lt;br /&gt;
# Information about the simulator (IP address, port, UDP circuit code) and the inventory information is sent back to the grid server along with a success response.&lt;br /&gt;
# Agent information, inventory information, and the simulator information are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
===Step 2: OpenID Login With web_login_key===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
This is the same login flow as the first diagram, but the client passes an OpenID identity URL to the grid server instead of login credentials. An OpenID login process is initiated with the identity server where the client supplies login credentials directly to the identity server. This removes the restriction that the grid server and identity server must be in the same trust domain. The list of services and tokens are carried in the OpenID response, defined as a new namespace of data.&lt;br /&gt;
&lt;br /&gt;
===Step 3: Client-Centric World===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Client_Centric_Login_3.png]]&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Several common virtual world operations are presented below. Teleporting between two regions in the same trust domain or between domains that have shared trust, teleporting between two untrusted domains, content publishing from digital content creation tools, and content migration between untrusted domains. [TODO]&lt;br /&gt;
&lt;br /&gt;
===Trusted Teleport===&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-17T09:00:16Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{proposal}}&lt;br /&gt;
&lt;br /&gt;
=Cable Beach Proposal=&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, grid administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual worlds modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One sensible way to look at the Cable Beach architecture is by breaking it up into trust domains. Everything operating inside of a trust domain has some implicit level of trust for all of the other members of the trust domain, although that level of trust will vary depending on the purpose of the trust domain and the policy put in place for that domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:Cablebeach-trustoverview.png]]&lt;br /&gt;
&lt;br /&gt;
===World Domain===&lt;br /&gt;
&lt;br /&gt;
All of the services responsible for simulating a virtual world fall under the umbrella of the world domain. The ultimate authority of this domain is the world server, which acts as both the gatekeeper for incoming clients and oversees all of the simulation nodes in the world. To create the notion of a trust domain across many different servers (potentially hosted by many different administrators), the world server acts as an X.509 root certificate authority. Certificates are issued to each simulator to grant world membership. These certificates can be later revoked; perhaps a member of the world has not paid their monthly dues, or has broken world policy. All clients wishing to connect to this world should connect through the world server, which will enforce global policy such as access lists. &lt;br /&gt;
&lt;br /&gt;
===Identity===&lt;br /&gt;
&lt;br /&gt;
Identity is not tied to a particular world. Instead, federated identity allows any client to attempt to login to any world. Which logins will actually be allowed are defined by policy on the world server. The closed world of fantasygameworld.com might provide its own identity server at users.fantasygameworld.com and only accept logins from identities at that domain. Another world might default to allowing logins from anywhere, but blacklist specific domains such as virtualspammers.com. This abstracts the identity and security requirements for worlds away from the architectural design and allows a wide variety of policy decisions for clients to be enforced.&lt;br /&gt;
&lt;br /&gt;
In the Cable Beach architecture, identity is more than just a URL identifier. A list of attributes are attached to each identity that provide the metadata necessary to simulate the presence of an identity in a virtual world. Attribute types are defined by URLs, just as they are defined in OpenID Attribute Exchange. Each attribute stores LLSD; the format of the LLSD is specific to the attribute. As an example, an identity might have first name and last name attributes of the string type. Some attributes are references to the URL of a service, such as inventory or messaging.&lt;br /&gt;
&lt;br /&gt;
When a client contacts a world server to log in, the world server contacts the identity server for the given identity. OpenID maps nicely into this process to provide proof that the client owns the supplied identity. Once authentication has completed, the identity server must contact each service the requested identity links to and request one or more capabilities on behalf of the identity. The capability is a temporary, difficult to guess URL that can be given to clients or other services to provide some level of access to a service. The confirmation of identity ownership, list of attributes for the identity, and list of services and capabilities are all returned to the world server where the login requested initiated from.&lt;br /&gt;
&lt;br /&gt;
===Other Services===&lt;br /&gt;
&lt;br /&gt;
Any number of services can be attached to an identity. Some services such as inventory might be very common across many worlds, while world-specific services such as a trophy server might apply to a very small subset of worlds or even a single world. While the first point of association with services is from identities on an identity service, world servers may also associate services with identities. For example, fantasygameworld.com may associate a trophy service with all incoming clients to track progress and achievements in that world. Inventory may be restricted to items only found in fantasygameworld.com by ignoring external inventory services and associating an internal inventory service with each identity. Future revisions may support multiple services for the same service type, such as accessing an internal and external inventory service simultaneously.&lt;br /&gt;
&lt;br /&gt;
==Roadmap==&lt;br /&gt;
&lt;br /&gt;
A roadmap has been designed to provide a migration from the current OpenSim implementation of the Second Life® protocol to a decentralized service protocol. The first step will provide some of the services in a disaggregated grid and will improve the security of existing models such as OSGrid's decentralized hosting with centralized trust. The second step will remove any assumptions about tightly coupled services and present a true decentralized virtual world service platform. Step three will remove any leftover baggage by making service authentication and authorization client-centric, and potentially enable new use cases such as multiple inventory servers or content migration.&lt;br /&gt;
&lt;br /&gt;
===Step 1: Login With Existing LL Client===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request. The simulator checks the presented client certificate and confirms it as being signed by the grid server.&lt;br /&gt;
# The simulator contacts any services that need to be contacted before login completes. In this case, inventory information is requested from the inventory server.&lt;br /&gt;
# The inventory server checks the given access token and confirms that it is valid and not expired.&lt;br /&gt;
# The inventory server returns information about the agent's inventory.&lt;br /&gt;
# Information about the simulator (IP address, port, UDP circuit code) and the inventory information is sent back to the grid server along with a success response.&lt;br /&gt;
# Agent information, inventory information, and the simulator information are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
===Step 2: OpenID Login With web_login_key===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
This is the same login flow as the first diagram, but the client passes an OpenID identity URL to the grid server instead of login credentials. An OpenID login process is initiated with the identity server where the client supplies login credentials directly to the identity server. This removes the restriction that the grid server and identity server must be in the same trust domain. The list of services and tokens are carried in the OpenID response, defined as a new namespace of data.&lt;br /&gt;
&lt;br /&gt;
===Step 3: Client-Centric World===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Client_Centric_Login_3.png]]&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Several common virtual world operations are presented below. Teleporting between two regions in the same trust domain or between domains that have shared trust, teleporting between two untrusted domains, content publishing from digital content creation tools, and content migration between untrusted domains. [TODO]&lt;br /&gt;
&lt;br /&gt;
===Trusted Teleport===&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-16T23:34:01Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{proposal}}&lt;br /&gt;
&lt;br /&gt;
=Cable Beach Proposal=&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, grid administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual world grids modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One sensible way to look at the Cable Beach architecture is by breaking it up into trust domains. Everything operating inside of a trust domain has some implicit level of trust for all of the other members of the trust domain, although that level of trust will vary depending on the purpose of the trust domain and the policy put in place for that domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:Cablebeach-trustoverview.png]]&lt;br /&gt;
&lt;br /&gt;
===World Domain===&lt;br /&gt;
&lt;br /&gt;
All of the services responsible for simulating a virtual world fall under the umbrella of the world domain. The ultimate authority of this domain is the world server, which acts as both the gatekeeper for incoming clients and oversees all of the simulation nodes in the world. To create the notion of a trust domain across many different servers (potentially hosted by many different administrators), the world server acts as an X.509 root certificate authority. Certificates are issued to each simulator to grant world membership. These certificates can be later revoked; perhaps a member of the world has not paid their monthly dues, or has broken world policy. All clients wishing to connect to this world should connect through the world server, which will enforce global policy such as access lists. &lt;br /&gt;
&lt;br /&gt;
===Identity===&lt;br /&gt;
&lt;br /&gt;
Identity is not tied to a particular world. Instead, federated identity allows any client to attempt to login to any world. Which logins will actually be allowed are defined by policy on the world server. The closed world of fantasygameworld.com might provide its own identity server at users.fantasygameworld.com and only accept logins from identities at that domain. Another world might default to allowing logins from anywhere, but blacklist specific domains such as virtualspammers.com. This abstracts the identity and security requirements for worlds away from the architectural design and allows a wide variety of policy decisions for clients to be enforced.&lt;br /&gt;
&lt;br /&gt;
In the Cable Beach architecture, identity is more than just a URL identifier. A list of attributes are attached to each identity that provide the metadata necessary to simulate the presence of an identity in a virtual world. Attribute types are defined by URLs, just as they are defined in OpenID Attribute Exchange. Each attribute stores LLSD; the format of the LLSD is specific to the attribute. As an example, an identity might have first name and last name attributes of the string type. Some attributes are references to the URL of a service, such as inventory or messaging.&lt;br /&gt;
&lt;br /&gt;
When a client contacts a world server to log in, the world server contacts the identity server for the given identity. OpenID maps nicely into this process to provide proof that the client owns the supplied identity. Once authentication has completed, the identity server must contact each service the requested identity links to and request one or more capabilities on behalf of the identity. The capability is a temporary, difficult to guess URL that can be given to clients or other services to provide some level of access to a service. The confirmation of identity ownership, list of attributes for the identity, and list of services and capabilities are all returned to the world server where the login requested initiated from.&lt;br /&gt;
&lt;br /&gt;
===Other Services===&lt;br /&gt;
&lt;br /&gt;
Any number of services can be attached to an identity. Some services such as inventory might be very common across many worlds, while world-specific services such as a trophy server might apply to a very small subset of worlds or even a single world. While the first point of association with services is from identities on an identity service, world servers may also associate services with identities. For example, fantasygameworld.com may associate a trophy service with all incoming clients to track progress and achievements in that world. Inventory may be restricted to items only found in fantasygameworld.com by ignoring external inventory services and associating an internal inventory service with each identity. Future revisions may support multiple services for the same service type, such as accessing an internal and external inventory service simultaneously.&lt;br /&gt;
&lt;br /&gt;
==Roadmap==&lt;br /&gt;
&lt;br /&gt;
A roadmap has been designed to provide a migration from the current OpenSim implementation of the Second Life® protocol to a decentralized service protocol. The first step will provide some of the services in a disaggregated grid and will improve the security of existing models such as OSGrid's decentralized hosting with centralized trust. The second step will remove any assumptions about tightly coupled services and present a true decentralized virtual world service platform. Step three will remove any leftover baggage by making service authentication and authorization client-centric, and potentially enable new use cases such as multiple inventory servers or content migration.&lt;br /&gt;
&lt;br /&gt;
===Step 1: Login With Existing LL Client===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request. The simulator checks the presented client certificate and confirms it as being signed by the grid server.&lt;br /&gt;
# The simulator contacts any services that need to be contacted before login completes. In this case, inventory information is requested from the inventory server.&lt;br /&gt;
# The inventory server checks the given access token and confirms that it is valid and not expired.&lt;br /&gt;
# The inventory server returns information about the agent's inventory.&lt;br /&gt;
# Information about the simulator (IP address, port, UDP circuit code) and the inventory information is sent back to the grid server along with a success response.&lt;br /&gt;
# Agent information, inventory information, and the simulator information are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
===Step 2: OpenID Login With web_login_key===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
This is the same login flow as the first diagram, but the client passes an OpenID identity URL to the grid server instead of login credentials. An OpenID login process is initiated with the identity server where the client supplies login credentials directly to the identity server. This removes the restriction that the grid server and identity server must be in the same trust domain. The list of services and tokens are carried in the OpenID response, defined as a new namespace of data.&lt;br /&gt;
&lt;br /&gt;
===Step 3: Client-Centric World===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Client_Centric_Login_3.png]]&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Several common virtual world operations are presented below. Teleporting between two regions in the same trust domain or between domains that have shared trust, teleporting between two untrusted domains, content publishing from digital content creation tools, and content migration between untrusted domains. [TODO]&lt;br /&gt;
&lt;br /&gt;
===Trusted Teleport===&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:Cablebeach-trustoverview.png</id>
		<title>File:Cablebeach-trustoverview.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:Cablebeach-trustoverview.png"/>
				<updated>2009-04-16T22:02:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-07T20:28:00Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{proposal}}&lt;br /&gt;
&lt;br /&gt;
=Cable Beach Proposal=&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, grid administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual world grids modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
&lt;br /&gt;
A roadmap has been designed to provide a migration from the current OpenSim implementation of the Second Life® protocol to a decentralized service protocol. The first step will provide some of the services in a disaggregated grid and will improve the security of existing models such as OSGrid's decentralized hosting with centralized trust. The second step will remove any assumptions about tightly coupled services and present a true decentralized virtual world service platform. Step three will remove any leftover baggage by making service authentication and authorization client-centric, and potentially enable new use cases such as multiple inventory servers or content migration.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Login With Existing LL Client==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request. The simulator checks the presented client certificate and confirms it as being signed by the grid server.&lt;br /&gt;
# The simulator contacts any services that need to be contacted before login completes. In this case, inventory information is requested from the inventory server.&lt;br /&gt;
# The inventory server checks the given access token and confirms that it is valid and not expired.&lt;br /&gt;
# The inventory server returns information about the agent's inventory.&lt;br /&gt;
# Information about the simulator (IP address, port, UDP circuit code) and the inventory information is sent back to the grid server along with a success response.&lt;br /&gt;
# Agent information, inventory information, and the simulator information are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
==Step 2: OpenID Login With web_login_key==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
This is the same login flow as the first diagram, but the client passes an OpenID identity URL to the grid server instead of login credentials. An OpenID login process is initiated with the identity server where the client supplies login credentials directly to the identity server. This removes the restriction that the grid server and identity server must be in the same trust domain. The list of services and tokens are carried in the OpenID response, defined as a new namespace of data.&lt;br /&gt;
&lt;br /&gt;
==Step 3: Client-Centric World==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Client_Centric_Login_3.png]]&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Several common virtual world operations are presented below. Teleporting between two regions in the same trust domain or between domains that have shared trust, teleporting between two untrusted domains, content publishing from digital content creation tools, and content migration between untrusted domains. [TODO]&lt;br /&gt;
&lt;br /&gt;
===Trusted Teleport===&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_Client_Centric_Login_3.png</id>
		<title>File:CableBeach Client Centric Login 3.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_Client_Centric_Login_3.png"/>
				<updated>2009-04-07T20:27:51Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-07T20:00:22Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{proposal}}&lt;br /&gt;
&lt;br /&gt;
=Cable Beach Proposal=&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, grid administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual world grids modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
&lt;br /&gt;
A roadmap has been designed to provide a migration from the current OpenSim implementation of the Second Life® protocol to a decentralized service protocol. The first step will provide some of the services in a disaggregated grid and will improve the security of existing models such as OSGrid's decentralized hosting with centralized trust. The second step will remove any assumptions about tightly coupled services and present a true decentralized virtual world service platform. Step three will remove any leftover baggage by making service authentication and authorization client-centric, and potentially enable new use cases such as multiple inventory servers or content migration.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Login With Existing LL Client==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request. The simulator checks the presented client certificate and confirms it as being signed by the grid server.&lt;br /&gt;
# The simulator contacts any services that need to be contacted before login completes. In this case, inventory information is requested from the inventory server.&lt;br /&gt;
# The inventory server checks the given access token and confirms that it is valid and not expired.&lt;br /&gt;
# The inventory server returns information about the agent's inventory.&lt;br /&gt;
# Information about the simulator (IP address, port, UDP circuit code) and the inventory information is sent back to the grid server along with a success response.&lt;br /&gt;
# Agent information, inventory information, and the simulator information are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
==Step 2: OpenID Login With web_login_key==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
This is the same login flow as the first diagram, but the client passes an OpenID identity URL to the grid server instead of login credentials. An OpenID login process is initiated with the identity server where the client supplies login credentials directly to the identity server. This removes the restriction that the grid server and identity server must be in the same trust domain. The list of services and tokens are carried in the OpenID response, defined as a new namespace of data.&lt;br /&gt;
&lt;br /&gt;
==Step 3: Client-Centric World==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Client_Centric_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Several common virtual world operations are presented below. Teleporting between two regions in the same trust domain or between domains that have shared trust, teleporting between two untrusted domains, content publishing from digital content creation tools, and content migration between untrusted domains. [TODO]&lt;br /&gt;
&lt;br /&gt;
===Trusted Teleport===&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_OpenID_Client_Login_2.png</id>
		<title>File:CableBeach OpenID Client Login 2.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_OpenID_Client_Login_2.png"/>
				<updated>2009-04-07T19:56:07Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: uploaded a new version of &amp;quot;Image:CableBeach OpenID Client Login 2.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_2.png</id>
		<title>File:CableBeach LL Client Login 2.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_2.png"/>
				<updated>2009-04-07T19:56:00Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: uploaded a new version of &amp;quot;Image:CableBeach LL Client Login 2.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_OpenID_Client_Login_2.png</id>
		<title>File:CableBeach OpenID Client Login 2.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_OpenID_Client_Login_2.png"/>
				<updated>2009-04-07T19:51:48Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: uploaded a new version of &amp;quot;Image:CableBeach OpenID Client Login 2.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_2.png</id>
		<title>File:CableBeach LL Client Login 2.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_2.png"/>
				<updated>2009-04-07T19:51:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: uploaded a new version of &amp;quot;Image:CableBeach LL Client Login 2.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-07T19:49:18Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{proposal}}&lt;br /&gt;
&lt;br /&gt;
=Cable Beach Proposal=&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, grid administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual world grids modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
&lt;br /&gt;
A roadmap has been designed to provide a migration from the current OpenSim implementation of the Second Life® protocol to a decentralized service protocol. The first step will provide some of the services in a disaggregated grid and will improve the security of existing models such as OSGrid's decentralized hosting with centralized trust. The second step will remove any assumptions about tightly coupled services and present a true decentralized virtual world service platform. Step three will remove any leftover baggage by making service authentication and authorization client-centric, and potentially enable new use cases such as multiple inventory servers or content migration.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Login With Existing LL Client==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request.&lt;br /&gt;
# The simulator checks the presented client certificate and confirms it as being signed by the grid server. Preparations are made and a UDP circuit is created. The identifier for the waiting UDP circuit is passed back to the grid server with the success response.&lt;br /&gt;
# The grid server uses the access token it received for the inventory server to contact the inventory server and receive information about the agent inventory, including a skeleton of the folder structure and owner information.&lt;br /&gt;
# The inventory server checks the access token and confirms that it is a valid and non-expired token.&lt;br /&gt;
# Inventory information is returned to the grid server along with the success response.&lt;br /&gt;
# Agent information, inventory information, and the UDP circuit identifier are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
==Step 2: OpenID Login With web_login_key==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
This is the same login flow as the first diagram, but the client passes an OpenID identity URL to the grid server instead of login credentials. An OpenID login process is initiated with the identity server where the client supplies login credentials directly to the identity server. This removes the restriction that the grid server and identity server must be in the same trust domain.&lt;br /&gt;
&lt;br /&gt;
==Step 3: Client-Centric World==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Client_Centric_Login_2.png]]&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Several common virtual world operations are presented below. Teleporting between two regions in the same trust domain or between domains that have shared trust, teleporting between two untrusted domains, content publishing from digital content creation tools, and content migration between untrusted domains. [TODO]&lt;br /&gt;
&lt;br /&gt;
===Trusted Teleport===&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_OpenID_Client_Login_2.png</id>
		<title>File:CableBeach OpenID Client Login 2.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_OpenID_Client_Login_2.png"/>
				<updated>2009-04-07T19:48:37Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_2.png</id>
		<title>File:CableBeach LL Client Login 2.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_2.png"/>
				<updated>2009-04-07T19:48:32Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_Client_Centric_Login_2.png</id>
		<title>File:CableBeach Client Centric Login 2.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_Client_Centric_Login_2.png"/>
				<updated>2009-04-07T19:48:22Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-06T22:44:12Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: /* Approach */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{proposal}}&lt;br /&gt;
&lt;br /&gt;
=Cable Beach Proposal=&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, grid administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual world grids modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
&lt;br /&gt;
A roadmap has been designed to provide a migration from the current OpenSim implementation of the Second Life® protocol to a decentralized service protocol. The first step will provide some of the services in a disaggregated grid and will improve the security of existing models such as OSGrid's decentralized hosting with centralized trust. The second step will remove any assumptions about tightly coupled services and present a true decentralized virtual world service platform. Step three will remove any leftover baggage by making service authentication and authorization client-centric, and potentially enable new use cases such as multiple inventory servers or content migration.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Login With Existing LL Client==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_1.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request.&lt;br /&gt;
# The simulator checks the presented client certificate and confirms it as being signed by the grid server. Preparations are made and a UDP circuit is created. The identifier for the waiting UDP circuit is passed back to the grid server with the success response.&lt;br /&gt;
# The grid server uses the access token it received for the inventory server to contact the inventory server and receive information about the agent inventory, including a skeleton of the folder structure and owner information.&lt;br /&gt;
# The inventory server checks the access token and confirms that it is a valid and non-expired token.&lt;br /&gt;
# Inventory information is returned to the grid server along with the success response.&lt;br /&gt;
# Agent information, inventory information, and the UDP circuit identifier are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
==Step 2: OpenID Login With web_login_key==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_1.png]]&lt;br /&gt;
&lt;br /&gt;
This is the same login flow as the first diagram, but the client passes an OpenID identity URL to the grid server instead of login credentials. An OpenID login process is initiated with the identity server where the client supplies login credentials directly to the identity server. This removes the restriction that the grid server and identity server must be in the same trust domain.&lt;br /&gt;
&lt;br /&gt;
==Step 3: Client-Centric World==&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Several common virtual world operations are presented below. Teleporting between two regions in the same trust domain or between domains that have shared trust, teleporting between two untrusted domains, content publishing from digital content creation tools, and content migration between untrusted domains. [TODO]&lt;br /&gt;
&lt;br /&gt;
===Trusted Teleport===&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-06T22:37:19Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{proposal}}&lt;br /&gt;
&lt;br /&gt;
=Cable Beach Proposal=&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, grid administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual world grids modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
&lt;br /&gt;
A roadmap has been designed to provide a migration from the current OpenSim implementation of the Second Life® protocol to a decentralized service protocol. The first step will provide some of the services in a disaggregated grid and will improve the security of existing models such as OSGrid's decentralized hosting with centralized trust. The second step will remove any assumptions about tightly coupled services and present a true decentralized virtual world service platform. Step 3 will remove any leftover baggage by making service authentication and authorization client-centric, and potentially enable new use cases such as multiple inventory servers or content migration.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Login With Existing LL Client==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_1.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request.&lt;br /&gt;
# The simulator checks the presented client certificate and confirms it as being signed by the grid server. Preparations are made and a UDP circuit is created. The identifier for the waiting UDP circuit is passed back to the grid server with the success response.&lt;br /&gt;
# The grid server uses the access token it received for the inventory server to contact the inventory server and receive information about the agent inventory, including a skeleton of the folder structure and owner information.&lt;br /&gt;
# The inventory server checks the access token and confirms that it is a valid and non-expired token.&lt;br /&gt;
# Inventory information is returned to the grid server along with the success response.&lt;br /&gt;
# Agent information, inventory information, and the UDP circuit identifier are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
==Step 2: OpenID Login With web_login_key==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_1.png]]&lt;br /&gt;
&lt;br /&gt;
This is the same login flow as the first diagram, but the client passes an OpenID identity URL to the grid server instead of login credentials. An OpenID login process is initiated with the identity server where the client supplies login credentials directly to the identity server. This removes the restriction that the grid server and identity server must be in the same trust domain.&lt;br /&gt;
&lt;br /&gt;
==Step 3: Client-Centric World==&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Several common virtual world operations are presented below. Teleporting between two regions in the same trust domain or between domains that have shared trust, teleporting between two untrusted domains, content publishing from digital content creation tools, and content migration between untrusted domains. [TODO]&lt;br /&gt;
&lt;br /&gt;
===Trusted Teleport===&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-06T22:28:12Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: /* Step 2: OpenID Login With web_login_key */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, grid administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual world grids modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
&lt;br /&gt;
A roadmap has been designed to provide a migration from the current OpenSim implementation of the Second Life® protocol to a decentralized service protocol. The first step will provide some of the services in a disaggregated grid and will improve the security of existing models such as OSGrid's decentralized hosting with centralized trust. The second step will remove any assumptions about tightly coupled services and present a true decentralized virtual world service platform. Step 3 will remove any leftover baggage by making service authentication and authorization client-centric, and potentially enable new use cases such as multiple inventory servers or content migration.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Login With Existing LL Client==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_1.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request.&lt;br /&gt;
# The simulator checks the presented client certificate and confirms it as being signed by the grid server. Preparations are made and a UDP circuit is created. The identifier for the waiting UDP circuit is passed back to the grid server with the success response.&lt;br /&gt;
# The grid server uses the access token it received for the inventory server to contact the inventory server and receive information about the agent inventory, including a skeleton of the folder structure and owner information.&lt;br /&gt;
# The inventory server checks the access token and confirms that it is a valid and non-expired token.&lt;br /&gt;
# Inventory information is returned to the grid server along with the success response.&lt;br /&gt;
# Agent information, inventory information, and the UDP circuit identifier are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
==Step 2: OpenID Login With web_login_key==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_1.png]]&lt;br /&gt;
&lt;br /&gt;
This is the same login flow as the first diagram, but the client passes an OpenID identity URL to the grid server instead of login credentials. An OpenID login process is initiated with the identity server where the client supplies login credentials directly to the identity server. This removes the restriction that the grid server and identity server must be in the same trust domain.&lt;br /&gt;
&lt;br /&gt;
==Step 3: Client-Centric World==&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Several common virtual world operations are presented below. Teleporting between two regions in the same trust domain or between domains that have shared trust, teleporting between two untrusted domains, content publishing from digital content creation tools, and content migration between untrusted domains. [TODO]&lt;br /&gt;
&lt;br /&gt;
===Trusted Teleport===&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-06T22:26:03Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: /* Step 3: Client-Centric World */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, grid administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual world grids modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
&lt;br /&gt;
A roadmap has been designed to provide a migration from the current OpenSim implementation of the Second Life® protocol to a decentralized service protocol. The first step will provide some of the services in a disaggregated grid and will improve the security of existing models such as OSGrid's decentralized hosting with centralized trust. The second step will remove any assumptions about tightly coupled services and present a true decentralized virtual world service platform. Step 3 will remove any leftover baggage by making service authentication and authorization client-centric, and potentially enable new use cases such as multiple inventory servers or content migration.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Login With Existing LL Client==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_1.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request.&lt;br /&gt;
# The simulator checks the presented client certificate and confirms it as being signed by the grid server. Preparations are made and a UDP circuit is created. The identifier for the waiting UDP circuit is passed back to the grid server with the success response.&lt;br /&gt;
# The grid server uses the access token it received for the inventory server to contact the inventory server and receive information about the agent inventory, including a skeleton of the folder structure and owner information.&lt;br /&gt;
# The inventory server checks the access token and confirms that it is a valid and non-expired token.&lt;br /&gt;
# Inventory information is returned to the grid server along with the success response.&lt;br /&gt;
# Agent information, inventory information, and the UDP circuit identifier are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
==Step 2: OpenID Login With web_login_key==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_1.png]]&lt;br /&gt;
&lt;br /&gt;
==Step 3: Client-Centric World==&lt;br /&gt;
&lt;br /&gt;
[TODO]&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Several common virtual world operations are presented below. Teleporting between two regions in the same trust domain or between domains that have shared trust, teleporting between two untrusted domains, content publishing from digital content creation tools, and content migration between untrusted domains. [TODO]&lt;br /&gt;
&lt;br /&gt;
===Trusted Teleport===&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-06T22:25:45Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Motivation==&lt;br /&gt;
&lt;br /&gt;
Many virtual worlds are being developed independently with a wide variety of different architectures and protocols. The current generation of virtual worlds are implemented as proprietary stacks of services, where each world is not only simulating virtual space but also providing identity services, content hosting, digital rights management, instant messaging, virtual economies, social networking elements such as groups, and many other services. We believe there are shortcomings with this approach. Specifically:&lt;br /&gt;
&lt;br /&gt;
# The barrier to entry for creating and running a virtual world is too high. Even with popular platforms such as OpenSim, grid administrators are taking on a monumental task of overseeing many or all of the above services when only a simple world simulation is needed.&lt;br /&gt;
# The all-or-nothing approach of the current protocols prevents the development of a robust virtual world ecosystem, where many specialized services are provided. Today's large stakeholders in content hosting, content delivery acceleration, identity services, and social networking have no means of entry to the virtual worlds space.&lt;br /&gt;
# Due to the walled garden nature of current worlds, third party services such as search and digital content creation tools have been almost entirely locked out of virtual worlds.&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
We envision virtual world grids modeled after the current World Wide Web, with millions of independent administrative domains. Content will be spread across millions of small, independent domains as well as aggregated on large domains supporting millions of users. A rich community of value added services and the free and open exchange of content will weave the network together, much as the Web 2.0 movement is tying the web together today. Every organization can choose what services they will run themselves, what services will be provided by third parties, and which third parties will provide services. Additionally, the content rights decisions are placed in the hands of the content hosts. With the proper authentication users are free to move assets to wherever they roam.&lt;br /&gt;
&lt;br /&gt;
Data services will become as important as data hosting itself. Just as search engines and content portals have changed how we use the web, services that can plug into a common interface in asset hosting will change how we use virtual worlds. Auditing services can provide an approach to rights management and traffic analytics. Existing caching techniques and services that have been built for today's web content can be leveraged for delivery of rich virtual world content.&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
&lt;br /&gt;
A roadmap has been designed to provide a migration from the current OpenSim implementation of the Second Life® protocol to a decentralized service protocol. The first step will provide some of the services in a disaggregated grid and will improve the security of existing models such as OSGrid's decentralized hosting with centralized trust. The second step will remove any assumptions about tightly coupled services and present a true decentralized virtual world service platform. Step 3 will remove any leftover baggage by making service authentication and authorization client-centric, and potentially enable new use cases such as multiple inventory servers or content migration.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Login With Existing LL Client==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_1.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request.&lt;br /&gt;
# The simulator checks the presented client certificate and confirms it as being signed by the grid server. Preparations are made and a UDP circuit is created. The identifier for the waiting UDP circuit is passed back to the grid server with the success response.&lt;br /&gt;
# The grid server uses the access token it received for the inventory server to contact the inventory server and receive information about the agent inventory, including a skeleton of the folder structure and owner information.&lt;br /&gt;
# The inventory server checks the access token and confirms that it is a valid and non-expired token.&lt;br /&gt;
# Inventory information is returned to the grid server along with the success response.&lt;br /&gt;
# Agent information, inventory information, and the UDP circuit identifier are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
==Step 2: OpenID Login With web_login_key==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_1.png]]&lt;br /&gt;
&lt;br /&gt;
==Step 3: Client-Centric World==&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Several common virtual world operations are presented below. Teleporting between two regions in the same trust domain or between domains that have shared trust, teleporting between two untrusted domains, content publishing from digital content creation tools, and content migration between untrusted domains. [TODO]&lt;br /&gt;
&lt;br /&gt;
===Trusted Teleport===&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-06T21:05:01Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==LL Client Login==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_1.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request.&lt;br /&gt;
# The simulator checks the presented client certificate and confirms it as being signed by the grid server. Preparations are made and a UDP circuit is created. The identifier for the waiting UDP circuit is passed back to the grid server with the success response.&lt;br /&gt;
# The grid server uses the access token it received for the inventory server to contact the inventory server and receive information about the agent inventory, including a skeleton of the folder structure and owner information.&lt;br /&gt;
# The inventory server checks the access token and confirms that it is a valid and non-expired token.&lt;br /&gt;
# Inventory information is returned to the grid server along with the success response.&lt;br /&gt;
# Agent information, inventory information, and the UDP circuit identifier are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
==OpenID Client Login==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_OpenID_Client_Login_1.png]]&lt;br /&gt;
&lt;br /&gt;
==Hypergrid Trusted Teleport==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_Hypergrid_Trusted_Teleport_1.png]]&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_Hypergrid_Trusted_Teleport_1.png</id>
		<title>File:CableBeach Hypergrid Trusted Teleport 1.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_Hypergrid_Trusted_Teleport_1.png"/>
				<updated>2009-04-06T21:04:39Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_OpenID_Client_Login_1.png</id>
		<title>File:CableBeach OpenID Client Login 1.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_OpenID_Client_Login_1.png"/>
				<updated>2009-04-06T21:04:28Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-06T21:03:57Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==LL Client Login==&lt;br /&gt;
&lt;br /&gt;
[[Image:CableBeach_LL_Client_Login_1.png]]&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request.&lt;br /&gt;
# The simulator checks the presented client certificate and confirms it as being signed by the grid server. Preparations are made and a UDP circuit is created. The identifier for the waiting UDP circuit is passed back to the grid server with the success response.&lt;br /&gt;
# The grid server uses the access token it received for the inventory server to contact the inventory server and receive information about the agent inventory, including a skeleton of the folder structure and owner information.&lt;br /&gt;
# The inventory server checks the access token and confirms that it is a valid and non-expired token.&lt;br /&gt;
# Inventory information is returned to the grid server along with the success response.&lt;br /&gt;
# Agent information, inventory information, and the UDP circuit identifier are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
==OpenID Client Login==&lt;br /&gt;
&lt;br /&gt;
==Hypergrid Trusted Teleport==&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_1.png</id>
		<title>File:CableBeach LL Client Login 1.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:CableBeach_LL_Client_Login_1.png"/>
				<updated>2009-04-06T21:03:22Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-06T21:02:18Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==LL Client Login==&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request.&lt;br /&gt;
# The simulator checks the presented client certificate and confirms it as being signed by the grid server. Preparations are made and a UDP circuit is created. The identifier for the waiting UDP circuit is passed back to the grid server with the success response.&lt;br /&gt;
# The grid server uses the access token it received for the inventory server to contact the inventory server and receive information about the agent inventory, including a skeleton of the folder structure and owner information.&lt;br /&gt;
# The inventory server checks the access token and confirms that it is a valid and non-expired token.&lt;br /&gt;
# Inventory information is returned to the grid server along with the success response.&lt;br /&gt;
# Agent information, inventory information, and the UDP circuit identifier are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
==OpenID Client Login==&lt;br /&gt;
&lt;br /&gt;
==Hypergrid Trusted Teleport==&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-06T21:00:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==LL Client Login==&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request.&lt;br /&gt;
# The simulator checks the presented client certificate and confirms it as being signed by the grid server. Preparations are made and a UDP circuit is created.&lt;br /&gt;
# The identifier for the waiting UDP circuit is passed back to the grid server with the success response.&lt;br /&gt;
# The grid server uses the access token it received for the inventory server to contact the inventory server and receive information about the agent inventory, including a skeleton of the folder structure and owner information.&lt;br /&gt;
# The inventory server checks the access token and confirms that it is a valid and non-expired token.&lt;br /&gt;
# Inventory information is returned to the grid server along with the success response.&lt;br /&gt;
# Agent information, inventory information, and the UDP circuit identifier are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
==OpenID Client Login==&lt;br /&gt;
&lt;br /&gt;
==Hypergrid Trusted Teleport==&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/CableBeachProposal</id>
		<title>CableBeachProposal</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/CableBeachProposal"/>
				<updated>2009-04-06T21:00:19Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: New page: ==LL Client Login==  # This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==LL Client Login==&lt;br /&gt;
&lt;br /&gt;
# This step is the familiar XML-RPC login initiated from the Linden Lab client, passing a first name, last name, and md5 hash of the password. What is new here is that the login is sent directly to the grid server for a grid, since identities are no longer tightly coupled to grids.&lt;br /&gt;
&lt;br /&gt;
# The login is forwarded to a known identity server. Note that because the client is providing a grid server with sensitive information (md5 hash of the agent password), and it does not provide a URL for the identity server, this form of login requires the grid server and a known identity server to exist in the same trust domain.&lt;br /&gt;
&lt;br /&gt;
# The identity server holds profile information for each identity, which includes a list of URLs for various services. For each service, a temporary access token is requested.&lt;br /&gt;
&lt;br /&gt;
# Each service grants a temporary access token back to the identity server.&lt;br /&gt;
&lt;br /&gt;
# The login request successfully returns back to the grid server with information about the agent, the list of services, and access tokens for each service.&lt;br /&gt;
&lt;br /&gt;
# The grid server determines which simulator the client will start in. This may be the closest available location to a requested destination, the agent's home simulator in this grid, or the default starting location for the grid.&lt;br /&gt;
&lt;br /&gt;
# The grid server contacts the starting simulator to prepare the login. Information about the agent, the list of services for the agent, and the access tokens for each service are given to the simulator. The grid server uses its certificate as a client certificate so the simulator can authenticate the request.&lt;br /&gt;
&lt;br /&gt;
# The simulator checks the presented client certificate and confirms it as being signed by the grid server. Preparations are made and a UDP circuit is created.&lt;br /&gt;
&lt;br /&gt;
# The identifier for the waiting UDP circuit is passed back to the grid server with the success response.&lt;br /&gt;
&lt;br /&gt;
# The grid server uses the access token it received for the inventory server to contact the inventory server and receive information about the agent inventory, including a skeleton of the folder structure and owner information.&lt;br /&gt;
&lt;br /&gt;
# The inventory server checks the access token and confirms that it is a valid and non-expired token.&lt;br /&gt;
&lt;br /&gt;
# Inventory information is returned to the grid server along with the success response.&lt;br /&gt;
&lt;br /&gt;
# Agent information, inventory information, and the UDP circuit identifier are all returned to the client along with the success response.&lt;br /&gt;
&lt;br /&gt;
==OpenID Client Login==&lt;br /&gt;
&lt;br /&gt;
==Hypergrid Trusted Teleport==&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:Simian-child-agents.png</id>
		<title>File:Simian-child-agents.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:Simian-child-agents.png"/>
				<updated>2009-03-13T19:58:52Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: uploaded a new version of &amp;quot;Image:Simian-child-agents.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Simian</id>
		<title>Simian</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Simian"/>
				<updated>2009-03-13T19:54:19Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: New page: ==Grid Layer==  ===Child Agent Establishment===  Image:Simian-child-agents.png  ==Client Layer==&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Grid Layer==&lt;br /&gt;
&lt;br /&gt;
===Child Agent Establishment===&lt;br /&gt;
&lt;br /&gt;
[[Image:Simian-child-agents.png]]&lt;br /&gt;
&lt;br /&gt;
==Client Layer==&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/File:Simian-child-agents.png</id>
		<title>File:Simian-child-agents.png</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/File:Simian-child-agents.png"/>
				<updated>2009-03-13T19:53:44Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Talk:Hypergrid</id>
		<title>Talk:Hypergrid</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Talk:Hypergrid"/>
				<updated>2009-02-03T18:02:20Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: Formatting cleanup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Diva says:'''&lt;br /&gt;
&lt;br /&gt;
== Some thoughts on how to go about inventory security ==&lt;br /&gt;
&lt;br /&gt;
These thoughts pertain to the problem of inventory security only, not to the other issue of potential property piracy after a sale.&lt;br /&gt;
&lt;br /&gt;
The very first decision point is whether we want to continue to be compatible with Linden Lab's official viewer or whether we should start looking for alternative viewers that are more in sync with where OpenSim is going. Here's why.&lt;br /&gt;
&lt;br /&gt;
Technically, the viewer plays a leading role in this story. Linden Lab's architecture has the viewer always contact the regions for inventory asset downloads. I'm not sure why they did this, but that's how things are. By doing this, there is implicitly a trust relation between the viewer and the region with respect to assets: the viewer requests the inventory assets to the region which, in turn, fetches them from the asset server and then sends them to the viewer; the user trusts that the region is not going to steal or delete or infect those inventory assets. This works well in closed systems like Linden Lab's, but it's terrible for open systems, where different regions are controlled by different people. We really can't trust the regions in general!&lt;br /&gt;
&lt;br /&gt;
=== Alternative Architecture ===&lt;br /&gt;
&lt;br /&gt;
The obvious alternative to that is to have the viewer contact the inventory/asset server(s) directly for all operations related to inventory manipulation, without having the region in between. This would solve *all* the inventory security issues we face by abiding to LL's architecture. Granted, this is a radical architectural change, and I'm not even sure I can foresee all the consequences. It's just makes a lot of sense to me, intuitively. Regions should never be trusted with the users' confidential data, and the viewer should be a hub for interaction with lots of servers that the user needs to interact with. The region should stay out of it.&lt;br /&gt;
:This solution makes two unjustified assumptions. (1) All regions are on a grid with a separate asset server. (2) Grid assets servers are trustworthy. The first assumption ignores the proliferation of standalone sims with built-in asset servers, unconnected to any grid. That the metaverse will come more and more to resemble the anarchy of websites may disturb some. But that is what is happening, like it or not. The second assumption is also false, as demonstrated by Linden Labs. I, like many former SL users, was ripped off by Linden Lab's policy changes depriving me of paid-up (openspace) land and months of construction labor without even refunding my initial fee. Never again will I or others like me trust anyone else with the fruits of my labor. My assets will always remain in my possession on my own asset server. As the Scots put it, &amp;quot;Fool me once, shame on you, fool me twice....&amp;quot; [[User:FrankWSweet|Frank W Sweet]] 17:51, 3 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Back to Reality ===&lt;br /&gt;
&lt;br /&gt;
OK, so that probably won't happen any time soon, not in the official LL viewer, and not in all the other derivative viewers out there (anyone wants to prove me wrong? I would love that! :-). What's the next best thing?&lt;br /&gt;
&lt;br /&gt;
* An extra flag in the item's Properties indicating that the item is to be shared with foreign regions. In this case the inventory server can selectively send the user's inventory to the foreign regions, sending only those item marked with that flag. This requires a small change in the viewer to add that extra flag and send out the corresponding bit in a message to the inventory server. However, we need to figure out a way to coerce the viewer to make that contact to the inventory server directly without going through the region, otherwise the region may just flip the bit; we're not sure how to do this.&lt;br /&gt;
&lt;br /&gt;
* A coarse-grained selection via the concept of Suitcase (explained [[Hypergrid_Inventory_Access | here]]). This is the simplest thing to do, it doesn't require any changes to the viewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------&lt;br /&gt;
'''John says:'''&lt;br /&gt;
&lt;br /&gt;
== Moving Away from Local vs. Foreign ==&lt;br /&gt;
&lt;br /&gt;
I think this is making too many assumptions about &amp;quot;local&amp;quot; vs. &amp;quot;foreign&amp;quot;. An inventory or asset server should be an independent concept from a simulator or grid of simulators. Requiring that I define one grid as my local grid if I go into the content storage/distribution business places a lot of burden on the Akamai's and AmazonS3's of the metaverse. If an inventory server is an independent service, every grid becomes foreign. Maybe my ACL looks like this:&lt;br /&gt;
&lt;br /&gt;
 RW: http://grid.uci.edu/users/diva&lt;br /&gt;
 RW: http://osgrid.org/users/*&lt;br /&gt;
 R: *&lt;br /&gt;
&lt;br /&gt;
And a second level of checks would further restrict read access. Everyone can grab a texture if they know the UUID (in this particular config), but only the owner of a script can access it unless someone owns an inventory item giving them read access. Maybe someone is trying to setup a walled garden grid, and the ACL looks like this:&lt;br /&gt;
&lt;br /&gt;
 RW: http://identity.ibm.com/users/*&lt;br /&gt;
&lt;br /&gt;
The only hurdle left is how to delegate trust so simulators can access the content they need without compromising identity or additional assets/inventory. One solution could be Google's recently released spec on combining [http://step2.googlecode.com/svn/spec/openid_oauth_extension/latest/openid_oauth_extension.html OpenID+OAuth]. OAuth was designed for exactly this purpose; to delegate limited trust to an automated service without having to give away your login credentials.&lt;br /&gt;
&lt;br /&gt;
One big plus with this approach is that it should be feasible without rewriting the Linden Lab viewer. The LL viewer already makes heavy use of capabilities, which is just another way of using access tokens to talk to services. Inventory is supposed to be switched over to all CAPS in the near future (libOpenMetaverse and OpenSim devs are surely cringing) which means OAuth tokens could be mangled into CAPS URLs and handed to the client to make things work seamlessly.&lt;br /&gt;
&lt;br /&gt;
In practice, the simulator never needs access to inventory (except in the current scenario where inventory is proxied through the simulator, which is going away soon). It does need access to some assets. An additional CAPS URL could be generated that is stored on the simulator side and handed around with HyperGrid teleports that allows limited access. In a tightly coupled grid approach, logging in to the user server alleviates the need to do a direct OpenID login to an asset server, which gives you the entire security model without the client ever understanding what OpenID or OAuth are. However, you can still use your third party tools to communicate directly with the inventory/asset server using OpenID (and optionally OAuth).&lt;br /&gt;
&lt;br /&gt;
The downside is that this still requires some notion of tight coupling to make the backward compatible paths work (logging into the user server pings a local asset/inventory server to prevent the need for a second login). However, this is no different from today's setup and it provides a roadmap to completely decentralizing grid services.&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Talk:Hypergrid</id>
		<title>Talk:Hypergrid</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Talk:Hypergrid"/>
				<updated>2009-02-03T18:00:11Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: John's comments&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Diva says:'''&lt;br /&gt;
&lt;br /&gt;
== Some thoughts on how to go about inventory security ==&lt;br /&gt;
&lt;br /&gt;
These thoughts pertain to the problem of inventory security only, not to the other issue of potential property piracy after a sale.&lt;br /&gt;
&lt;br /&gt;
The very first decision point is whether we want to continue to be compatible with Linden Lab's official viewer or whether we should start looking for alternative viewers that are more in sync with where OpenSim is going. Here's why.&lt;br /&gt;
&lt;br /&gt;
Technically, the viewer plays a leading role in this story. Linden Lab's architecture has the viewer always contact the regions for inventory asset downloads. I'm not sure why they did this, but that's how things are. By doing this, there is implicitly a trust relation between the viewer and the region with respect to assets: the viewer requests the inventory assets to the region which, in turn, fetches them from the asset server and then sends them to the viewer; the user trusts that the region is not going to steal or delete or infect those inventory assets. This works well in closed systems like Linden Lab's, but it's terrible for open systems, where different regions are controlled by different people. We really can't trust the regions in general!&lt;br /&gt;
&lt;br /&gt;
=== Alternative Architecture ===&lt;br /&gt;
&lt;br /&gt;
The obvious alternative to that is to have the viewer contact the inventory/asset server(s) directly for all operations related to inventory manipulation, without having the region in between. This would solve *all* the inventory security issues we face by abiding to LL's architecture. Granted, this is a radical architectural change, and I'm not even sure I can foresee all the consequences. It's just makes a lot of sense to me, intuitively. Regions should never be trusted with the users' confidential data, and the viewer should be a hub for interaction with lots of servers that the user needs to interact with. The region should stay out of it.&lt;br /&gt;
:This solution makes two unjustified assumptions. (1) All regions are on a grid with a separate asset server. (2) Grid assets servers are trustworthy. The first assumption ignores the proliferation of standalone sims with built-in asset servers, unconnected to any grid. That the metaverse will come more and more to resemble the anarchy of websites may disturb some. But that is what is happening, like it or not. The second assumption is also false, as demonstrated by Linden Labs. I, like many former SL users, was ripped off by Linden Lab's policy changes depriving me of paid-up (openspace) land and months of construction labor without even refunding my initial fee. Never again will I or others like me trust anyone else with the fruits of my labor. My assets will always remain in my possession on my own asset server. As the Scots put it, &amp;quot;Fool me once, shame on you, fool me twice....&amp;quot; [[User:FrankWSweet|Frank W Sweet]] 17:51, 3 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Back to Reality ===&lt;br /&gt;
&lt;br /&gt;
OK, so that probably won't happen any time soon, not in the official LL viewer, and not in all the other derivative viewers out there (anyone wants to prove me wrong? I would love that! :-). What's the next best thing?&lt;br /&gt;
&lt;br /&gt;
* An extra flag in the item's Properties indicating that the item is to be shared with foreign regions. In this case the inventory server can selectively send the user's inventory to the foreign regions, sending only those item marked with that flag. This requires a small change in the viewer to add that extra flag and send out the corresponding bit in a message to the inventory server. However, we need to figure out a way to coerce the viewer to make that contact to the inventory server directly without going through the region, otherwise the region may just flip the bit; we're not sure how to do this.&lt;br /&gt;
&lt;br /&gt;
* A coarse-grained selection via the concept of Suitcase (explained [[Hypergrid_Inventory_Access | here]]). This is the simplest thing to do, it doesn't require any changes to the viewer.&lt;br /&gt;
&lt;br /&gt;
'''John says:'''&lt;br /&gt;
&lt;br /&gt;
== Moving Away from Local vs. Foreign ==&lt;br /&gt;
&lt;br /&gt;
I think this is making too many assumptions about &amp;quot;local&amp;quot; vs. &amp;quot;foreign&amp;quot;. An inventory or asset server should be an independent concept from a simulator or grid of simulators. Requiring that I define one grid as my local grid if I go into the content storage/distribution business places a lot of burden on the Akamai's and AmazonS3's of the metaverse. If an inventory server is an independent service, every grid becomes foreign. Maybe my ACL looks like this:&lt;br /&gt;
&lt;br /&gt;
RW: http://grid.uci.edu/users/diva&lt;br /&gt;
RW: http://osgrid.org/users/*&lt;br /&gt;
R: *&lt;br /&gt;
&lt;br /&gt;
And a second level of checks would further restrict read access. Everyone can grab a texture if they know the UUID (in this particular config), but only the owner of a script can access it unless someone owns an inventory item giving them read access. Maybe someone is trying to setup a walled garden grid, and the ACL looks like this:&lt;br /&gt;
&lt;br /&gt;
RW: http://identity.ibm.com/users/*&lt;br /&gt;
&lt;br /&gt;
The only hurdle left is how to delegate trust so simulators can access the content they need without compromising identity or additional assets/inventory. One solution could be Google's recently released spec on combining [http://step2.googlecode.com/svn/spec/openid_oauth_extension/latest/openid_oauth_extension.html OpenID+OAuth]. OAuth was designed for exactly this purpose; to delegate limited trust to an automated service without having to give away your login credentials.&lt;br /&gt;
&lt;br /&gt;
One big plus with this approach is that it should be feasible without rewriting the Linden Lab viewer. The LL viewer already makes heavy use of capabilities, which is just another way of using access tokens to talk to services. Inventory is supposed to be switched over to all CAPS in the near future (libOpenMetaverse and OpenSim devs are surely cringing) which means OAuth tokens could be mangled into CAPS URLs and handed to the client to make things work seamlessly.&lt;br /&gt;
&lt;br /&gt;
In practice, the simulator never needs access to inventory (except in the current scenario where inventory is proxied through the simulator, which is going away soon). It does need access to some assets. An additional CAPS URL could be generated that is stored on the simulator side and handed around with HyperGrid teleports that allows limited access. In a tightly coupled grid approach, logging in to the user server alleviates the need to do a direct OpenID login to an asset server, which gives you the entire security model without the client ever understanding what OpenID or OAuth are. However, you can still use your third party tools to communicate directly with the inventory/asset server using OpenID (and optionally OAuth).&lt;br /&gt;
&lt;br /&gt;
The downside is that this still requires some notion of tight coupling to make the backward compatible paths work (logging into the user server pings a local asset/inventory server to prevent the need for a second login). However, this is no different from today's setup and it provides a roadmap to completely decentralizing grid services.&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/AssetServerProposal/Verse</id>
		<title>AssetServerProposal/Verse</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/AssetServerProposal/Verse"/>
				<updated>2009-01-21T00:37:56Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: Updating progress&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To turn Cable Beach into a [http://verse.blender.org/faq/ Verse] host, the Verse protocol needs to be implemented in C#. There was a previous effort to wrap libverse using P/Invoke, but this is now a dead project.&lt;br /&gt;
&lt;br /&gt;
==Work Required==&lt;br /&gt;
&lt;br /&gt;
Create a C# Verse library that implements:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;RSA encryption for login&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;The modified XOR encryption used for packet encryption&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;UDP server (the libomv UDP server can be used here)&amp;lt;/s&amp;gt;&lt;br /&gt;
* Callback to connect login attempts to an authorization backend&lt;br /&gt;
* &amp;lt;s&amp;gt;Subscription commands for clients to subscribe to different data types&amp;lt;/s&amp;gt;&lt;br /&gt;
* Geometry node command decoding&lt;br /&gt;
* &amp;lt;s&amp;gt;Command callback system&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Packet serialization/deserialization&amp;lt;/s&amp;gt;&lt;br /&gt;
* Packet queuing (logging) system for incoming and outgoing, with event compression (searching for old commands to make obsolete)&lt;br /&gt;
* ACK/NAK system&lt;br /&gt;
* Ordered transmission mode for non-idempotent commands&lt;br /&gt;
* &amp;lt;s&amp;gt;Decoders for each message type that connect packets to callbacks and take action such as broadcasting the packet or sending it back to the client&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Estimate===&lt;br /&gt;
&lt;br /&gt;
A basic implementation (possibly only supporting one or two types of nodes) should be possible in two weeks or less. Once this library is created, a VerseFrontend.cs could be started for Cable Beach to create a Verse host. Some form of Verse file format would have to be created to make use of the storage backends, and logic would need to be added to balance between overloading the storage backend with small updates and potentially losing data by not saving to disk. This might take up to another two weeks. Finally, an OpenSim (realXtend server?) Verse client could be written that subscribes to geometry data and converts subdivision surfaces into polygon meshes. The complexity of this depends on availability of algorithms to convert subdivision surfaces into polygons, and the amount of work required to inject new mesh objects into the OpenSim scene. A rough estimate would be one week.&lt;br /&gt;
&lt;br /&gt;
Total project time: Five weeks&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/AssetServerProposal/Verse</id>
		<title>AssetServerProposal/Verse</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/AssetServerProposal/Verse"/>
				<updated>2009-01-20T21:04:13Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: Updating the page with current progress&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To turn Cable Beach into a [http://verse.blender.org/faq/ Verse] host, the Verse protocol needs to be implemented in C#. There was a previous effort to wrap libverse using P/Invoke, but this is now a dead project.&lt;br /&gt;
&lt;br /&gt;
==Work Required==&lt;br /&gt;
&lt;br /&gt;
Create a C# Verse library that implements:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;RSA encryption for login&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;The modified XOR encryption used for packet encryption&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;UDP server (the libomv UDP server can be used here)&amp;lt;/s&amp;gt;&lt;br /&gt;
* Callback to connect login attempts to an authorization backend&lt;br /&gt;
* Subscription service (for clients to subscribe to different data types) with four unique states for each node in common data, three states per object node, two states per geometry node, one state per material node, two states per bitmap node, two states per text node, two states per curve node, and three states per audio node&lt;br /&gt;
* Basic Node class or interface&lt;br /&gt;
* Object, Geometry, Material, Bitmap, Text, Audio and Curve nodes&lt;br /&gt;
* Custom layers for each node type&lt;br /&gt;
* &amp;lt;s&amp;gt;Command callback system&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Packet serialization/deserialization&amp;lt;/s&amp;gt;&lt;br /&gt;
* Packet queuing (logging) system for incoming and outgoing, with event compression (searching for old commands to make obsolete)&lt;br /&gt;
* ACK/NAK system&lt;br /&gt;
* Ordered transmission mode for non-idempotent commands&lt;br /&gt;
* &amp;lt;s&amp;gt;Decoders for each message type that connect packets to callbacks and take action such as broadcasting the packet or sending it back to the client&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Estimate===&lt;br /&gt;
&lt;br /&gt;
A basic implementation (possibly only supporting one or two types of nodes) should be possible in two weeks or less. Once this library is created, a VerseFrontend.cs could be started for Cable Beach to create a Verse host. Some form of Verse file format would have to be created to make use of the storage backends, and logic would need to be added to balance between overloading the storage backend with small updates and potentially losing data by not saving to disk. This might take up to another two weeks. Finally, an OpenSim (realXtend server?) Verse client could be written that subscribes to geometry data and converts subdivision surfaces into polygon meshes. The complexity of this depends on availability of algorithms to convert subdivision surfaces into polygons, and the amount of work required to inject new mesh objects into the OpenSim scene. A rough estimate would be one week.&lt;br /&gt;
&lt;br /&gt;
Total project time: Five weeks&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/AssetServerProposal/Verse</id>
		<title>AssetServerProposal/Verse</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/AssetServerProposal/Verse"/>
				<updated>2009-01-15T23:29:17Z</updated>
		
		<summary type="html">&lt;p&gt;Jhurliman: New page: To turn Cable Beach into a [http://verse.blender.org/faq/ Verse] host, the Verse protocol needs to be implemented in C#. There was a previous effort to wrap libverse using P/Invoke, but th...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To turn Cable Beach into a [http://verse.blender.org/faq/ Verse] host, the Verse protocol needs to be implemented in C#. There was a previous effort to wrap libverse using P/Invoke, but this is now a dead project.&lt;br /&gt;
&lt;br /&gt;
==Work Required==&lt;br /&gt;
&lt;br /&gt;
Create a C# Verse library that implements:&lt;br /&gt;
&lt;br /&gt;
* RSA encryption for login (may require big integer support, there is a Mono library for this)&lt;br /&gt;
* The modified XOR encryption used for packet encryption&lt;br /&gt;
* UDP server (the libomv UDP server can be used here)&lt;br /&gt;
* Callback to connect login attempts to an authorization backend&lt;br /&gt;
* Subscription service (for clients to subscribe to different data types) with four unique states for each node in common data, three states per object node, two states per geometry node, one state per material node, two states per bitmap node, two states per text node, two states per curve node, and three states per audio node&lt;br /&gt;
* Basic Node class or interface&lt;br /&gt;
* Object, Geometry, Material, Bitmap, Text, Audio and Curve nodes&lt;br /&gt;
* Custom layers for each node type&lt;br /&gt;
* Callback defined for each command&lt;br /&gt;
* Packet serialization/deserialization&lt;br /&gt;
* Packet queuing (logging) system for incoming and outgoing, with event compression (searching for old commands to make obsolete)&lt;br /&gt;
* ACK/NAK system&lt;br /&gt;
* Ordered transmission mode for non-idempotent commands&lt;br /&gt;
* Decoders for each message type that connect packets to callbacks and take action such as broadcasting the packet or sending it back to the client&lt;br /&gt;
&lt;br /&gt;
===Estimate===&lt;br /&gt;
&lt;br /&gt;
A basic implementation (possibly only supporting one or two types of nodes) should be possible in six weeks or less. Once this library is created, a VerseFrontend.cs could be started for Cable Beach to create a Verse host. Some form of Verse file format would have to be created to make use of the storage backends, and logic would need to be added to balance between overloading the storage backend with small updates and potentially losing data by not saving to disk. This might take up to another two weeks. Finally, an OpenSim (realXtend server?) Verse client could be written that subscribes to geometry data and converts subdivision surfaces into polygon meshes. The complexity of this depends on availability of algorithms to convert subdivision surfaces into polygons, and the amount of work required to inject new mesh objects into the OpenSim scene. A rough estimate would be one week.&lt;br /&gt;
&lt;br /&gt;
Total project time: Nine weeks&lt;/div&gt;</summary>
		<author><name>Jhurliman</name></author>	</entry>

	</feed>