Preserving content creator credit in OpenSim IAR transfers September 25, 2009Posted by justincc in iars, opensim, opensim-dev, secondlife, virtual-environments, virtual-worlds.
Last week I blogged about the new experimental Inventory Archive (IAR) format in OpenSim. This week I want to explore how much content creator information it preserves and how this could be increased in the future.
The current situation
For any object, the OpenSim Archive (OAR) format (as of OAR version 0.2) saves the creator’s unique system UUID, such as 517d9f5d-2ef2-49ba-a47c-c1658ffe715f. This means that the creator details are preserved only if the OAR is loaded on the same system. If the OAR is loaded to another OpenSim installation then the creator defaults to the master avatar since that target system has no profiles that match the unique ID.
IARs (as of IAR version 0.1) go one step further by saving the creator’s name rather than the ID. This is done in a prototype format known as an OpenSim Profile Anchor (OSPA). This is buried in the XML that describes an item in an IAR. Here’s an example.
<?xml version="1.0" encoding="utf-16"?> <InventoryItem> <Name>boxee</Name> ... <CreatorUUID>ospa:n=Justin Clark-Casey</CreatorUUID> ... </InventoryItem>
In this case, the boxee item was created by me. So the OSPA is ‘ospa:n=Justin Clark-Casey’ where the n attribute is my name. When the IAR is loaded to another OpenSim installation, if a profile exists with this name, then that profile is registered as the creator.
This is a little better but clearly still far from ideal. Most OpenSim installations onto which an IAR is loaded will not have a user profile for the given creator. Furthermore, the target system may have a different user with the same name (though I’m not sure if there’s more than one Justin Clark-Casey in the world), or more than one user could have the same name (which is defacto possible in OpenSim though not recommended). In these cases the loaded item may end up being associated with the wrong person.
Copy the profiles
One solution would be to save the entire creator’s profile into an IAR. That way, if the creator doesn’t exist when the IAR is loaded then their profile can be recreated. But this doesn’t really address the issue of different users on the target OpenSim with the same name (should the existing user profile be registered as the creator or an imported one?). It also can result in the creation of lots of profiles on big OpenSim grids. Nonetheless this may still be a good solution for small specific-purpose grids or OpenSim applications.
Put profiles on the web
A more adventurous approach is to include a URL pointing to an external profile somewhere on the web. The OpenSim installation to which an IAR is loaded would store creator URLs in its database rather than UUIDs. When the profile is needed it would be fetched from the web.
This is what OSPAs were looking to accomodate. Under this system, a creator reference might look something like
<?xml version="1.0" encoding="utf-16"?> <InventoryItem> <Name>boxee</Name> ... <CreatorUUID>ospa:n=Justin Clark-Casey,p=http://justincc.org/my-vw-profile</CreatorUUID> ... </InventoryItem>
where the p attribute contains the URL referencing an external profile. The n attribute remains as well in case the URL can’t be retrieved (somewhat analagous to alt attributes in HTML).
This scheme solves the doppelganger problem (users with the same name) since URLs are unique to a particular creator. There’s also the added bonus in that the creator can update their profile after the content has been released.
However, there are still major problems to overcome. One is that it’s very difficult to shoehorn OSPAs into the Second Life system. Second Life expects UUIDs everywhere and OpenSim has inherited this tendency. Storing OSPAs means storing arbitrary strings rather than just UUIDs – this requires messy OpenSim architectural compromises and the evolution of existing internal data formats.
The current SL protocol also expects to reference profiles by UUIDs. not by arbitrary strings or URLs. The workaround is to create ‘temporary’ profiles in OpenSim where OSPAs are hashed to UUIDs. This is a very complicated task that creates a lot of holes to seal up. I was some way down the path with this earlier this year but unfortunately I’ve since had to deprioritize the work.
Preserving creator identities when transferring content between separate grids is a challenge. Nonetheless, I believe that it’s an important feature that could further promote the evolution of the OpenSim content ecosystem. I also believe that it’s possible with the current Second Life infrastructure, albeit with a number of hacky compromises and workarounds. Luckily, in the open-source world even imperfect solutions light the onward path.
I’m also hopeful that future protocol work (such as the Linden Lab led VWRAP and other efforts) will make creator identity preservation easier.
Please note that none of what I’ve said addresses the issue of Digital Rights Management. It’s trivial for anybody to change the saved creator information. But I think that preserving creator information by default would be a good step forward.
All this is very experimental stuff that has largely just come out of my own head. I hope to develop it further but I’m not sure how much time I’m going to get in the short term. So I would love to hear comments, alternative solutions or code patches for this area of OpenSim.