<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:arial,helvetica,sans-serif;font-size:12pt"><div>Well, I'll merely say that I have the highest of respect for jhurliman's opinion and what he says here seems like a set of reasonable ideas.<br><br>Charles<br></div><div style="font-family: arial,helvetica,sans-serif; font-size: 12pt;"><br><div style="font-family: arial,helvetica,sans-serif; font-size: 13px;">----- Original Message ----<br>From: "Hurliman, John" <john.hurliman@intel.com><br>To: opensim-dev@lists.berlios.de<br>Sent: Friday, August 8, 2008 11:44:59 AM<br>Subject: [Opensim-dev] Standardizing types in OpenSim<br><br>
Hello list,<br><br>This is my first e-mail to opensim-dev so I'll start with an<br>introduction. I'm an engineer at Intel researching scalable models for<br>virtual worlds. A lot of the research will revolve around open,<br>user-generated content models like Second Life and OpenSim. I'm also the<br>primary developer of libOpenMetaverse (formerly libsecondlife, still<br>located at <a href="http://www.libsecondlife.org/" target="_blank">http://www.libsecondlife.org/</a> for the time being).<br><br>I've spent some time looking at the lower level components of OpenSim<br>and have a patch to propose. The basic type objects (vector, quaternion,<br>rays, etc) are spread out and duplicated over several internal classes<br>and external libraries. There are at least five different types of<br>Vector3, multiple quaternion and matrix classes, etc. Some of these are<br>classes instead of structs, meaning a basic operation like subtracting<br>two vectors and putting
 the result in a third creates several new<br>objects on the heap that the garbage collector has to track. I believe<br>this is responsible for a lot of the heavy memory and garbage collector<br>activity I am seeing. There is also a lot of duplicated code which has<br>led to incorrect constructors (such as new Vector3(x, y, y)) and makes<br>things more difficult to unit test.<br><br>The OpenMetaverse library has a set of types useful to virtual worlds<br>that have been in development for two years and implement all of the<br>functionality needed in OpenSim. I've created a very large patch that<br>upgrades OpenSim from libsecondlife to the latest libOpenMetaverse,<br>drops Axiom, and uses the built-in libomv types wherever possible. There<br>are a few places that I have skipped over for now to avoid introducing<br>too many moving parts in a single patch: BulletX still uses Mono.Xna,<br>and Meshmerizer still uses PhysicsVector/Vertex/Triangle.<br><br>I've
 spoken with some of the OpenSim developers about problems keeping<br>up with libsecondlife changes. The major changes happened to prevent a<br>trademark conflict with Linden Lab, and also establish libopenmv as a<br>generalized platform for building virtual worlds instead of a library to<br>connect to Linden Lab's servers. I think this patch is an important move<br>in that direction, and to prevent any future headaches I'm volunteering<br>to maintain the OpenSim->libOpenMetaverse dependency in the event of any<br>API changes.<br><br>I'm working on grid mode compatibility testing (sandbox mode appears to<br>work fine) and will have the patch on Mantis early to mid next week. So<br>far the patch itself weighs in around 1.7MB plus binaries. Twenty<br>revisions have passed since I initially wrote it and maintaining it<br>against the latest SVN can be time consuming, so I wanted to kick start<br>with this e-mail before posting the patch.<br><br>John
 Hurliman<br>_______________________________________________<br>Opensim-dev mailing list<br><a ymailto="mailto:Opensim-dev@lists.berlios.de" href="mailto:Opensim-dev@lists.berlios.de">Opensim-dev@lists.berlios.de</a><br><a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br></div></div></div></body></html>