opensimulator: project & framework
TRANSCRIPT
Crista Lopes
UC Irvine
(Diva Canto, OS developer)
OpenSimulator: Project & Framework
Outline
• Project history, statistics and dynamics
• The OpenSimulator Software Framework
• Weaknesses & Wish List
• Development with / for OpenSimulator
• Research with / for OpenSimulator
Opensimulator @ OpenHub
https://www.openhub.net/p/opensimulator
Opensimulator @ OpenHub
https://www.openhub.net/p/opensimulator
Who are the developers?
• ~45% Entrepreneurs
• ~30% Hobbyists
• ~30% Companies
• ~5% Academics
[Teigland et al 2012] http://nordicworlds.net/2012/03/14/round-two-of-academic-paper-on-opensimulator-community/
Diverse 3-tier community
Developers
Operators
End users
Power / Interest Grid
Powe
r
Interest
Core devs
Core testers
Grid operators
Users
Code contributors
What the Project is not
• Single commercial venture backed up by stable revenue
• Operators of a common grid
• Birds of a feather
Tremendous impact in software architecture
THE FRAMEWORK
Dealing with conflicting visions
1 2 3
One vision wins Growth in all directions Small core + plugins
Simulator
Assets Inventory Avatar …
Login Service
User Accounts
User’s “viewer” client
Internet
OpenSim.Region.PhysicsModule.*
Software Architecture – Simulator
OpenSim.Framework
OpenSim.Region.Framework
OpenSim.Framework.HttpServer
OpenSim.Framework.Servers
OpenSim
OpenSim.ApplicationPlugins.LoadRegions
OpenSim.ApplicationPlugins.RegionModulesController
OpenSim.Region.OptionalModules ... OpenSim.Region.CoreModules
/OpenSim/Startup
/OpenSim/RegionModules
Software Architecture – Services
OpenSim.Framework OpenSim.Data
OpenSim.Services.Interfaces
OpenSim.Services.*
OpenSim.Data. SQLite OpenSim.Data.MySQL
OpenSim.Region.CoreModules
OpenSim.Region.Framework
Software Architecture – Robust Backend
OpenSim.Framework
OpenSim.Framework.HttpServer
OpenSim.Framework.Servers
Robust /Robust/Connector
OpenSim.Data
OpenSim.Services.Interfaces
OpenSim.Services.*
OpenSim.Data. SQLite OpenSim.Data.MySQL OpenSim.Region.CoreModules
OpenSim.Region.Framework
OpenSim.Server.Handlers OpenSim.Services.Connectors
Software Architecture – Simian Backend
OpenSim.Framework
Simian Infrastructure
(Apache + PHP)
OpenSim.Services.Interfaces
OpenSim.Region.CoreModules
OpenSim.Region.Framework
OpenSim.Services.Connectors
Software Architecture – Any Backend
OpenSim.Framework
Any Infrastructure
OpenSim.Services.Interfaces
MyNetworkConnectorModules
OpenSim.Region.Framework
OpenSim.Region.PhysicsModule.*
Software Architecture – Clients?
OpenSim.Framework
OpenSim.Region.Framework
OpenSim.Framework.HttpServer
OpenSim.Framework.Servers
OpenSim
OpenSim.ApplicationPlugins.LoadRegions
OpenSim.ApplicationPlugins.RegionModulesController
OpenSim.Region.OptionalModules ... OpenSim.Region.CoreModules
/OpenSim/Startup
/OpenSim/RegionModules
Software Architecture – SL Client
OpenSim.Framework (IClientAPI)
OpenSim.Region.Framework
OpenSim.Framework.HttpServer
OpenSim.Framework.Servers
OpenSim
OpenSim.Region.ClientStack.LindenUDP
OpenSim.Region.ClientStack.LindenCaps
/OpenSim/RegionModules
Many Feature Modules
Software Architecture – Other Clients
OpenSim.Framework
OpenSim.Region.Framework
OpenSim.Framework.HttpServer
OpenSim.Framework.Servers
OpenSim
/OpenSim/RegionModules
Feature Modules My Protocol Module
Software Architecture – Physics
OpenSim.Framework
OpenSim.Region.Framework
OpenSim.Framework.HttpServer
OpenSim.Framework.Servers
OpenSim
/OpenSim/RegionModules
OpenSim.Region.PhysicsModule.*
OpenSim.Region.PhysicsModules.SharedBase
Software Architecture – Alternate Physics
OpenSim.Framework
OpenSim.Region.Framework
OpenSim.Framework.HttpServer
OpenSim.Framework.Servers
OpenSim
/OpenSim/RegionModules
My Physics
OpenSim.Region.PhysicsModules.SharedBase
Software Architecture – Scripting
OpenSim.Framework
OpenSim.Region.Framework
OpenSim.Framework.HttpServer
OpenSim.Framework.Servers
OpenSim
/OpenSim/RegionModules
OpenSim.Region.ScriptEngine.XEngine
OpenSim.Region.ScriptEngine.Shared*
Software Architecture – Alternate Scripting
OpenSim.Framework
OpenSim.Region.Framework
OpenSim.Framework.HttpServer
OpenSim.Framework.Servers
OpenSim
/OpenSim/RegionModules
My Scripting Engine
OpenSim.Region.ScriptEngine.Shared*
SL Viewer Protocol Module LLUDP Server SL Viewer Feature Modules LLCAPS Modules
Script Engine Module Physics Simulation Modules
Another View of the Architecture (Simulator)
OpenSim
Startup Plugin Loader
Region Loader Region Modules Loader
3D Scene Manager
...
HTTP Server
Resource Service Connectors
...
Architectural Principles
• Inversion of control: framework users can add any additional features / capabilities by developing their own plugins
• Default replaceable implementations: everything that is important has a default implementation in the core distribution that is replaceable by framework users who can code
• Conservative Additions: new plugins may or may not be added to the core distribution depending on many factors, including:
• How much users want it
• Control over its evolution (plugin dev’s decision)
• Overhead of its maintenance (core devs’ decision)
WEAKNESSES AND WISH LIST
Framework Issues
• Leakage of the LL client onto the core of the framework • Makes supporting other clients difficult
• Still some entropy on plugin mechanisms • Mono addins vs. roll-our-own
• Some APIs aren’t completely generic
• 3rd party package management
• Documentation
Default Plugins Issues
• XEngine is littered with bugs, some of which cause instability of the whole simulator
SL Application Issues
• Inappropriate, inflexible UI
• Complicated networking, unsuitable for corporate uses
• Does not support casual viewing (install required)
DEVELOPMENT WITH / FOR OPENSIMULATOR
Developing New Applications
• Assuming the Linden viewer as is:
• Server-side plugins
• UI development with Linden viewer / LSL scripting
• Assuming new viewer
• New viewer itself
• Server-side plugins, including protocol
New Module
Developing New Applications
Simulator
Assets Inventory Avatar …
Login Service
User Accounts
New Application
Internet
New Module New Module
Viewer: Evolution vs. Revolution
• Evolution
Rendering engine par to none for amateur 3D content
It is possible to address the networking and UI issues
• Revolution
Modern graphics
Programmable/downloadable everything, including UI
Criteria for deciding
• Ease of creating 3D environments
• Ease of experiencing 3D environments
• Single user vs. multi user experiences
• Target users (corporate vs. home)
• Funding available
RESEARCH WITH / FOR OPENSIMULATOR
OpenSimulator from a research perspective
• Distributed real-time interactive system with simulation, graphics and scripting • Everything that’s hard in software!
• Open source • We can play with it!
• With sizeable user community • Impact! (and ethnography too!)
• What’s not to love?!
Interesting Research Challenges
• Scalability – more users, more content, more events
• The N^2 problem
• Assessing system design alternatives
• Multi-dimensional matrix
• Scripting
• Multi-tenancy execution engines, Server-side vs. client-side computations
• Testing distributed RT systems, non-functional properties
• The lost world of Software Engineering
• Detecting problems without testing
• Static analysis, better type systems
• Documentation
• English from source code?
• Independent but related aspects of simulation
• Better software processes through technical means
• Decentralization of VEs
• Social engineering through technical means
technical
social (NSF)