<div dir="ltr"><div>This email is to start the discussion about enabling the 'ossl' functions by default.</div><div><br></div><div>OpenSimulator has many additional LSL scripting functions[1][2]. These functions are never used because they are off by default. Any region operator can enable them but most do not. Since they are not available, OpenSimulator is not as cool as it could be and some necessary scripting is not possible[3].</div><div><br></div><div>Why are they off by default? Two reasons: compatibility and security. 'Compatibility' is because some people believe that keeping LSL scripts compatible to SL is important. 'Security' because some of the 'ossl' functions are Really Dangerous and present amazing griefing opportunities.</div><div><br></div><div>For 'compatibility' I would suggest those few region operators that care just turn off the 'ossl' functions[4].</div><div><br></div><div>For 'security', I am not suggesting turning on all the 'ossl' functions but only enabling the safer ones in all cases and controlling access to the other functions.</div><div><br></div><div>The 'ossl' functions are grouped by ThreatLevel[5] which is a rough estimation of how dangerous the function is. 'dangerous' is an evaluation of how much damage the function can do to region operation if used by naive or malicious scripters. Even with the threat levels, the 'ossl' functions can be individually enabled for everyone, parcel or estate owner or member.</div><div><br></div><div>I propose to make the following addition to OpenSim.ini[6][7]:</div><div>===================BEGIN ADDITION ========================</div><div>[XEngine]</div><div>   AllowModFunctions = true</div><div>   AllowOSFunctions = true</div><div>   AllowLightshareFunctions = true</div><div><br></div><div>   OSFunctionThreatLevel = VeryLow</div><div><div>   </div></div><div><div>    ; TreatLevel None</div><div>    Allow_OsDrawEllipse =           true</div><div>    Allow_OsDrawFilledPolygon =     true</div><div>    Allow_OsDrawFilledRectangle =   true</div><div>    Allow_OsDrawImage =             true</div><div>    Allow_OsDrawLine =              true</div><div>    Allow_OsDrawPolygon =           true</div><div>    Allow_OsDrawRectangle =         true</div><div>    Allow_OsDrawText =              true</div><div>    Allow_OsGetAgents =             PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsGetAvatarList =         PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsGetCurrentSunHour =     true</div><div>    Allow_OsGetHealth =             true</div><div>    Allow_OsGetInventoryDesc =      true</div><div>    Allow_OsGetMapTexture =         true</div><div>    Allow_OsGetRezzingObject =      true</div><div>    Allow_OsGetSunParam =           true</div><div>    Allow_OsGetTerrainHeight =      true</div><div>    Allow_OsIsUUID =                true</div><div>    Allow_OsList2Double =           true</div><div>    Allow_OsMax =                   true</div><div>    Allow_OsMin =                   true</div><div>    Allow_OsMovePen =               true</div><div>    Allow_OsParseJSON =             true</div><div>    Allow_OsParseJSONNew =          true</div><div>    Allow_OsSetFontName =           true</div><div>    Allow_OsSetFontSize =           true</div><div>    Allow_OsSetPenCap =             true</div><div>    Allow_OsSetPenColor =           true</div><div>    Allow_OsSetPenSize =            true</div><div>    Allow_OsSetSunParam =           PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsTeleportOwner =         true</div><div>    Allow_OsWindActiveModelPluginName = true</div></div><div><br></div><div>    ; TreatLevel Nuisance</div><div>    Allow_OsSetEstateSunSettings =  ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetRegionSunSettings =  ESTATE_MANAGER,ESTATE_OWNER</div><div><br></div><div>    ; TreatLevel Very Low</div><div>    Allow_OsGetDrawStringSize =     true</div><div>    Allow_OsGetWindParam =          true</div><div>    Allow_OsReplaceString =         true</div><div>    Allow_OsSetDynamicTextureData = PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetDynamicTextureDataBlend =    PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetDynamicTextureDataBlendFace = PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetDynamicTextureURL =  PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetDynamicTextureURLBlend =     PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetDynamicTextureURLBlendFace = PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetParcelMediaURL =     PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetParcelSIPAddress =   PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetPrimFloatOnWater =   true</div><div>    Allow_OsSetWindParam =          PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsTerrainFlush =          ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsUnixTimeToTimestamp =   true</div><div><br></div><div>    ; TreatLevel Low</div><div>    Allow_OsAvatarName2Key =        PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsFormatString =          true</div><div>    Allow_OsKey2Name =              PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsListenRegex =           true</div><div>    Allow_OsLoadedCreationDate =    PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsLoadedCreationID =      PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsLoadedCreationTime =    PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsMessageObject =         true</div><div>    Allow_OsRegexIsMatch =          true</div><div><br></div><div>    ; TreatLevel Moderate</div><div>    Allow_OsDropAttachment =        PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsDropAttachmentAt =      PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsGetGridCustom =         PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsGetGridGatekeeperURI =  PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsGetGridHomeURI =        PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsGetGridLoginURI =       PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsGetGridName =           true</div><div>    Allow_OsGetGridNick =           true</div><div>    Allow_OsGetNumberOfAttachments =PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsGetRegionStats =        PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsGetSimulatorMemory =    PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsMessageAttachments =    PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetSpeed =              PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div><br></div><div>    ; TreatLevel High</div><div>    Allow_OsCauseDamage =           PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsCauseHealing =          PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsForceDropAttachment =   PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsForceDropAttachmentAt = PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsGetAgentIP =            PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsGetLinkPrimitiveParams =PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsGetPhysicsEngineType =  true</div><div>    Allow_OsGetPrimitiveParams =    true</div><div>    Allow_OsGetRegionMapTexture =   PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsGetScriptEngineName =   true</div><div>    Allow_OsGetSimulatorVersion =   true</div><div>    Allow_OsMakeNotecard =          PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsMatchString =           true</div><div>    Allow_OsNpcCreate =             PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsNpcMoveTo =             PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsNpcPlayAnimation =      PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsNpcRemove =             PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsNpcSay =                PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsNpcShout =              PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsNpcSit =                PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsNpcStand =              PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsNpcStopAnimation =      PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsNpcTouch =              PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsNpcWhisper =            PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsParcelJoin =            ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsParcelSubdivide =       ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsRegionRestart =         ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetContentType =        PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetParcelDetails =      PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetPrimitiveParams =    true</div><div>    Allow_OsSetProjectionParams =   PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetRegionWaterHeight =  ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_OsSetStateEvents =        false</div><div>    Allow_OsSetTerrainHeight =      PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div><br></div><div>    ; TreatLevel VeryHigh</div><div>    Allow_osAvatarPlayAnimation =   PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_osAvatarStopAnimation =   PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_osGetNotecard =           PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_osGetNotecardLine =       PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_osGetNumberOfNotecardLines = PARCEL_GROUP_MEMBER,PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_osGetRegionNotice =       ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_osSetParcelDetails =      PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div><br></div><div>    ; TreatLevel Severe</div><div>    Allow_osKickAvatar =            PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_osTeleportAgent =         PARCEL_OWNER,ESTATE_MANAGER,ESTATE_OWNER</div><div>    Allow_osConsoleCommand =        false</div><div>===================END ADDITION ========================</div><div><br></div><div>Putting all this in OpenSim.ini will make clear what permissions can be set and what one is giving away.[8]</div><div><br></div><div>Well, what do you all think?</div><div><br></div><div>== mb</div><div><br></div><div>[1] <a href="http://opensimulator.org/wiki/OSSL">http://opensimulator.org/wiki/OSSL</a></div><div>[2] <a href="http://opensimulator.org/wiki/Category:OSSL_Functions">http://opensimulator.org/wiki/Category:OSSL_Functions</a></div><div>[3] The particular use I'm running up against is vehicle scripts needing to know which physics engine is being used in the region.</div><div>[4] Region operators who want SL compatability are most likely people who have built their own configuration file system anyway so they are not using the default OpenSimulator configuration files in any case.</div><div>[5] <a href="http://opensimulator.org/wiki/Threat_level">http://opensimulator.org/wiki/Threat_level</a></div><div>[6] the 'mod' functions are an LSL language extension system that allows new OpenSimulator modules to easily add functions and constants to the scripting language.  See <a href="http://opensimulator.org/wiki/OSSL_Script_Library/ModInvoke">http://opensimulator.org/wiki/OSSL_Script_Library/ModInvoke</a>. Future emails will expound on this feature.</div><div>[7] one suggestion is to put this permission list in a new INI file that is included into OpenSim.ini rather than directly into OpenSim.ini.</div><div>[8] If a region is selling parcels, some of the PARCEL_* permissions might need removing. A note to this effect could be added.</div><div><br></div></div>