A while back, before the 2.0 announce interrupted our conversation, I had
made a post about what I saw as three different forms of client-side
scripting/plugins/whathaveyou.  I've since been convinced that I missed
something.

So here goes again, with a (hopefully) improved set of definitions:

Client Plugins - Binaries compiled per-platform and placed in a special
folder in the client directory by the user/admin of the client's
installation.
  These should have no security restrictions, and should have access to any
file on your computer that the system allows, and access to any internal
process of the client.
  Provides the ability to build parts of the client without recompiling: eg.
Client-side script interpreters, better joystick support, expose further
public APIs via sockets or whatever, etc.
  Also is free to access system libraries, such as OpenGL, windowing
toolkits, etc.

Client Extensions - Interpreted code packages placed in a special folder in
the client directory by the user/admin of the client's installation.
  These should run in a broad sandbox: Limited local disk access (max
datastore size, etc.) to a special file in the local user folder. Eg:
~/.secondlife/slfirst_lastname/extensions/extensionname.eds  (Extension
DataStore) But can still access much the same client hooks as the Plugins.
  Provides fast prototyping, and lower entry difficulty, than Plugins, but
will most likely not have the freedom to tap into a lot of system stuff.
 Also will not typically run as fast or in as little memory space as the
binary plugins.

Dynamic Client Scripts - Interpreted scripts loaded from the server via the
server-side permissions system.
  May still need a better name...
  Could be stored in Notecards and a server-side script could petition, via
llRequestPermissions, to be able to request that the client download the
notecard named via a llLoadClientScript(string name, integer channel) or
similar command. The notecard would then be downloaded by the client and the
plugins/extensions that had registered as able to interpret scripts would
then be queried as to their ability to understand the code, and the one that
answered with the most certainty could be given the task.  Some sort of
first-line header in the notecard would help this process along.
  Executed within TIGHT sandboxing: Limited, or no access to local disk
storage, and limited to tasks such as drawing on the HUD layer of the GUI,
creating floaters to draw in, communicating back to the world via the
predefined channel number, etc.  The limits are, of course, up to the
plugin/extension maker.  Another potential limit would be the automatic
unloading of the script when the host object is out of range, or is no
longer attached.  Of course the Plugin maker could decide when, or if, the
user should be asked before loading the script, even if the server-side has
given its permission.
  Provides the ability to make advanced HUDs, radars, etc.  These would
mostly eliminate the need for object-based HUDs, improving server speed by
taking non-content load off the server, and still allow the specialized
groups in SL the ability to create HUDs and tools that users could be given
automatically upon entering a "role-play" area.

UserScripts (Term borrowed from GreaseMonkey) - Interpreted scripts loaded
dynamically into the client by the user.
  Function just like Dynamic Client Scripts, except the source is the user
themselves opening a local text file, or opening a console window and typing
commands.
  Provides local quick changes, and even personal never-touched-the-server
HUD objects, floaters, etc.  Lowest entry difficulty of the whole set of
ideas.


Note that should the Client Plugins be implemented, all the rest, and more,
could and would be implemented in droves.  Also any security restrictions,
or lack thereof, would be created by the plugin designer.  The above
security restrictions would then be only guidelines.

These seem to cover the whole range of what has been discussed so far.
 Morgaine's interpreted client scripts/plugins communicating via sockets
would be considered Client Extensions and would be implemented starting with
a really generic Client Plugin.  This is assuming that I've understood
Morgaine's idea correctly! :)

Yes, I've been mulling this over and over in my brain since the previous
conversation was interrupted....  I had just gotten to the point where I was
enjoying the back and forth of problem solving!

Ricky
Cron Stardust
_______________________________________________
Policies and (un)subscribe information available here:
http://wiki.secondlife.com/wiki/OpenSource-Dev
Please read the policies before posting to keep unmoderated posting privileges

Reply via email to