<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Metaverse Ink Blog &#187; Metaverse Ink Blog &#187;  &#187; Hypergrid</title>
	<atom:link href="http://www.metaverseink.com/blog/category/hypergrid/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.metaverseink.com/blog</link>
	<description>Virtual Worlds and Beyond</description>
	<lastBuildDate>Mon, 20 Apr 2020 19:52:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.32</generator>
	<item>
		<title>Content protection: an incomplete proposal</title>
		<link>http://www.metaverseink.com/blog/hypergrid/content-protection-an-incomplete-proposal/</link>
		<comments>http://www.metaverseink.com/blog/hypergrid/content-protection-an-incomplete-proposal/#comments</comments>
		<pubDate>Sun, 19 Apr 2020 18:44:01 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[Hypergrid]]></category>
		<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.metaverseink.com/blog/?p=654</guid>
		<description><![CDATA[This post comes on the heels of a conversation Ubit and I had about protecting content on the Hypergrid. As all of you know, content protection, in general, is a big problem, and not just for the Hypergrid. Even for closed grids that can enforce permissions, content theft happens via modified viewers: a sufficiently skilled developer [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>This post comes on the heels of a conversation Ubit and I had about protecting content on the Hypergrid. As all of you know, content protection, in general, is a big problem, and not just for the Hypergrid. Even for closed grids that can enforce permissions, content theft happens via modified viewers: a sufficiently skilled developer can grab the source code of any of the legit viewers and add modifications to it that allows them to copy all the content they see, and alter their permissions on the copies. The Hypergrid opens up yet another avenue for abuse: when an avatar travels to another grid, their appearance and the inventory items on their Suitcase folder become available to the destination grid. If the owner of that destination grid is a decent developer but a bad actor, they can add modules to OpenSim that grab copies of those items and change their permissions on the database.</p>
<p>Some time back, Melanie added a new flag to items, the &#8220;Export&#8221; flag, which some viewers started to support. The Export flag allows creators of content to mark them as exportable or not exportable &#8212; meaning ok to export to other grids or not. That gives some level of flexibility to content creators, but it doesn&#8217;t solve the problem. If an item is marked &#8220;No copy&#8221; but &#8220;Exportable&#8221;, a bad grid operator can easily change the permissions on it. So, at the moment, our recommendation to viewer developers is that they only allow to mark the &#8220;Export&#8221; flag when the item is fully &#8220;free&#8221;: no constraints on copy, transfers, and modifications. This is so people don&#8217;t get a wrong sense of security.</p>
<p>I should note that there are no reports of Hypergrid thefts, even though they are technically possible. As far as I know, most copy-botted content comes from using altered viewers on closed, non-HG grids; those loots are then imported into other OpenSim-based grids via those viewers too. So altered viewers, not HG thefts, are the main problem. Nevertheless, the fact that the HG opens additional doors for abuse has been a deterrent for commerce on the Hypergrid, so much so that we recommend &#8220;Export&#8221; only for freebies. It would be nice to change that perception. The incomplete proposal I have here solves the problem not just for the Hypergrid but also for viewer-based thefts in closed grids, even if those grids don&#8217;t ever want to connect to the Hypergrid. It solves the problem so thoroughly that, if implemented, it would allow commerce on the Hypergrid to bloom. The problem is in the implementation; hence, the &#8220;incomplete&#8221; in the title of this post&#8230;</p>
<p>The proposal, in a nutshell: ledgers.<br />
Specifically for the Hypergrid: distributed, decentralized ledgers. Yes, blockchain, but minus the coin.</p>
<h2>How it works, birds-eye view</h2>
<p>Let&#8217;s ignore implementation details for a moment. I&#8217;ll cover them at the end.</p>
<p>Here is the main idea of a ledger: every time an item changes hands (from one avatar to another) a record about the transaction should be entered on a database. The information should include: the item ID, the time of original creation of the item, the timestamp of the transaction, the owner ID, the receiver ID, and the item&#8217;s permissions at the time of the transaction. Ledgers are append-only databases: they hold the historical record of all transactions since the beginning of time. (A side note to mention that OpenSim already has append-only databases: the assets.) So if any item&#8217;s origin is ever in question, the ledger can be queried for the ground truth.</p>
<p>Next, I will go through various theft scenarios, and explain how the ledger gives honest grid operators the technical justification for punitive action against thieves, and how it it will help identify (and, hopefully, socially isolate) dishonest grid operators.</p>
<h2>Detecting theft within a closed grid</h2>
<p>Let&#8217;s ignore the HG for a moment, and focus on centralized ledgers.</p>
<p>Let&#8217;s consider the viewer-based theft scenario in closed grids: some bad actor logs in with an altered viewer and copies all content that it sees into this bad actor&#8217;s inventory, changing permissions, and even authorship, along the way. This bad actor goes on to sell this content as their own on that same grid. Nothing in this proposal prevents this from happening. However, if and when the original creator detects this shenanigan, they can file a complain with the grid, who now is armed with the ledger, the historical record of all transactions. A simple query on the ledger can find out when the items in question were first transactioned; the offender&#8217;s item&#8217;s timestamp will be later than the original creator&#8217;s item&#8217;s timestamp. If the items are, indeed, similar, as per the original creator&#8217;s complaint, then the timestamps, and the lack of a transaction chain between the items, are proof that there was a theft, and who the offender was. The grid owner can act swiftly.</p>
<h2>Detecting theft across grids</h2>
<p>Let&#8217;s continue to ignore HG for a little longer.</p>
<p>Let&#8217;s consider the same viewer-based theft scenario, but now the bad actor imports the stolen content from closed grid X into another closed grid Y via the altered viewer. Assume both grids have their own separate ledgers, and both grid operators are honest. Again, this proposal doesn&#8217;t prevent theft from happening. It&#8217;s only when suspicion of theft is raised that the matter can be investigated.</p>
<p>In this scenario, suppose the bad actor with the altered viewer imports the stolen content into grid Y as their own. Grid Y will store the item as if it was legitimately created by this person at time T1, when it was imported there. It knows nothing about its true origin. Some time later, there is a complain from the original creator who first created this item in grid X at time T0 &lt; T1. Both grids can easily investigate by agreeing that the items are, indeed, very similar, and by checking their own ledgers independently. If they find that T0 &lt; T1, then it&#8217;s clear theft was at play, and who the thief was. They can act.</p>
<h2>Detecting theft between a closed grid and OSGrid</h2>
<p>Continuing to ignore HG, let&#8217;s focus on hybrids like OSG: in OSG-like grids, many independent people control their regions, but they are all connected to central grid services operated by osgrid.org, specifically inventory; this ledger would be another grid-wide service. Assume the region operators may be bad actors, but that the grid services operators are honest.</p>
<p>In this scenario, a bad actor, armed with an altered viewer, logs in to a closed commercial grid, steals content via the viewer, and then imports it to OSG using their own region, where they not only have God-like powers but can also alter the simulator code. They have a lot more opportunities to tamper with the timestamps of creation, ownership, etc. But that doesn&#8217;t matter much, as long as inventory and ledger are centralized services of the grid, and are capable of correcting any region-sent information. When suspicion of theft is raised, both grids can check their ledgers for timestamps.</p>
<h2>Managing transactions across the Hypergrid</h2>
<p>Having separate ledgers is fine for grids that trust each other, but in the Hypergrid, some grid operators may be bad actors themselves, and they control their grid&#8217;s ledgers. If they steal something, they can then enter those items on their own databases as having been created in a date that is sufficiently in the past to escape proof of theft, or, even worse, to harass the original content creators! &#8220;I created this before you did!&#8221; That&#8217;s bad.</p>
<p>For this to work on the Hypergrid, we need to establish a distributed, decentralized ledger system, blockchain style. Here is how it works.</p>
<p>Every time an item changes hands (from one avatar to another) a record about the transaction should be entered onto the distributed ledger. The distributed ledger is a kind of replicated database over a peer-to-peer network, but where peers can independently verify the veracity of the information that is sent to them &#8212; sometimes directly and sometimes via some voting algorithm. If we trust the information on the distributed, replicated ledger, rather than on any single node, then we can always verify whether something was stolen or not across grids that are part of the network.</p>
<p>The weak link of decentralized ledgers is false information. How can we prevent false information from entering the ledger? Here are a couple of scenarios of false information:</p>
<ul>
<li><strong>Problem</strong>: a bad grid operator creates a false record of a transaction between a visiting avatar and a local avatar. That is, they send to the ledger &#8220;HG visitor A gave a copy of item H to local avatar B at time T1&#8243; when that transaction never happened.<br />
<strong>Solution</strong>: any transactions between avatars should always take place on the grid of origin of the avatar that gives the item. In other words, visitors can get things, but should not give things. All transactions should be local to the originator avatar. This can easily be checked at ledger-entry time by verifying that the issuer grid is the grid of the originator avatar. If it isn&#8217;t, nodes of the distributed ledger won&#8217;t accept the transaction.<br />
(We can implement non-local transactions, too, but that will complicate the giving procedure substantially, as it will require confirmation from the originator when it comes back to their grid)</li>
<li><strong>Problem</strong>: a bad grid operator changes the items&#8217; creation time to the past. For example, they import stolen content with an altered viewer, and then they send the following record to the ledger &#8220;Item H was created in 12/12/2012.&#8221;<br />
<strong>Solution</strong>: ledger nodes need to verify that the timestamps of a creation record are credible.</li>
</ul>
<h2>Implementation Issues: Where Things May Come to a Halt</h2>
<p>While the general idea will definitely be the best solution for protecting content, implementing it in practice for the Hypergrid is not a trivial matter.</p>
<p>Ledgers are append-only databases; their size can grow very large. This is a common problem of all blockchain solutions. For example, the Bitcoin ledger <a href="https://www.blockchain.com/charts/blocks-size" target="_blank">currently 275G</a>, and it will continue to increase forever. In our case, we could either do some garbage collection when items are removed from inventory, or we could do what blockchain operators do: archive old records into separate, slower, databases. But these solutions aren&#8217;t very good for the Hypergrid, where a large number of single person grids exist, many of them running in people&#8217;s home networks. Those small shops would end up having to deal with a very large database, most of which is irrelevant to them; they would get it just because they would be part of this ledger network.</p>
<p>We can estimate how large a distributed ledger for the HG would be, and how fast it would grow based on the current estimates of people&#8217;s inventories. One thing that will definitely contribute to the large size of the ledger is if we enter every inventory item on the ledger: if anything created in inventory, whether it will be passed around or not, is entered into the ledger, the ledger will become unsustainably large very quickly. For reference, there are hundreds of millions of entries in OSGrid&#8217;s inventory service, and probably billions of items have been created there. Multiply that by 1000 grids. This would quickly grow to be a terabyte-size database.</p>
<p>We could focus only on the items that are transferred from one avatar to another, and use the timestamp of the first transaction as a proxy for time of creation. This approximation will fail to detect thefts if the item is stolen before the first transaction happens, and then the thief quickly makes a first transaction themselves. This should be rare, and people could be aware and compensate for it. It will definitely decrease the size of the ledger by several orders of magnitude, as the vast majority of items in people&#8217;s inventories aren&#8217;t passed to another avatar.</p>
<p>Still, even with optimizations, the ledger will be large, and this will be a problem for small standalone grids.</p>
<p>Perhaps the right thing to do is to decouple the ledger from the grids. We can implement a distributed ledger system that is operated by a few trusted people in the community, with access to enough resources, and that ledger can hold the transactions of everyone who wants to ensure the use of legitimate content in their grids. Any grid not on this ledger will be suspicious; social pressure will make them look bad.</p>
<p>Of course, nothing prevents a single entity from creating a centralized ledger for many independent grids, as a service. That will require complete trust in the ledger operator.</p>
<p>Anyway, I hope this post will trigger some discussion and maybe even some action, as it is clear that without a mechanism for content protection, commerce on the Hypergrid will never take off, and the nice professionally-created items will not be available to those with good intentions, such as Universities.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/hypergrid/content-protection-an-incomplete-proposal/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>How HG 2.0 is coming along</title>
		<link>http://www.metaverseink.com/blog/hypergrid/how-hg-2-0-is-coming-along/</link>
		<comments>http://www.metaverseink.com/blog/hypergrid/how-hg-2-0-is-coming-along/#comments</comments>
		<pubDate>Sun, 23 Sep 2012 02:29:18 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[Hypergrid]]></category>
		<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[hg 2.0]]></category>
		<category><![CDATA[hypergrid]]></category>

		<guid isPermaLink="false">http://metaverseink.com/blog/?p=459</guid>
		<description><![CDATA[&#160; &#160; It&#8217;s been a while since I last posted about HG 2, but it&#8217;s finally coming to life! HG 2 is all about letting grid operators define policies for access control to their grid&#8217;s assets and users. I thought I&#8217;d show how it is taking shape, so that you&#8217;ll be ready for it in [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://metaverseink.com/blog/wp-content/uploads/2012/04/20.jpg"><img class="alignleft size-full wp-image-318" title="20" src="http://metaverseink.com/blog/wp-content/uploads/2012/04/20.jpg" alt="" width="200" height="130" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>It&#8217;s been a while since I <a href="http://metaverseink.com/blog/?p=299">last posted about HG 2</a>, but it&#8217;s finally coming to life! HG 2 is all about letting grid operators define policies for access control to their grid&#8217;s assets and users. I thought I&#8217;d show how it is taking shape, so that you&#8217;ll be ready for it in the next OpenSim release.</p>
<p><span id="more-459"></span><br />
<script type="text/javascript">// <![CDATA[
google_ad_client = "ca-pub-3704733000938614"; /* MI Search blog small leaderboard */ google_ad_slot = "5138341620"; google_ad_width = 468; google_ad_height = 60;
// ]]&gt;</script><br />
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">// <![CDATA[


// ]]&gt;</script></p>
<h2>HG Inventory</h2>
<p><a href="http://metaverseink.com/blog/wp-content/uploads/2012/09/HG2InventoryHome.jpg"><img class="alignleft size-medium wp-image-462" style="border: 3px solid black;" title="HG2 Inventory at Home" src="http://metaverseink.com/blog/wp-content/uploads/2012/09/HG2InventoryHome-300x228.jpg" alt="" width="300" height="228" /></a>Inventory is much more secure than in HG 1.5, and the My Suitcase folder is playing an even more important role in that.</p>
<p>The first difference you will notice is that this folder is now under the root folder &#8212; see picture on the left. In HG 1.5, My Suitcase was at the same level as the root folder. That posed some issues, because the viewers can&#8217;t really handle that. So we had to make up Web applications (like D2 Wifi) to make inventory manipulations between the Suitcase and the other folders. Kind of hacky. That&#8217;s not happening anymore. In HG 2, My Suitcase is inside your normal inventory tree, so you can easily copy items back and forth between that folder and others.</p>
<p>Like in HG 1.5, the My Suitcase folder is special: it is the folder tree that receives objects you collect while you are visiting other grids. But now it is even more special: it is the <strong>only</strong> folder tree that is accessible to you (and therefore to the rest of the Internet) while you are traveling. Period.</p>
<p><a href="http://metaverseink.com/blog/wp-content/uploads/2012/09/HG2Inventory.jpg"><img class="alignleft size-medium wp-image-466" style="border: 2px solid black;" title="HG2 Inventory Abroad" src="http://metaverseink.com/blog/wp-content/uploads/2012/09/HG2Inventory-300x228.jpg" alt="" width="300" height="228" /></a>Look at how your inventory will look like in HG 2 when you are outside your home world &#8212; see picture on the left. As the picture shows, all your folders except My Suitcase are shown as (Unavailable). You can still see them, and unfold them. You may even be able to access items that are already cached in your viewer&#8217;s cache (textures, notecards, etc.). But if you try to access any items outside My Suitcase that aren&#8217;t cached in your viewer while you are outside your home world, the operation will fail. For example, rezzing objects from those folders will fail.</p>
<p>Items inside My Suitcase, however, will be available. My Suitcase will also be the tree where all the items collected while traveling  will go. Once you are back home you can then move them into other folders.</p>
<p>In short: the Suitcase is now really the only thing you&#8217;ll have available while traveling (but keep on reading for some exceptions). That means that it is also only the only thing that is available for rogue grids to mess with. Treat it as your own real-world suitcase: it may be stolen or badly damaged. But the rest of your belongings are safe in your home world.</p>
<p>[UPDATE 9/23] I should be more clear. The existing HG1.5 inventory service, which lets users still access their entire inventory abroad, will still be available in the future. Grids can continue to use that. They can even use the normal inventory service (HG1.0 style) on the Hypergrid, which has no restrictions whatsoever about inventory manipulation. Both of these, however, especially the normal inventory service, are horribly insecure and expose users to all sorts of risks regarding their inventory. Unless the networked grids have 100% trust in each other, I don&#8217;t recommend using them.</p>
<h2>Appearance</h2>
<p>Appearance in SL/OpenSim is a very tricky thing. Your appearance as an avatar consists of two things: wearables (shape, clothes, etc.) and attachments (prim hair, etc.), which can be arbitrarily complex objects with textures, scripts, etc. Additionally, the viewer &#8220;bakes&#8221; all the wearables into a set of textures, and those are the ones that are actually passed around between your viewer and the viewers of all other people around you. To make things even more complicated, the attachments have a nasty dependency with your inventory &#8212; they are objects that must be somewhere in your inventory, and the viewer must know about them being attached to you.</p>
<p>Why am I telling this? So that you understand some of the challenges regarding inventory access and asset access control related to your appearance.</p>
<p>Your appearance&#8217;s assets will be copied to the worlds that you are visiting, <strong>even if the items that you are wearing are not in the Suitcase folder</strong>. If we didn&#8217;t do that, you&#8217;d always have to switch into an appearance whose items would be in your Suitcase, and that would be a pain. So, your appearance items (your clothes, body parts and attachments) are the only exceptions to the rule &#8220;the only items available outside are items under the My Suitcase folder.&#8221;  They are copied, and, as such, assume that they will be publicly available.</p>
<p>But this is not good enough for some grids. Suppose you are a user of a commercial grid wearing a very expensive avatar. That grid may not want any of its assets to be exported to other grids, including the avatar that you are wearing &#8212; that refusal of service can now be done (read on). But if you arrive at the destination without any wearables and attachments, you will be seen there as Ruth, even if you see yourself wearing the same expensive avatar because it is cached in your viewer as you travel. Projecting a Ruth image to others is not something we consider a good user experience, so we had to fix this somehow.</p>
<p><a href="http://metaverseink.com/blog/wp-content/uploads/2012/09/NoGoAppearance.jpg"><img class="alignleft size-medium wp-image-472" style="border: 2px solid black;" title="No Go Appearance" src="http://metaverseink.com/blog/wp-content/uploads/2012/09/NoGoAppearance-300x218.jpg" alt="" width="300" height="218" /></a>There is a configuration variable that grids can set regarding the use of &#8220;allowed appearances for Hypergriding.&#8221; That is, grids can create one or more appearances with assets that they don&#8217;t mind being publicly shared, and then force their users to wear one of those appearances before hypergriding out. The picture on the left shows the warning message when a user is wearing something that is not part of the allowed HG appearance assets, in this case, it was the sphere attachment.</p>
<p>Unfortunately, due the lack of appropriate viewer features, the appearance switch has to be done explicitly by the user, it can&#8217;t be done automatically. So if the user gets this warning message when she&#8217;s trying to HG TP, she needs to replace her outfit with one of the official ones. In the case in the picture, it&#8217;s a folder called HGOutfit.</p>
<h2> Assets Access Control</h2>
<p>The access to a grid&#8217;s assets in the Hypergrid is done via a service called the HG Asset Service. Grid owners can now configure that service by specifying policies for exporting their grid&#8217;s assets to the outside world. For example, they can say that it&#8217;s ok for others to access textures and sounds but not scripts or meshes, or any other combination &#8212; the policy specification language takes the entire set of asset types. Grid owners can also specify which kinds of assets the grid can import from other grids.</p>
<p>The specification is done under the section [HGAssetService], something like this:</p>
<pre>[HGAssetService]
    HomeURI = "http://127.0.0.1:9000"
    ;; The asset types that will never be exported
    DisallowExport ="LSLText, LSLBytecode"
    ;; The asset types that will never be imported
    DisallowImport ="LSLBytecode"</pre>
<p>When these policies are specified, those types of assets will never be imported/exported, no matter what users and the rest of the world may do.</p>
<p>Going one step deeper into content protection, commercial grids with protected content may want to physically separate their internal asset server from their HG asset server, i.e. they can operate over completely different databases. Their internal asset server can continue to be behind the firewall. With the Robust architecture, this has been possible for a while. But now it is possible to make that physical separation meaningfully regarding the user&#8217;s Suitcase folder. When that separation is in place, the assets for the Suitcase items will be stored in the HG asset server database, and users cannot copy items back and forth between the Suitcase and the other folders. The items in the Suitcase folder will be  unavailable in the users&#8217; home world, and become available only when the user is traveling. This may be a desired feature, as commercial grids may not like the import of freebies from the outside. This requires some advanced configuration, but that&#8217;s the kind of security barriers that need to be in place for commercial grids to start experimenting with the HG.</p>
<p>For the time being, asset access control is done in bulk, based on asset types, and specified by the grid <em>operator</em>. There is no fine-grain asset access control [yet]. What this means is that grid <em>users</em> cannot express their own policies regarding their own objects, they are at the mercy of the grid operator. Bringing that specification up to the users will require some User Interface work (possibly on the viewers) that isn&#8217;t done yet. We&#8217;ll leave that for HG 2.5.</p>
<h2>Users Access Control</h2>
<p>In an HG Teleport, there are always two independent authorities involved: the home world of the user and the destination world. These can now be configured, also independently, regarding HG travels. It is now possible to control who goes where. This is the basis for the emergence of HG sub-networks &#8212; groups of grids connected to each other, but not to everyone, via the HG.</p>
<h3>Incoming HG visitors</h3>
<p><a href="http://metaverseink.com/blog/wp-content/uploads/2012/09/AccessControlGatekeeper.jpg"><img class="alignleft size-medium wp-image-484" title="Access Control Gatekeeper" src="http://metaverseink.com/blog/wp-content/uploads/2012/09/AccessControlGatekeeper-300x203.jpg" alt="" width="300" height="203" /></a>The control of which kinds of users can visit our world is done in a service called the Gatekeeper. It is now possible to specify whether the grid accepts foreign users or not, and, if it does, from which domains those users should be. When a user tries to HG TP to a grid in which she is not allowed, she gets a message like the one seen on the picture on the left &#8220;Destination does not allow users from your world.&#8221;</p>
<p>The configuration looks like this:</p>
<pre>[GatekeeperService]
...
  ; ForeignAgentsAllowed = true
  ;;</pre>
<pre>  ;; If ForeignAgentsAllowed is true, make exceptions using AllowExcept.
  ;; Leave blank or commented for no exceptions.
  AllowExcept = "http://griefer.com:8002, http://enemy.com:8002"
  ;;
  ;; If ForeignAgentsAllowed is false, make exceptions using DisallowExcept
  ;; Leave blank or commented for no exceptions.
  ; DisallowExcept = "http://myfriendgrid.com:8002, http://myboss.com:8002"</pre>
<p>The fine-grain control of specific users can continue to be done with ban lists and other mechanisms that already exist. The kind of control we added in HG 2.0 is domain-based, so all users from those domains will / will not be allowed in. That is what allows the emergence of HG sub-networks.</p>
<h3>Outgoing local users</h3>
<p><a href="http://metaverseink.com/blog/wp-content/uploads/2012/09/AccessControlUAS.jpg"><img class="alignleft size-medium wp-image-486" title="Access Control UAS" src="http://metaverseink.com/blog/wp-content/uploads/2012/09/AccessControlUAS-300x203.jpg" alt="" width="300" height="203" /></a>Conversely, the home world of users also has a say about where the users can and cannot go. That is done in a service called User Agents. When a user tries to HG TP to a grid which her home world doesn&#8217;t want her to go, she gets a message like the one seen on the picture on the left &#8220;Your world does not allow you to visit the destination.&#8221;</p>
<p>On this side of things, the policy specifications are based on the user-level. That is, users at different levels may be subjected to different restrictions.</p>
<p>The configuration looks like this:</p>
<pre>[UserAgentService]
...</pre>
<pre>;; Are local users allowed to visit other grids?</pre>
<pre>;; What user level? Use variables of this forrm:
 ;; ForeignTripsAllowed_Level_&lt;UserLevel&gt; = true | false
 ;; For example:
 ForeignTripsAllowed_Level_0 = false
 ForeignTripsAllowed_Level_10 = true ; true is default
 ;;
 ;; If ForeignTripsAllowed is true, make exceptions using AllowExcept.
 ;; Leave blank or commented for no exceptions.
 AllowExcept_Level_10 = "http://griefer.com:8002, http://enemy.com:8002"
 ;;
 ;; If ForeignTripsAllowed is false, make exceptions using DisallowExcept
 ;; Leave blank or commented for no exceptions.
 DisallowExcept_Level_0 = "http://myfriendgrid.com:8002, http://myboss.com:8002"</pre>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/hypergrid/how-hg-2-0-is-coming-along/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Towards HG 2.0</title>
		<link>http://www.metaverseink.com/blog/hypergrid/towards-hg-2-0/</link>
		<comments>http://www.metaverseink.com/blog/hypergrid/towards-hg-2-0/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 14:28:51 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[Hypergrid]]></category>
		<category><![CDATA[OpenSim]]></category>

		<guid isPermaLink="false">http://metaverseink.com/blog/?p=299</guid>
		<description><![CDATA[I usually don&#8217;t write about the future, I prefer to write about things that are already done and working. But I&#8217;m going to make an exception, because people are starting to ask about configurations of the Hypergrid that pertain to the next level; we&#8217;re almost there, but not yet. I am going to give an [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://metaverseink.com/blog/wp-content/uploads/2012/04/20.jpg"><img class="size-full wp-image-318 alignnone" title="20" src="http://metaverseink.com/blog/wp-content/uploads/2012/04/20.jpg" alt="" width="200" height="130" /></a></p>
<p>I usually don&#8217;t write about the future, I prefer to write about things that are already done and working. But I&#8217;m going to make an exception, because people are starting to ask about configurations of the Hypergrid that pertain to the next level; we&#8217;re almost there, but not yet. I am going to give an overview of what&#8217;s in the works right now that will result in the next big bump in the HG number: the big two-point-oh.</p>
<p><span id="more-299"></span></p>
<p><script type="text/javascript">// <![CDATA[
  google_ad_client = "ca-pub-3704733000938614"; /* MI Search blog small leaderboard */ google_ad_slot = "5138341620"; google_ad_width = 468; google_ad_height = 60;
// ]]&gt;</script><br />
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">// <![CDATA[


// ]]&gt;</script><br />
As usual, some context first.</p>
<p>The very first version of the Hypergrid, HG 1.0, was done back at the end of 2008, and continued through 2009 and 2010. That first version was just an exercise in feasibility and in interacting with the opaque, black box viewer. Could I trick the viewer to think that it was still on the same grid while in reality sending the user to a different grid? &#8212; that was the humble goal of HG 1.0. HG 1.0 was not concerned with security at all, as the main goal was to figure out how to use the viewer in ways for which it had not be designed. Once I mastered the signaling of agent teleports, it was time to take the HG to next level: more security all around.</p>
<p>The next version was HG 1.5. The conceptual work for it started in <a href="http://metaverseink.com/blog/?p=22">early 2009</a>, although the actual coding only happened much later. This was because in order to implement the Hypergrid as a collection of additional, optional services that don&#8217;t interfere with the simplest configuration, OpenSimulator itself had to be considerably refactored. That took a long time. HG1.5 came with OpenSim 0.7 <a href="http://metaverseink.com/blog/?p=37">in July of 2010</a>. It featured identity security as well as a semi-secure (or semi-insecure, depending on whether you are an optimism or a pessimist) Hypergrid inventory. It also had all the right architecture for enabling HG Instant Message and Friends. That&#8217;s where we are right now.</p>
<p>So let me explain what we&#8217;re working on for HG 2.0</p>
<h3>Inventory</h3>
<p>Hypergrid Inventory is going to be 100% secure and the Suitcase will finally be usable without external Web apps. This required some heavy hacking in order to understand how to further trick the viewer into submission (i.e. use it beyond its specs), but we did it. Here is what will happen. When a user goes out, her entire home inventory tree will be removed from the viewer and replaced with the Suitcase folder tree only. That&#8217;s the only portion of the user&#8217;s inventory that will be exposed to the outside and to the user while the user is hypergriding. That way, the user&#8217;s home inventory will be out of reach and completely protected. Once the user returns to the home grid, the Suitcase wannabe-root folder is replaced by the user&#8217;s real inventory tree again.</p>
<p>Depending on configuration, the Suitcase folder may or may not be available to the user when she is in her home grid. When it is available, it will be a regular folder under &#8220;My Inventory&#8221;; the user can then move stuff from/to the Suitcase to/from other folders using the viewer.  But some grids may not want their users to bring in stuff from the outside, they want to continue to segregate content, so availability of the Suitcase folder in the home grid will be configurable.</p>
<h3>Appearance</h3>
<p>The appearance that a traveling user has may or may not be the same as the appearance that she had when she left the home grid. Again, this will be configurable. But the idea here is that  some grids don&#8217;t want to allow the export of appearance assets at all, so they may provide generic appearances to their traveling users, and dress them with their appearances when they come back. Other grids may not care about this, and appearance will be preserved.</p>
<h3>User Access Control</h3>
<p>There will be a means to specify several policies of access control: who can go out and where, who can come in and from where. These policies are based on several pieces of information about the users themselves and about their grids of origin.</p>
<p>So for example, it will be possible to specify that only users of a certain level can Hypergrid out, while others under that level can&#8217;t (a requirement often heard in educational settings). It will also be possible to specify a limited set of grids that the users can visit; or a set of grids that the users cannot visit.</p>
<p>On the receiving end, it will be possible to specify only a limited set of grids whose users are allowed in; or a set of grids whose users are not allowed in; or no foreigners allowed in at all.</p>
<p><strong>Assets Access Control</strong></p>
<p>There will be a means to specify whether the grid allows asset exports to other grids, and which grids, as a whole. HG 2.0 will not support the specification of fine-grained asset exports, i.e. I can&#8217;t say that this particular set of assets can go out, while that other can&#8217;t. This will require a means for people to be able to express that, and we don&#8217;t have that means yet.</p>
<p>≈</p>
<p>What this amounts to is that the Hypergrid will be able to support different <em>policies</em> that better reflect different levels of comfort that people have regarding opening up their worlds. Grids that deal with protected content will be able to continue to protect that content while allowing their users to visit other grids, and even collect items there, and allowing foreign users to come in and mingle &#8212; without any asset ever being exported or imported from/into their main storage. Grids that deal with kids will be able to block them from hypergriding while allowing certain privileged staff to go out and get content and knowledge from other grids. Secretive grids will be able to prevent foreign visitors while allowing their users to go out. Grids can have only one or two regions available to foreigners, while the rest is off-limits. Communities can make up small networks of worlds that allow Hypergrid exchanges only among themselves. Etc.</p>
<p>I hope this clarifies where we&#8217;re going with the Hypergrid!</p>
<p>I know that the first question that everyone will ask is: when? My guess: sometime this summer, hopefully early.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/hypergrid/towards-hg-2-0/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>New diva distro for OpenSim 0.7.2 featuring W2W Friends</title>
		<link>http://www.metaverseink.com/blog/d2/new-diva-distro-for-opensim-0-7-2-featuring-w2w-friends/</link>
		<comments>http://www.metaverseink.com/blog/d2/new-diva-distro-for-opensim-0-7-2-featuring-w2w-friends/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 00:21:16 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[D2]]></category>
		<category><![CDATA[diva distro]]></category>
		<category><![CDATA[Hypergrid]]></category>
		<category><![CDATA[OpenSim]]></category>

		<guid isPermaLink="false">http://metaverseink.com/blog/?p=258</guid>
		<description><![CDATA[Hi everyone! I finally had the time to put together a new diva distro release corresponding to OpenSim 0.7.2 &#8212; plus a few minor bug fixes over that. If you already have a d2 world, you know the drill: run Update.exe. Otherwise, grab the zip, unzip it and take it from the README file. If [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Hi everyone! I finally had the time to put together a <a href="https://github.com/downloads/diva/d2/diva-r16915.zip">new diva distro</a> release corresponding to OpenSim 0.7.2 &#8212; plus a few minor bug fixes over that. If you already have a d2 world, you know the drill: run Update.exe. Otherwise, grab the zip, unzip it and take it from the README file. If you&#8217;re upgrading, I highly recommend running the Configure tool on the new installation, and you&#8217;ll see why.</p>
<p>There are many improvements in OpenSim, most notably the new <a href="http://opensimulator.org/wiki/OSSLNPC" target="_blank">LSL NPC stuff</a> &#8212; this allows you to create and manipulate Non-Player Characters (bots) directly from scripts. Really cool!</p>
<p>Hypergrid-wise, the most noteworthy development is the support for Friends across the Hypergrid. As explained in a <a href="http://metaverseink.com/blog/?p=204">previous post</a>, I have created a world-to-world social network platform in OpenSim! <a href="https://joindiaspora.com/">Diaspora</a>, anyone? Well, I get to actually do it and deploy it in  your worlds <img src="http://s.w.org/images/core/emoji/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Have fun!</p>
<p>P.S. I also made a new release for <a href="https://github.com/downloads/diva/d2/wifi-0-7-2.zip">Wifi</a> that works with Robust 0.7.2. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/d2/new-diva-distro-for-opensim-0-7-2-featuring-w2w-friends/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Friends and IM over the Hypergrid</title>
		<link>http://www.metaverseink.com/blog/hypergrid/friends-and-im-over-the-hypergrid/</link>
		<comments>http://www.metaverseink.com/blog/hypergrid/friends-and-im-over-the-hypergrid/#comments</comments>
		<pubDate>Fri, 27 May 2011 00:33:19 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[Hypergrid]]></category>
		<category><![CDATA[OpenSim]]></category>

		<guid isPermaLink="false">http://metaverseink.com/blog/?p=204</guid>
		<description><![CDATA[Over the past few weeks I have been working on mechanisms for making friends and instant message work across the Hypergrid. These social functions have been a goal since the beginning of the Hypergrid. The big rearchitecture work we did in OpenSimulator 0.7 that strengthened security was also meant to support these functions, but, of [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Over the past few weeks I have been working on mechanisms for making friends and instant message work across the Hypergrid. These social functions have been a goal since the beginning of the Hypergrid. The big rearchitecture work we did in OpenSimulator 0.7 that strengthened security was also meant to support these functions, but, of course, we weren&#8217;t really sure how well the new architecture would hold when these functions were actually implemented. Well, now I know &#8212; it handles it just fine. Let me explain how friends and IM work over the HG, the challenges, and the current limitations. Keep in mind that these new functions are still experimental, and subject to changes and improvements.</p>
<p><span id="more-204"></span><script type="text/javascript">// <![CDATA[
  google_ad_client = "ca-pub-7578160970082057"; /* Horizontal Banner */ google_ad_slot = "7276739231"; google_ad_width = 468; google_ad_height = 60;
// ]]&gt;</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script></p>
<p>[UPDATED 6/2/2011] Added pictures!</p>
<p>Here&#8217;s a base case scenario. You run your own OpenSimulator VW, and you visit OSGrid with an Hypergrid teleport. Once you get to OSGrid, you meet someone there &#8212; maybe from OSGrid, maybe from some other VW &#8211;, and you want to add that person to your list of friends. People in your friends list acquire certain rights over your information shadow, and vice-versa: they may be notified when you login/logout (and vice-versa), they may change your objects (and vice-versa), they may see you on the map (and vice-versa), etc. An entry on your list of friends is a persistent reference to a user, so you can easily IM them, see their profile, etc.</p>
<p>Up to now, it wasn&#8217;t possible to hold references to users in other services. With these changes, that has become possible. An HG friendship establishes 2 pairs of data, each stored in each user&#8217;s user services. That data is &#8220;signed&#8221; with a random number known only to the 2 services and the simulator where the friendship was established, so that, even if the user services (hg friends, to be precise) are exposed to the Internet, no one but the holders of the signature can manipulate the friendship data. Here lies warning #1: don&#8217;t make friendships in worlds that you don&#8217;t trust &#8212; instead, ask the person to come to your world, or vice-versa, and establish the friendship there.</p>
<p><a title="Hypergrid Friends by Diva Canto, on Flickr" href="http://www.flickr.com/photos/20665379@N03/5790443617/"><img src="http://farm6.static.flickr.com/5184/5790443617_d64eedccb7.jpg" alt="Hypergrid Friends" width="500" height="375" /></a></p>
<p>Independent of that, HG friendships established while you are Hypergriding require an additional confirmation step once you return to your world. Here&#8217;s a typical interaction: you go elsewhere, you ask someone to be your friend (or vice-versa), the viewer will tell you that the friendship was established. When this is done within your world,  the interaction ends there. With HG friendships, once you return to your world, or login the next time, you will be once again prompted for confirmation of the friendship. This is so that your friends list won&#8217;t get spammed with bogus entries sent by malicious components. Once you confirm that second time in your home world, the friendship is finally established.</p>
<p>Your HG friends can, by default, see your logins and logouts of the virtual world &#8212; to some extent, and this is where things are still work in progress. So far, they will be notified if they are in their own worlds. However, they will not be notified if they are elsewhere &#8212; not yet, at least.</p>
<p>This starts to show the really interesting challenges of these social functions done in a decentralized architecture: you can &#8220;move,&#8221; that is, your client doesn&#8217;t have a communication channel with one single server over your entire session; instead, your client &#8220;moves&#8221; from server to server. Keeping track of where people are (that is, which server their clients are talking to) is a major challenge! &#8212; especially without central servers. But I&#8217;ll come to this further down when I explain IM over the Hypergrid.</p>
<p>Another interesting aspect of the design of friends over the HG is the rights to edit each others&#8217; objects. Within one world, once you give someone the right to edit your objects, that right holds for all regions of that world indiscriminately. With the Hypergrid, we have the option to differentiate between the worlds, and give rights to edit objects per world. In other words, if we are friends and I build things in your world, I can give you the right to change my objects in your world; but I may very well not give you the right to change my objects in my world. (or vice-versa). Right changes affect only the world where the action takes place: if I change rights in my world, those new rights will be stored in my world only, they will not be disseminated. When you HG-TP to a new world, you will be notified of the rights that you currently have over your friends&#8217; objects there, if different from those in your home world.</p>
<p>This is a subtle semantic change. I like the more expressive capabilities, but I understand that people coming from walled-garden worlds may be somewhat confused by these extra options. We&#8217;ll see how this design decision fares as we go along.</p>
<p>One thing that is still work in progress: rights to change objects in 3rd-party worlds.</p>
<p>Now&#8230; Instant message.<br />
<a title="Hypergrid IM by Diva Canto, on Flickr" href="http://www.flickr.com/photos/20665379@N03/5790443663/"><img src="http://farm4.static.flickr.com/3256/5790443663_6f8cd69ef8.jpg" alt="Hypergrid IM" width="500" height="375" /></a></p>
<p>The base case is very simple: you are in your world, your friend is in her world; you IM her, she IMs you back. Works. Simple. It works because the reference to your friend includes the URL of her world, so your world can forward the IM appropriately. And vice-versa.</p>
<p>Scenario #2: you jump to your friend&#8217;s world, you IM her and she IMs you back. No problem, that&#8217;s a local IM. Works. Simple.</p>
<p>Scenario #3: you go back to your world. Your friend IMs you. Not so simple! Your friend&#8217;s world needs to detect that you aren&#8217;t in her world anymore and needs to find out where you are. Your friend&#8217;s world fails once, but has a reference to you, including your world&#8217;s URL, so that&#8217;s what it uses to forward the IM.</p>
<p>Scenario #4: you HG-TP to a 3rd world. Your friend IMs you. More challenging! Now your world needs to find out where you are. Your User Agent service knows that, and forwards the IM to the world where you are.</p>
<p>Scenario #5: in that 3rd world, you IM your friend back. This is really challenging! &#8212; because that world knows absolutely nothing about your friend. No worries, it still works in this case. It works like this: that 3rd world knows about you, so it asks your world if it knows about the user you are trying to IM. Basically, all that world needs is a URL to deliver the IM. Prompted with that information request, your world first looks if the user is a co-resident of yours; if it is, it sends the URL of your world; if it&#8217;s not, as is the case in this scenario, your world checks if the requested user is a foreign friend of yours, which is the case here. Having found it, it sends the URL of your friend&#8217;s world to the 3rd world, so that the IM can finally be delivered.</p>
<p>Scenario #6: in that 3rd world you meet someone, and you start IM-ing with that person, who is not in your friend&#8217;s list. Then you go back to your world and you send an IM to that person in the window that is still open. Oops! &#8212; this won&#8217;t work! &#8212; at least for the time being. The reason it won&#8217;t work is because your world knows absolutely nothing about that person: it&#8217;s not a co-resident, it&#8217;s not visiting your world and it&#8217;s not in your friend&#8217;s list. Your world has no means to find the URL of that person&#8217;s world to send the IM to. Work in progress&#8230;</p>
<p>Note that throughout these IM interactions your location in the Hypergrid is known only to your user services; it is not disclosed to the worlds with whom you are IM-ing. Those other worlds simply forward the IMs to your world, and it&#8217;s your world&#8217;s responsibility to forward them to wherever you are. This is an important privacy-preserving design decision.</p>
<p>As I said, HG friends and IM is still work in progress. Use with caution, and be ready to go down to your DB and delete records in the friend&#8217;s table if things go awry. If all testing goes well, it will be in 0.7.2.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/hypergrid/friends-and-im-over-the-hypergrid/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>New D2 and Wifi for OpenSim 0.7.1</title>
		<link>http://www.metaverseink.com/blog/d2/new-d2-and-wifi-for-opensim-0-7-1/</link>
		<comments>http://www.metaverseink.com/blog/d2/new-d2-and-wifi-for-opensim-0-7-1/#comments</comments>
		<pubDate>Fri, 06 May 2011 20:05:54 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[D2]]></category>
		<category><![CDATA[Hypergrid]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[diva distro]]></category>

		<guid isPermaLink="false">http://metaverseink.com/blog/?p=163</guid>
		<description><![CDATA[It has been a while since I made a D2 + Wifi releases. I had been waiting for OpenSim 0.7.1; the changes between 0.7.0.2 and 0.7.1 were such that I didn&#8217;t want to risk making a release in between. OpenSim 0.7.1 finally happened earlier this week, so here is the much awaited D2! Technically, it [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a title="DivasOffice by Diva Canto, on Flickr" href="http://www.flickr.com/photos/20665379@N03/5694296960/"><img src="http://farm4.static.flickr.com/3003/5694296960_dac26fd6c2.jpg" alt="DivasOffice" width="500" height="375" /></a></p>
<p>It has been a while since I made a <a href="https://github.com/diva/d2/downloads">D2 + Wifi releases</a>. I had been waiting for OpenSim 0.7.1; the changes between 0.7.0.2 and 0.7.1 were such that I didn&#8217;t want to risk making a release in between. OpenSim 0.7.1 finally happened earlier this week, so here is the much awaited D2! Technically, it corresponds to OpenSim r15402, which is a couple of commits after the official release &#8212; I found a couple of bugs in the official release related to the Library, so I fixed them.</p>
<p><span id="more-163"></span>Things to pay attention to when you update your D2:</p>
<ul>
<li>This time after you Update, you need to run Configure again on your new installation, because of changes in configuration variables. In order for this process to be as smooth as possible, have your current config-include/MyWorld.ini open in one window while answering the questions for Configure in the new install. If you had made changes to your MyWorld.ini, simply add those changes to the new MyWorld.ini that is produced after running Configure.</li>
<li>As usual, the Update tool will ask you if you want to preserve any changes you may have made to your Wifi pages. I always say &#8220;yes, I want to preserve my own.&#8221; By doing that, it&#8217;s guaranteed that the new Wifi installation will use the pages that I had before. However, this time there is a nice improvement in the splash.html page that shows some statistics at the bottom &#8212; see <a href="http://ucigrid01.nacs.uci.edu:9001/wifi">here</a> for example. Not a problem. When Update copies over your old pages into the new install, it also places the new ones under WifiPages with extension .diva, for example, splash.html.diva. That way you can easily see the differences between the two and copy-and-paste the parts that matter. In my case, this time, I simply replaced the entire splash.html file with the new one; you may want to check your own changes.</li>
<li>Marck added support for localization in Wifi (he&#8217;s German). Now you can have your Wifi installation in your favorite language. See <a href="https://github.com/diva/d2/wiki/Wifi">here </a>for how to do that (scroll down for the LOCALIZATION section).</li>
<li>The Wifi administrator account has a teaser new link called &#8220;Console&#8221;, a new feature that we have been working on. It&#8217;s undocumented for the time being, because it&#8217;s not secure enough for me to recommend using it. It will come to life in a future release.</li>
<li>Bad news: Teleports between OpenSim 0.7.0.x installations and OpenSim 0.7.1 installations are incompatible, because of a bug fix in libomv. You probably knew that if you had tried to HG TP to OSGrid.</li>
<li>Good news: most large grids, like OSGrid, are already running 0.7.1, so you can finally join the crowd there.</li>
<li>To test HG TPs, feel free to use my own world, http://ucigrid01.nacs.uci.edu:9001. It&#8217;s somewhere in the 5000&#8217;s and reachable from all D2&#8217;s if you haven&#8217;t changed your coordinates.</li>
</ul>
<p>Have fun!</p>
<p><strong>UPDATE (5/7)</strong>: I realize that many people may not have noticed the subtle differences in HG addressing that happened between 0.6.9 (HG 1.0) and 0.7.0.x (HG 1.5), and then between 0.7.0.x and 0.7.1. Let me explain.</p>
<p>An HG address in the old HG 1.0 was simply the address of a particular simulator. HG 1.0 did not have the concept of &#8220;grid&#8221; in place, so even if a simulator was part of a grid, its HG address was the simulator&#8217;s address. For example, in the UCI grid you could reach individual simulators with addresses like <strong>ucigrid04.nacs.uci.edu:9007</strong> (the Gateway 7000 region); note that ucigrid04 is the machine where that particular simulator runs, and 9007 is the HTTP port of that particular simulator.</p>
<p>With HG 1.5, the concept of &#8220;grid&#8221; has been put in place. A &#8220;grid&#8221; is a collection of simulators running under the same authority and that  share one single &#8220;Gatekeeper.&#8221; The Gatekeeper is central to HG 1.5 security and, in grids, it usually runs in the Robust server. The Gatekeeper is the entry point to every single incoming request like link region requests and agent transfer requests. In HG1.5 you cannot link directly to simulators anymore; you link to Gatekeepers wherever they live. For example the Gateway 7000 region in the UCI Grid is now accessed like this:<strong> http://ucigrid00.nacs.uci.edu:8002 &#8220;Gateway 7000&#8243;</strong>.  A few of things to notice:</p>
<ul>
<li>First, the &#8220;domain:port&#8221; syntax that was used before (and that is still accepted for the time being, but considered obsolete) has been replaced by a full-blown URL starting with &#8220;http://&#8221;. This is so that HG services can be implemented by regular web applications. For example, the Gatekeeper of ScienceSim lives in http://grid.sciencesim.com/grid/hypergrid.php &#8212; yes, a php script.</li>
<li>Second, the URL is that of the Gatekeeper, not of the region itself. The region is referred to by name after the URL, and when the name has white spaces you need to use quotes. If you want to reach UCI Grid&#8217;s Gateway 7000 region, you can pull up the map in the viewer and type exactly what I just wrote in bold up there. Or if you want to use the link-region command on the sim console  you can type:<br />
$ link-region &lt;local_x&gt; &lt;local_y&gt; http://ucigrid00.nacs.uci.edu:8002 &#8220;Gateway 7000&#8243;</li>
<li>Individual Gatekeepers may have different policies in place concerning incoming links, so a link request to specific regions inside a grid may very well fail; or it may be required. If you simply specify the URL of the Gatekeeper and omit the region name, the Gatekeeper is supposed to link you to a default region in that grid, if it is defined. If that&#8217;s not defined in the target grid, then the link request will fail.</li>
</ul>
<p>For standalones like D2, there is no difference between &#8220;grid&#8221; and &#8220;simulator&#8221; &#8212; they&#8217;re one and the same. In standalones, the Gatekeeper runs inside the simulator. As a consequence, the HG address is that of the simulator itself. But  the points made above still apply, conceptually speaking.</p>
<p><strong>UPDATE (5/8)</strong>: well, foo! I found one wrong configuration variable in diva-r15402. I made a new release diva-r15402-b that corrects it. If you updated to diva-r15402, please update again, so that you get diva-r15402-b. No need to run Configure on this small update. Just run Update, switch to the new installation, run OpenSim from there and you&#8217;re done. (If you update from an older release, then you need to run Configure, as the instructions say).</p>
<p>Also, I found that it&#8217;s better to remove the old hyperlinks from the DB so that old formats don&#8217;t get in the way of your travels. It&#8217;s very simple. Login to your DB and issue this statement: DELETE FROM regions WHERE flags=524  (524 are hyperlinks)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/d2/new-d2-and-wifi-for-opensim-0-7-1/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Diva Distro for 0.7: Introducing Wifi</title>
		<link>http://www.metaverseink.com/blog/diva-distro/diva-distro-for-07-introducing-wifi/</link>
		<comments>http://www.metaverseink.com/blog/diva-distro/diva-distro-for-07-introducing-wifi/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 18:36:07 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[diva distro]]></category>
		<category><![CDATA[Hypergrid]]></category>
		<category><![CDATA[OpenSim]]></category>

		<guid isPermaLink="false">http://www.metaverseink.com/blog/?p=37</guid>
		<description><![CDATA[It took a long time, but OpenSim 0.7 is finally here! It&#8217;s quite difficult to explain the value of refactorings and of  re-conceptualizations of the software, which is what happened to OpenSimulator between 0.6.x and 0.7. Those things tend to be intangible at first (&#8220;WTF? This does the same thing! And it has bugs that [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://tagus.ics.uci.edu:9000/wifi"><img src="http://farm5.static.flickr.com/4116/4850174762_363f5394ec.jpg" alt="" width="500" height="375" /></a></p>
<p>It took a long time, but OpenSim 0.7 is finally here! It&#8217;s quite difficult to explain the value of refactorings and of  re-conceptualizations of the software, which is what happened to OpenSimulator between 0.6.x and 0.7. Those things tend to be intangible at first (&#8220;WTF? This does the same thing! And it has bugs that it didn&#8217;t have before!&#8221;, etc.); the ROI only shows up later.</p>
<p><span id="more-37"></span>As an example of the new interesting things that can now be done, this new release features an embedded Web application for handling user registrations. It&#8217;s called <strong>Wifi</strong>. The features of Wifi are quite simple:</p>
<ul>
<li>Account creation, optionally controlled by the administrator</li>
<li>Configurable default avatars for new accounts</li>
<li>Account updates by both users and administrator</li>
<li>Account deletion by administrator</li>
<li>Password recovery via email</li>
<li>Simple user inventory management</li>
</ul>
<p>These features are enough for the worlds I run; they&#8217;ll be enough for many people, I think. This is just the first release, I expect Wifi to improve as we go a long &#8212; especially if more people want to help&#8230; I welcome help on this!</p>
<p>See it in action in <a href="http://tagus.ics.uci.edu:9000/wifi">one of my test worlds</a>. Feel free to create a dummy account, login to it, recover your password, etc. And login to the world afterward. You can also use it for testing your own installation of the diva distro by hypergriding to it. (Note: this world is just for demonstration of Wifi and of the latest diva distro release; it will be shut down in a couple of weeks)</p>
<p>Wifi has a few interesting properties that make it a good fit for small-to-medium OpenSimulator-based virtual worlds. First of all, it doesn&#8217;t require the installation of Apache or other Web servers; it&#8217;s all done within the OpenSimulator code base. If you&#8217;re like me, you will think of this as a major win. Not having to install an additional major component like Apache and PHP/Python/what-have-you means less administrative hassle, less load on the machine, and just plain joy. Web app! No Apache! Just OpenSimulator! Yey!</p>
<p>Second, using the OpenSimulator code base brings many technical benefits. This isn&#8217;t an immediate benefit, but it is a benefit in the long run. Unlike the Apache-based Web apps that interface with the DB directly, Wifi interfaces with the OpenSimulator services layer using the core code, and therefore it is isolated from future changes to the OpenSimulator DB schema. In short, and of interest to diva distro users, Wifi will probably never be in the situation that other apps of the same kind are, always on the verge of being discontinued due to the hassle of making it catch up with the OpenSim schema. In the long run, this is a very good thing.</p>
<p>Third, technically, Wifi is a set of components that can be loaded up by both standalone simulators and Robust servers. What this means is that the exact same thing can serve diva distro worlds as well as larger grids in one seamless environment, OpenSimulator. I haven&#8217;t packaged it up for grids, but I might consider doing it at some point. So if your world grows to a medium grid, Wifi can handle it with no hassle.</p>
<p>Enjoy!</p>
<p>And, of course, also enjoy the extra security in HG 1.5, but that is invisible.</p>
<p>Here are the relevant links:</p>
<ul>
<li><a href="http://github.com/diva/d2/downloads">Latest diva distro</a></li>
<li><a href="http://wiki.github.com/diva/d2/installation">How to set it up in 5 steps (6 for *ix)</a></li>
</ul>
<p>If you already have a diva distro up &amp; running, simply run Update.exe on it and follow the instructions. This time, it&#8217;s really important that you read the release notes.</p>
<p><strong>One last important note</strong>: the sequence of upgrades has a &#8216;pivot&#8217; release at r12751. In other words, r12751 is a mandatory stop from all older releases. From r12751 on, upgrade gets you the latest. This new release today is r13458.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/diva-distro/diva-distro-for-07-introducing-wifi/feed/</wfw:commentRss>
		<slash:comments>77</slash:comments>
		</item>
		<item>
		<title>90-Degree Course Adjustment</title>
		<link>http://www.metaverseink.com/blog/hypergrid/90-degree-course-adjustment/</link>
		<comments>http://www.metaverseink.com/blog/hypergrid/90-degree-course-adjustment/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 16:23:30 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[Hypergrid]]></category>
		<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[Linden Lab]]></category>
		<category><![CDATA[second life]]></category>

		<guid isPermaLink="false">http://www.metaverseink.com/blog/?p=32</guid>
		<description><![CDATA[The news came yesterday after lunch: major layoffs at Linden Lab, as much as 30% of their employees. Lindens who had been there from early on, respected engineers, all laid off. All of those who had, at some point, been involved in the idea of virtual world interoperability &#8212; gone. Then the new vision: Second [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img src="http://www.vias.org/radioanteng/img/page_051_100-18.png" alt="" width="471" height="422" /></p>
<p>The news came yesterday after lunch: major layoffs at Linden Lab, as much as 30% of their employees. Lindens who had been there from early on, respected engineers, all laid off. All of those who had, at some point, been involved in the idea of virtual world interoperability &#8212; gone. Then the new vision: Second Life on a browser, accessible to the masses via well-known social networks. Wow. This is what I call a 90-degree course adjustment.</p>
<p>Clearly, I know nothing about the internal situation at Linden Lab. Probably their VC money has dried off, maybe their revenue is not enough to pay so many people. Who knows what&#8217;s behind a 30% &#8216;rightsizing&#8217;&#8230; But the new vision is an indication that this is not just about balancing the budget sheet; it&#8217;s about redefining what Second Life is. LL&#8217;s CEO wants it to be more like FarmVille than like World of Warcraft. Too many people have commented on his vision, I&#8217;m not going to do it. He&#8217;s the head of the company, he should try to make his vision come to  life.</p>
<p>What I want to talk about here is what this 90-degree course adjustment entails for OpenSim. I confess yesterday I had that familiar feeling of having reached the point of having to stand and lead. Not me, personally. But the OpenSim project, as a whole. The torch is on us. Let me explain.</p>
<p><span id="more-32"></span>In spite of being inherently a rebellious project, OpenSim has always existed in the shadow of Second Life. The rebellious nature was, indeed, just a confirmation of that dependency; the kind of relationship teenagers have with parents. A lot of people in the OpenSim community have been assuming that, sooner or later, the large Second Life virtual world would be trading avatars and money with OpenSim-based grids. The Open Grid Protocol (OGP) prototype, <a href="http://www.ugotrade.com/2008/07/31/the-open-grid-beta-the-first-step-to-interoperable-virtual-worlds/">first unveiled in the summer of 2008</a>, was a teaser; a promise of what could come next. Many OpenSim core developers have been deeply involved in efforts for virtual world interoperability, first in the Architecture Working Group, and, recently, in the <a href="http://tools.ietf.org/wg/vwrap/">VWRAP</a> working group at the <a href="http://www.ietf.org/">IEFT</a>. Both of these working groups were led by Linden Lab engineers&#8230; who have been laid off.</p>
<p>In the wake of these layoffs, the idea that Second Life will be part of a larger web of virtual worlds is today more remote than ever. There&#8217;s no one left in Linden Lab to carry the interoperability torch, at least not of the kind we were thinking. It looks more likely that Second Life will be part of the Web itself, complete with the Web&#8217;s inability to deal with portable identity, and therefore eager to serve the largest pool of users on the Web, the 400 or so million Facebook users.</p>
<p>It&#8217;s always hard when the driver we were relying on suddenly makes a left turn from where we thought we were going. The question for OpenSim now is this: do we really want to follow Linden Lab on that left turn? Or do we take the torch and lead?</p>
<p>Personally, the last thing I want to do is to be involved in one more Facebook app. That&#8217;s the kind of interoperability project that I give my undergrad students on a 3-week time period. Not only it&#8217;s technically uninspired, but it&#8217;s missing the core of what I believe interoperable virtual worlds can bring to the Web itself: true, S2S portable identity. Not just &#8220;this is me&#8221; a-la OpenID, but &#8220;this is me, and I have a lot of baggage that I want to access while I&#8217;m visiting your site.&#8221; The vision of interoperable virtual environments is as exciting to me now as it was 3 years ago.</p>
<p>As usual, I don&#8217;t speak for the entire OpenSim project. And it&#8217;s probably too early to internalize what this course adjustment really means for OpenSim. But one thing is for sure: if there is going to be a web of virtual worlds, a <em>decentralized</em> S2S system of 3D environments that can seamlessly exchange user agents securely, that web will be made of OpenSim servers entirely, for the foreseeable future. Second Life is out of the picture.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/hypergrid/90-degree-course-adjustment/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Serverless grids</title>
		<link>http://www.metaverseink.com/blog/hypergrid/serverless-grids/</link>
		<comments>http://www.metaverseink.com/blog/hypergrid/serverless-grids/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 14:34:15 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[Hypergrid]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[OpenSim]]></category>

		<guid isPermaLink="false">http://www.metaverseink.com/blog/?p=22</guid>
		<description><![CDATA[There is a new diva distribution available. It is packaged out of the bleeding edge OpenSim, revision 11056. If you have the previous release installed, you can simply run Update.exe. In the past 2 weeks there has been a lot of plumbing in OpenSim, and things have improved considerably. First and foremost, we have identified [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>There is a new diva distribution available. It is packaged out of the bleeding edge OpenSim, revision 11056. If you have the previous release installed, you can simply run Update.exe.</p>
<p>In the past 2 weeks there has been a lot of plumbing in OpenSim, and things have improved considerably. First and foremost, we have identified and eliminated a memory leak that was causing OpenSim to use all memory over time, and eventually crash. Now OpenSim runs on much more reasonable memory footprint, and stays within that limit [for much longer].</p>
<p>Second, we have rewritten the grid service from scratch. The grid service is the part of OpenSim that manages region registration and lookup. All OpenSim installations have a grid service, even if they are standalones. In fact this distinction between standalone and &#8220;grid mode&#8221; is becoming fuzzier and fuzzier. So much so that it is now possible to have grids by stitching together standalone installations of OpenSim &#8212; without having to run any other servers!</p>
<p><span id="more-47"></span>Here are the instructions for how to do it with the diva distro. Instructions on how to do it with stock OpenSim can be found <a href="http://opensimulator.org/wiki/Serverless_Grids">elsewhere</a>.</p>
<p><strong><em>Instructions for setting up a serverless grid with the Diva distro:</em></strong></p>
<p><strong>1</strong> &#8211; If you want the second instance on the same machine, copy the entire folder of your diva distro into another folder on that machine. If you want the second instance on another machine, copy it to that other machine. Leave the original unchanged. In the copy (or copies), do the following steps.</p>
<p><strong>2</strong> &#8211; Edit Regions/RegionConfig.ini, and change the following fields <strong>for each region</strong>: (a) the name; (b) the RegionUUID; (c) the Location; and eventually (d) the InternalPort. For example, in my case my first region in my original instance is:</p>
<p>[Diva&#8217;s World 1]<br />
RegionUUID = &#8220;9ca5b0b5-0b1e-47b7-ac30-7e0230152de0&#8243;<br />
Location = &#8220;6178,3371&#8221;<br />
InternalPort = 9000</p>
<p>In the copy on the same machine I have:</p>
<p>[Diva&#8217;s World 5]<br />
RegionUUID = &#8220;854a1e57-95f2-42f9-b3c7-2488e0e0bd92&#8243;<br />
Location = &#8220;6176,3371&#8221;<br />
InternalPort = 9004</p>
<p>A couple of important notes:<br />
* Please use truly random UUIDs. Here is a site that generates them for you: <a href="http://www.guidgenerator.com/">http://www.guidgenerator.com/</a>.<br />
* In my case I wanted to place the new 2&#215;2 megaregion to the West of my original megaregion. Hence the coordinates 6176,3371 on the first region of the copy &#8212; the X coordinate is 2 to the left, the Y coordinate is the same.<br />
* Megaregions need to be specified like what they are in that file: the first region is the SW corner, the second is the NW corner, the third is the SE corner and the fourth is the NE corner. Make sure you preserve this order when you make the changes in their coordinates.<br />
* The InternalPorts must be unique for each region, on each machine. In my case, my second instance is on the same machine, so I had to change it. If your second instance in on another machine you can use the same InternalPort numbers of the original megaregion.</p>
<p>Do the necessary changes for the other three regions on that file.</p>
<p><strong>3</strong> &#8211; Edit config-include/MyWorld.ini. The only thing you need to change here, if at all, is in the [Network] section, the http_listener_port. If your second instance is on the same machine, you <em>must </em>change this port &#8212; for example 9001; this port needs to be unique per instance, per machine. If your second instance is on another machine, you can leave it as is. In any case, leave the server urls as they are for the original instance.</p>
<p>Et voila!</p>
<p>Login as usual. You will notice that the SW corner of your original instance now has neighbours to the left. In principle, you can cross back and forth, and teleport between regions as normal. In practice, crossing between instances with megaregions is still under heavy work and may produce surprising behaviour. For example, crossing from the original SW corner to the copy SE corner may end up being an auto-teleport, or you may get stuck in limbo, etc. Don&#8217;t be alarmed, this is &#8220;normal&#8221; behaviour for the time being, and these quirks will be fixed in future releases. <strong>For the time being,whenever you want to switch instances I recommend teleporting between SW corners of the different instances</strong> &#8212; that works pretty reliably.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/hypergrid/serverless-grids/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Standalone but Join the Party</title>
		<link>http://www.metaverseink.com/blog/hypergrid/united-we-stand/</link>
		<comments>http://www.metaverseink.com/blog/hypergrid/united-we-stand/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 15:28:55 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[Hypergrid]]></category>
		<category><![CDATA[OpenSim]]></category>

		<guid isPermaLink="false">http://www.metaverseink.com/blog/?p=21</guid>
		<description><![CDATA[It&#8217;s no secret that I love OpenSim standalone installations more than &#8220;grids&#8221;. For most things I envision doing with virtual worlds, including installations in my university, I can&#8217;t see the value of having a huge virtual space that is both shared between several tenants and centrally managed. The things I like to do fit perfectly [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s no secret that I love OpenSim standalone installations more than &#8220;grids&#8221;. For most things I envision doing with virtual worlds, including installations in my university, I can&#8217;t see the value of having a huge virtual space that is both shared between several tenants and centrally managed.  The things I like to do fit perfectly in a few regions managed and controlled by me.  The UCI Grid is about to become a web of hypergrided standalones. I suspect that many people are on the same boat. It used to be the case that standalones were solitary worlds that didn&#8217;t connect to anything or anyone; with the Hypergrid, that has changed. Standalones now can connect to the rest of the Metaverse &#8212; OSGrid, ReactionGrid, your friend&#8217;s standalones, etc. It&#8217;s a big world out there, and you can access it from your own small world.</p>
<p>I&#8217;m happy to announce Metaverse Ink&#8217;s &#8220;Diva Distribution&#8221;&#8211; a lean and mean OpenSim distribution targeting hypergrided standalones that comes preconfigured and that is very easy to keep up to date with newer releases of OpenSim. The Diva distribution is, literally, my personal preferences using the many configuration options of OpenSim. Here is what it consists of:</p>
<ul>
<li>MySQL as the DB backend. I used SQLite for a long time. SQLite is really easy to use, it requires no installation, it&#8217;s great for beginners. However, it&#8217;s clear that SQLite doesn&#8217;t scale well for long-term worlds. Moreover, using a MySQL server on the backend enables very interesting hybrid architectures that I will be talking about soon. The diva distribution requires some expertise for setting up MySQL, but it&#8217;s worth it. The instructions that come on the distribution make the MySQL setup for OpenSim really easy.</li>
<li>ODE Physics. Easy choice here. Even the official OpenSim distribution is about to change to ODE as the default physics engine.</li>
<li> XEngine as the scripting engine, and lsl as the scripting language. XEngine is the most stable of the scripting engines we currently have, and lsl is the most widely used scripting language. All other language support is still experimental and fairly insecure.</li>
<li>One Megaregion of 512&#215;512 meters. That&#8217;s right! Megaregions just made it into OpenSim, thanks to Teravus, and they are working great. With megaregions there are no border crossings, everything is very smooth.</li>
<li>MetaverseInk Search. If you want to make your world searcheable, mark your parcels &#8220;Show in search&#8221;, and they will be listed on MISearch&#8217;s engine. Others can teleport to your world from search results. Everyone can do this on their OpenSim by setting a certain configuration variable; the diva distribution has that preconfigured.</li>
</ul>
<p>Over time we plan to add more goodies to the diva distribution, so stay tuned.</p>
<p>Additionally, the diva distribution contains two tools that make it really easy to configure and update your installation. They are:</p>
<ul>
<li>Configure: this is the tool you should run after unziping the first distribution. Be ready to tell it (a) the name you want to call your world; (b) the password for the MySql DB opensim account; (3) your externally visible IP address or domain name. Once you answer these questions, Configure will do all necessary configurations for you. You don&#8217;t need to edit any .ini files.</li>
</ul>
<ul>
<li>Update: once you get the first installation set up, updating it is as easy as running the Update tool. Update asks no questions from you, it just does the right thing.</li>
</ul>
<p>While the diva distribution comes preconfigured with my own preferences, it is possible to change these preferences to yours. For example, if you want more than a 512&#215;512 megaregion, you can add more regions. The instructions for how to do that come in the documentation that is included in the distribution.</p>
<p>So where can you get it? Get it at <a href="http://github.com/diva/d2/downloads">http://github.com/diva/d2/downloads</a> &#8212; the file to download is called diva-rNNNN.zip, which is listed at the bottom of that page.<br />
Unzip it, read README, and follow the instructions from there.</p>
<p>Let me finish this post by reminding everyone that the current version of the Hypergrid, which we call HG1, is fairly insecure. Don&#8217;t take your favorite avatar to places that you don&#8217;t trust. HG2 is coming, but it&#8217;s not here yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/hypergrid/united-we-stand/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
	</channel>
</rss>
