I love helping new residents get addicted... er, I mean acclimated to Second Life. Here are some notes I've picked up along the way that might be of help.
What is Mono?
John and Mary
John and Mary are LSL scripters. John prefers the old-fashioned way of doing things, while Mary enjoys all the latest new technology, like Mono. They both write LSL scripts. John runs his scripts under the old way, and Mary runs hers using Mono.
When John writes an LSL script and clicks the Save button, the client viewer compiles the script into proprietary bytecode and uploads it to the servers. The server runs the script by using a proprietary interpreter to interpret the bytecode. It runs slow.
Mary writes the identical script -- no change in the LSL language syntax. When she presses "Save", the client uploads her script text to the servers where it gets compiled into standardized CIL assembly language. (CIL is a bytecode that originally came from Microsoft's .NET technology.) Because the Linden servers are Linux machines, there's no .NET framework available to run the CIL code. So the servers use the open-source Mono framework to execute the CIL. Mono includes an open-source JIT ("Just in Time") compiler that converts the CIL bytecode into machine code as it's needed, and that compiled machine code is what makes the script execute 20 - 220 times faster than the old way.
How it all Flows
LSL ---> LSL compiler ---> proprietary bytecode ---> LSL bytecode interpreter
LSL ---> LSL compiler | C# (future) ---> C# compiler | ---> CIL bytecode ---> Mono CIL execution engine Other languages (future) ---> other compiler |
Do Scripts Running in Mono Get More Memory?
Yes, it's true that each Mono script gets 64K of memory to use. Non-Mono scripts have to fit inside 16K of memory. (That's compiled code plus stack plus heap.) Unfortunately, Mono is a bit of a memory hog and can take up to 3.25 times as much memory as the old runtime environment. So, scripts using Mono end up with a little more memory to play with, but not four times as much. The advantage to the servers is that small Mono scripts only consume as much server memory as they actually use, while the older LSL virtual machine had to allocate a chunk of 16K of memory to every script regardless of how much memory it actually needed.
LSL - Used to refer to the whole system -- the language, the front-end compiler, and the back-end interpreter. Now it's confusing because it's used in one of two ways and its meaning depends on the context: (1) LSL is the language, the source code, which has not changed with Mono. E.g., "Take this LSL script and compile it with Mono and it will run faster." Or (2) LSL refers to the old compiler front-end and interpreter virtual machine back-end. E.g., "When I compile this script with LSL it runs very slowly." Both meanings are used in the sentence, "This LSL script was compiled with LSL, but that LSL script was compiled with Mono."
Can We Use Other Languages?
Mono just runs CIL bytecode. It doesn't know or care what the original language was. At this time (first quarter 2008) only LSL source code can be compiled into CIL and run on Mono. But soon we will probably be able to compile C# and maybe other languages into CIL which will run under Mono. A single object could contain scripts that originally were written in different languages.
The LSL language -- the source syntax -- will probably be supported for a long time, but eventually we might have to write new scripts in languages other than LSL.
However, the servers will support both back-ends for a very long time -- the one that executes the old proprietary LSL bytecode, and the new Mono virtual machine that executes standard CIL. All the millions of existing LSL scripts compiled the old way will continue to run indefinitely. New LSL scripts may be compiled using the old LSL compiler or the new Mono compiler.
What To Expect After Mono Hits the Main Grid
- Old LSL scripts already compiled: will continue to run indefinitely.
- Any LSL script if you have the source code: can be recompiled under the old LSL compiler or the new Mono compiler, at your choice, for a long time to come.
- C# and other languages: probably added at some future time.