Mono Beta Refresh

Β The Mono regions on the beta grid were updated with a new simulator binary on Friday that resolved the following issues:

* SVC-1325 Negation of vector or rotation no longer causes a runtime error.
* SVC-1342 Boolean && and || now correctly produce boolean results.
* SVC-1327 Added support for llHTTPRequest.
* SVC-1319 Added support for http_response.
* SVC-1325 int *= float now works correctly.
* SVC-1361 Corrected erroneous sleep values for some library calls.
* SVC-1324 Fixed problem with vector and quaternion being incorrectly handled by the UThread Injector.
* SVC-1344 Fixed problem with type casting of return statements.
* SVC-1353 Limited length of concatenated lists and strings.
* SVC-1326 Changed llGetFreeMemory() reporting for Mono scripts to return 0-64K and handle script reset correctly.
* SVC-1312 Fixed support for old scripts on the LSL2 VM.

Unfortunately the redeploy took longer than expected and so the grid wasn’t available for the office hours at 3PM on Friday. We still plan to hold office hours in Sandbox Goguen MONO on the beta grid at 8AM on Wednesdays and 3PM on Fridays. The chat log from last Wednesday’s meeting is here.

Thanks to everyone for the great response to the Mono beta test.

About babbagelinden

Software Engineer at Linden Lab
This entry was posted in Preview Grid, Scripting. Bookmark the permalink.

44 Responses to Mono Beta Refresh

  1. jade carnot says:

    if my entire inventory from 1/30 is never returned after all efforts by me, does that mean it’s lost for ever?

  2. Pingback: Great Responses? | Second Life Sucks

  3. richard says:


  4. Pingback: Second Life Beta : Mono Beta Refresh at Daikon Forge

  5. Broccoli Curry says:

    Is there anywhere you can suggest where us non-programmer types can read up about mono and start learning?

  6. Creem says:

    >> * SVC-1325 Negation of vector or rotation no longer causes a runtime error.

    Just out of curiosity, why would anybody negate a rotation? I’m pretty sure that negation of every term would result in the same rotation that you started with. The only reason I can think of is if the rotation is being used as a struct to hold 4 floats (and isn’t representing a quaternion at all).

  7. Proxima Saenz says:

    So.. the objects are gone..
    Hope you didnt loose any expensive objects Jade…
    Maybe you can contact a Linden in world?

  8. RobbyRacoon says:

    @Broccoli – If you want to know more about Mono as a technology, then you can go to the Mono Project home page at

    More information about how Second Life will use Mono can be found here :

    For now, the idea seems to be that implementing a Mono VM for LSL scripts will be transparent and will not change how Second Life scripts are written, though in the distant future it may be possible to write scripts in other languages like C#. In the short term, though, it would seem that the primary advantages will be faster execution times and a more solid backend and memory management.

  9. RobbyRacoon says:

    @Creem – Dunno why you’d negate a rotation, but it shouldn’t cause a runtime error. As for negating a vector, there are many many reasons why you might want to do that, it’s actually quite useful. I assume you already know that, but wanted to point out that it’s part of the same Jira issue.

  10. Arth Karas says:

    Thanks for the helpful links, RobbyRacoon.

    Thanks for the update, Babbage Linden.

  11. Incogneko says:

    Sweet. The sooner Mono is up and running on the Main grid, the happier I’ll be. I’m also very encouraged that, at least for the Mono team, the comments that we are submitting about the Mono beta actually seem to be resulting in fixes (or at least some sort of activity)! Nice work guys.

  12. U M says:

    omg your joking right?????! GONE!??!?!?!?

  13. Drake Angelus says:

    Have U guys tryed clearing your cache files ,then once SL is closed going into your windows folder then Prefetch folder…in there u will see files that are Secondlife realated…Delete them. Then Restart your Secondlife clinet..Most of the time this works…Been useing this solution to help for yrs. And if it dont work then SL asset server has lost it.

  14. Drew Dwi says:

    is anyone able to login using the MONO beta client? I’m not. Just gets stuck at the “Logging in…” part.

  15. Moll Dean says:

    # 01

    Hello folks

    If you have lost inventory issue, you can try

    Ctrl+P and clean the cache files. Then log off once and run SL again.

    This will proaably fix the inventory issue. Otherwise contact the support.
    The Linden Lab does not refound you or replace lost objects. They will tell you that they are so sorry. That you may vote in some issue tracker number and that they are working to fix it.
    Do not forget to ask them to give us the ability to backup our own inventory into our RL hard-disk. Would you like to?
    About Mono S
    Joke. Do Mono Sims stream stereo music?
    Seriously. Is that the next SL generation? and how much it will cost?

    Good luck guys.

  16. Guy says:

    Completely off topic, but as people are mentioning losing inventory… just wait until you get the “Unable to create requested object. Object is missing from database.” error.
    Your solution is to clear your cache (its missing from the database….) and #2 suggestion from Linden Labs (quote)

    Request a replacement
    Many vendors understand that items may be lost by accident or as the result of an unfortunate circumstance. If recovery efforts fail, contact the vendor and request a replacement.

    Vendors are refusing to replace items because its far to easy to buy a no copy item and claim SL ate it…

    Back on topic….

    It appears Mono won’t do crap for the end user and Mono doesn’t appear to introduce anything to scripters, just a different engine in the background.

    Wooohooo WAY TO GO, way to introduce a whole new set up bugs, Lindens!

  17. Perefim Cao says:

    Anyone every took the time to think about how horrible of an indicator that MONO is going to be one of bad things for SL? I mean.. who thinks of the sick idea of naming a computer program after contagious disease or virus whatever it may be, and expect it to have positive results. That is like naming a computer program AIDS.. and saying.. hey guys.. enjoy AIDS… AIDS will revolutionize Secondlife.. hurray for AIDS…

  18. Okay, I’ve been keeping track of Mono since it was originally announced.
    Here’s the original presentation, something like August 2006:

    Here’s the low down.

    Mono is a replacement back end for LSL2.
    LSL2 is the current Linden Scripting Language we all know and loath to work around.
    LSL1 hasn’t been seen since 2003/2004 (thankfully… even Cory Linden says it’s nasty, and he wrote it in a day!)

    Basically, here’s what’s going to happen.
    Current Situation:
    The main grid, “Agni”, runs LSL2 directly and is shared between two simulator versions:
    Havok1 Reference (Normal mainland continents and private islands)
    Havok4 Beta(Between 180-300 Private Islands betatesting ‘for real’)
    The beta grid, “Aditi”, is currently shared between three simulator versions:
    Havok1 Reference (Same as AGNI)
    Havok4 Beta (In progress, working well now!)
    Mono LSL2 Backend Beta (In progress, 4 sandbox sims online)
    Near Future:
    The beta grid, “Aditi”, will complete the havok4 beta, and focus will shift to integrating Mono & havok4 which is likely already being worked on concurrently.)
    The main grid, “Agni”, will complete it’s switchover to havok4-only.
    Further Future:
    The beta grid, “Aditi”, will complete the mono beta, next focus unknown)
    The main grid, “Agni”, will complete it’s switchover to havok4/mono/LSL2.

    Yes, current LSL2 coexists with mono. There is a checkbox to choose which backend you wish to use. All your old scripts will continue to work ‘indefinitely’ on the older, slower LSL2. Tick the checkbox to opt-in to using mono, which is faster and uses more memory, but we now get 64KB instead of 16KB. *BIG* difference.

    Far future:
    It has been mentioned that LSL2 should be considered near the end of it’s life. This does not mean it will be going away — LSL2 is a GREAT beginner language because of it’s small size and event driven nature.
    It does, however, mean that LSL2 will probably NOT be getting any more super-nifty features barring the ones that *MAY* already be in the pipeline like http_server ( ) but it unknown if that project has mono as a requirement or not.

    Switching to the mono backend allows other languages besides LSL2 to run at the same time.

    It means that by 2010 (*MY* guess) other selected, audited languages, might make their way onto the grid. C#, Python, Ruby, and Perl would be likely candidates.

    Keep in mind that this is probably NOT going to give you free reign of these languages. It is likely only Linden Labs selected & audited assemblies will be online and running on the simulator. You will NOT be able to upload your own ‘untrusted’ assemblies.

    With the switch from LSL2 to Mono, we’re also making a big change as well:

    Scripts will no longer be compiled on the client and uploaded in two parts to the server. The script text and the executable bytecodes are stored seperately.

    Scripts will now be uploaded, text-only, to a compile-server, which will compile the script to CIL assemblies, inject management UThreads, and that server will then store the compiled form in the asset cluster.

    This means all mono bytecode stored in the asset cluster should have come from a ‘trusted’ compiler that Linden Labs directly controls, which should have provided all of the necessary containment to run that script in a simulator context.

    Any persons attempting to upload malicious code will likely be discovered with these precautions.

    (Note, OpenSim already has support for running C# directly in the simulator context by starting the text of a script with “//C#”, no memory limit, great for embedded projects! OpenSim runs fine on a Linksys NSLU2 Arm266Mhz/32MB network device for serving between 3-5 users without collision physics. I’ve built a simple ‘web-config’ out of SL prims that will execute linux scripts, anywhere I have SL access I can poke around in my network and run linux commands via chat. SL’s REALLY a neat interface for a embedded system! You can build a replica of the real device in prims, right down to the prim LEDs being roughly synced with the real device’s LEDs!)

  19. Incogneko says:

    Now you guys are grasping at things to complain about… what, regular issues aren’t enough for you?

    Everyone has been annoyed at the poor server performance and Sim lag – Mono will address those things (remember, you screamed endlessly for LL to “fix” things and make SL less laggy?). Now that Mono is approaching useability, you complain that it “won’t do crap for the end user” nor “introduce anything for scripters” – c’mon, do you even know what Mono is?? Worse yet, you complain to LL that it has a funny name???
    Linden Labs deserves a lot of criticism for the way they’ve handled many things, but for once they’re implementing something that will improve the experience and you guys are so stuck in the SL SUCKS knee-jerk rut that you just make up idiotic things to gripe about.

  20. LaeMiQian says:


    Mono is the word for ‘monkey’ in Spanish. The people that started the Mono project had a run on monkey-related names for projects for a while (Simian, Bonobo, etc.)

    Still, the name Mono always makes me think of the line in Wayne’s World πŸ˜‰

  21. Should anyone wish to link to my comment explaining the game plan, here’s the link:

    Write to be understood, speak to be heard, read to grow. — Lawrence Clark Powell

  22. Wayfinder Wishbringer says:

    Just curious, since I’m not acquainted with MONO. How will this be an improvement over LSL? Does the language change? I haven’t found information regarding MONO on SL or why it’s being implemented. Just curious; apparently coders consider it an improvement, but i know nothing about it.

  23. Wayfinder Wishbringer says:

    @19 Kamillion

    Thanks for the rundown. Would like to know more on how MONO works in the SL environment. Is there a webpage somewhere that has the structure and syntax of the language as used in SL?

    I did disagee with one statement:
    “LSL2 is a GREAT beginner language because of it’s small size and event driven nature”

    I agree that the event driven nature is kinda neat. Probably the best feature of LsL. But great beginner language? I have to disagree there. LsL IMO is clunky and cumbersome and never uses one simple piece of code when 12 complex pieces will do.

    A good example, often badmouthed by coders, is the [expletive deleted] Eular math, which make rotation computations a pain in the tushie. A simple rotation line could be llRot(x,y,z,speed);…. but noooo… let’s make it rocket science instead. Why HUDs rotate differently and require a totally different sound statement than Rezed objects is anyone’s guess.

    A very simple example of poor design is:


    While this isn’t a really bad statement, the vector indicators are totally unnecessary from a programming standpoint. They take up 2 unnecessary bytes of code and if left out cause the statement to not function. Not user friendly, and definitely not beginner friendly. The statement logically could have been greatly reduced by changing the syntax as follows:


    Much shorter, much simpler, much more easily understandable. In addition, using RGB settings of 0.0 to 1.0 is contrary to the industry standard of 0-255, which means coders are forced to perform percentage calculations just to enter the values.

    While we’re at it, using “ll” in front of each statement is a little goofy too. That takes up a LOT of coding space that could otherwise be used for code.

    There are dozens of such examples in LsL which make this language very new-programmer unfriendly. I truly hope MONO uses some intelligent coding syntax and logic… and that it gets rid of that ridiculous eular math. Yeah, LsL needs updated much. Looking forward to MONO. Know nothing about it… but it HAS to be better. πŸ˜€

  24. The language will not be intentionally changed. The aim is 100% compatibility with LSL2.
    It’s being implemented because it’s faster behind the scenes and more future proof. Mono is also standard code that *Novell* is backing. It’s an open source implementation of microsoft’s .NET framework, which has specified “CIL”, or Common Intermediary Language.

    Check out this picture for a good visual overview:

    The Common Language Infrastructure (CLI) is an open specification (published under ECMA-335 and ISO/IEC 23271) developed by Microsoft that describes the executable code and runtime environment that form the core of a number of runtimes including the Microsoft .NET Framework, Mono, and Portable.NET. The specification defines an environment that allows multiple high-level languages to be used on different computer platforms without being rewritten for specific architectures.

    Basically, it means you can write code once and it will run on just about anything that can run a ECMA-335 and ISO/IEC 23271 compatible virtual machine.

    (By the way, an “architecture” means something like amd/intel X86 or Motorola/IBM PowerPC or ARM or MIPS (PC/NewMac, Older Mac, Cellular/PDAs, and common home game consoles, respectively.))

  25. A good beginner language is one that teaches you to solve problems in creative ways.

    And personally, I would have preferred llSetColor(0x00FF00, ALL_SIDES);
    (by the way, ALL_SIDES is simply an alias for -1! Just like llWhatever is simply an alias to smaller bytecode…)

    Read more about Mono here:

    Read more about SL’s Mono beta here:
    and here:

  26. Post Bab says:

    The notion that implementing MONO will significantly change LSL is incorrect. LSL will remain more or less as it is, it’s the machine interpreting the code that is changing.
    Switching to MONO makes it theoretically possible that SL scripters will be able to use any variety of languages instead of LSL, but even if that one day becomes the reality, it’s a long way off. For now MONO will help LSL code run faster which will mean less laggy Sims for the average SL Resident. (At least, that’s the plan).

  27. Post Bab says:

    Sorry, last comment should be directed at 23.

  28. Very Keynes says:

    @5 Broccoli Curry specifically but well worth watching for all.

    It is a presentation by Cory and Babbage to a M$ conference about the mono implementation in SL. warning large download (~150MB) and long session (~90min).
    But the first 30 min is the best and most insightful description of SL ever, not to mention hilariously funny in parts – we really will miss you Cory, the second 30min is a good idea of mono in the SL context and the 3rd 30min (with my apologies to Babbage, is all “Geek speak” but fascinating to those with a computer architecture background.

  29. Stan Binder says:

    Kamilion, there is one point you made that is not correct in my opinion. So far there is only server-side compilation of LSL2 -> CIL. This will change in my opinion, just because they want other languages as well. But it is nearly impossible for LL to maintain several compilers. But it is possible to maintain one Bytecode-Verifier. Bytecode-Verifier may not be the correct technical term, what I mean is some code that checks the CIL.
    That’s actually my interpretation of this blog:

  30. LaeMiQian says:


    Re: Rotation Maths: I believe that while RPY is fine for defining a static rotations, once you start doing maths on them you hit a thing called Spin-Lock very quickly. It is the sort of thing that can come very close to crashing moon-shots (and crashing physics engines), so yes it IS rocket-science πŸ˜‰ And Yes, I hate it to: welcome to the LaeMi school of plugging in random rotation values until it works πŸ˜‰

    Re: 0-255. This is NOT an industry standard across languages – it is ONE common way of representing colour (though only in a 24-bit colour space). Using a float value from 0 to 1 is another COMMON method that is often preferred as it doesn’t lock you into a fixed bit-width colour space (the Apple Mac uses a 48-bit colour space internally — at least last time I programed on one, which was admittedly back in the System-8 days). A fractional colour representation is also more friendly to people who (unlike you and me) are not used to working in non-base-10 systems. Personaly, I would prefer to work in hexadecimal if I was representing colour components as raw bytes ;-X

    I agree that LSL is a bit of a hodge-podge these days in many ways. That is what happens when a language is created by bolting-on of afterthoughts on an as-needed basis and LSL is by no means the first language to do that.

  31. Anarchy Tigerpaw says:

    i lost 300L$, >.< FIX IT!!!

  32. Very Keynes says:

    @19 Kamilion Schnook
    I must learn to read all the blog entries before posting πŸ™‚
    but in my defense I wanted to get it in before the blog filled.
    Mono will benefit the whole of SL users, not just scripters and in reality, the scripters are here for your benefit also, how else would things in SL work?, but so far it would appear that MONO will run considerably faster, have better memory management and allow more complex scripts, so from the casual user perspective, Less lag, better toys and more choices.
    As for the name, did presidential Aids adversely effect government?

  33. Kerik Rau says:

    @ LaeMiQian

    Colors are represented by a vector with each value ranging from 0.0 to 1.0 in Cg and DirectX’s HLSL. So in this case they probably used the standard instead of having to convert it to a usable format.

  34. Very Keynes says:

    Sorry to go off topic, but comments are closed on the next blog (I wonder why)
    [/quote]After an intensive effort we tracked the problem down to an Internet networking hardware problem between our data centers at one of our service providers. The problem was reported to them and then promptly fixed [quote]
    Isn’t it nice when you can blame a supplier and make them jump because you are there best customer? Now perhaps you could pay them a consulting fee to fix your internal network on behalf of your customers seeing as 503 errors are now entering the 3rd week and going strong.

  35. Bucky Barkley says:

    >> β€” LSL2 is a GREAT beginner language because of it’s small size and event driven nature.

    LSL is an embarrassment. Rather than doing the right thing and embedding an existing language such as Lua/Tcl/Perl/PHP, etc, Cory hacked something up. He didn’t bother adding some very basic things, such as associative arrays. Now his attitude is “I dont work on that any more”. I know because I asked him. And dont try to sell me on “strides”. They are a poor substitute. The only reason many of us put up with LSL is because there is no alternative.

    I find it amusing that one of the bugs was support for “&&” and “||”. How do you put out a preview without getting that one right?

    Oh well, we’ll eventually get there.

  36. Tenebrous Pau says:

    Note that the issue for ‘int *= float now works correctly’ is not wrong – it’s not SVC-1325. Couldn’t find the real one after a quick search, sorry.

  37. Bokrug says:

    Bucky Barkley: “I find it amusing that one of the bugs was support for “&&’ and “||”. How do you put out a preview without getting that one right?”

    I thought that was pretty funny too. Makes you wonder, did they test this AT ALL before releasing the preview?
    Hey Babbage, go look up the definition for regression testing – it’d be good if at least someone at LL was familiar with the term.

  38. Hewitt Huet says:

    @ Kamilion:

    Thanks so much for that brief but VERY comprehensive synopsis. Some of us more advanced users were have a bit of trouble understanding what was available where, to who, what it did and didnt do and which cluster to find it all on.

    @ Bucky:

    You that THAT right ^^

  39. Elvis Orbit says:

    Great to see both Havok 4 and mono on the way to a great future on SL. Thanks for this πŸ˜€ Good work and keep us informed.

  40. LaeMiQian says:

    @ Kerik Rau – yes, that too πŸ˜€

    Speaking of IT things named similar to diseases, another news feed just ran an article about people donating their brains to MS researchers. Took me a moment to realise Bill Gates wasn’t about to play Dr. Frankenstein πŸ˜›

  41. Gaius Goodliffe says:

    @35 & 37: If you actually understood what the bug was, rather than just quoting the summary, it’d be pretty easy to see how an error like that could go undetected. Expressions involving “true” boolean values (0 and 1 only) will work correctly regardless of whether the operators are “&” and “|” or “&&” and “||”. It’s only when you’re counting on “treat anything other than zero as true” that such expressions cease to be equivalent.

    And, by the way, you understand what testing is, right? You seem to be criticizing them about putting something up on the beta test grid without having finished testing it. I don’t think you’re quite understanding the concept of a beta test grid.

    @37 specifically: you might want to look it up yourself. It appears Babbage understands the concept better than you, since he’s actually DOING it, and you’re criticizing him for doing it. (Again, are you unfamiliar with the concept behind a beta test grid? Or are you expecting them to magically test things without testing them? How, pray tell, do we do testing if they don’t put it on the grid in order to test it against our old scripts?)

    “OMG there’s bugs on the beta test grid!” Duh…

  42. Bokrug says:

    If you had any understand of the fundamental role that boolean operators play in a language, you would not with a straight face tell me that testing their operation is part of the Beta release process. Give me a break.

  43. Pingback: Second Life Beta : Mono Beta Refresh « Samurai Pickle

Comments are closed.