The SL Object Model
The virtual world that is Second Life consists of a bank of servers, each of which is responsible for managing objects, terrain, and avatars, and for ensuring that clients connected to the server are updated in a timely manner. Each server coordinates the interaction between avatars and in-world objects. Objects do not have an ability to react to inputs from avatars or other objects; they have to be scripted to come to life. Ordinarily, your responsibility as a developer ends with writing the logic for an object, but in SL, creating a lively and responsive world combines two development disciplinesobject creation and object scripting.
SL hosts a combination tool (in effect, an IDE), both for creating tangible objects and giving them the ability to react to their environment. There are no restrictions on the sorts of objects you might dream up. Every visual element from shape to material to texture is possible to specify and tweak. Everything you create is a series of simple or linked polygons. In fact, your avatar itself and everything it interacts with is either a single 3D polygon (a "prim" in SL speak), or a grouping of linked prims. Whenever you right-click on any prim, a circular menu is visible, revealing both the limited built-in behaviors and those that you have given it via scripting.
Figure 1 shows an avatar having right-clicked on a chair, and sets of choices appear as pie slices in a circular menu. The few choices available are a representative set of defaults. A logical choice in this case might be "Sit Here." More complex behaviors must be added by developers attaching responses to potential interactions. Scripting is done via the Linden Scripting Language.
LSL has evolved through a couple iterations, but currently seems to have a stable set of APIs in the SDK. Studying the API reference (lslwiki.com or mirrors such as http://rpgstats.com/wiki/index.php?title=Main_Page), you find a rich API for doing everything from imparting physical motion, collision detection, and movement, to connecting SL objects with the Internet.