Friday, April 9, 2010

RLV 2.0... working on it !

Hello and sorry for having been so silent lately, I deliberately stayed away from all the fuss around the TPV policy and the new ToS. I have voiced my point of view once, and that was enough. But I've been very attentive to all the concerns raised on the os-dev mailing list and various forums ever since.

But the main thing I've been doing lately has been keeping me far busier than this : I am working at porting the code of the RLV from SL 1.23 to SL 2.0. It has taken me weeks of non-stop coding and testing (weekends included) because the two source codes are so radically different that a total rewrite was actually not out of question. And it's not over yet.

First of all, let me say that I do not dislike 2.0 too much, it actually looks slicker than 1.23, even if it was hard to change my habits because it clearly does not behave the same way. I hated it at first but I'm slowly growing to getting used to it. Some parts make more sense than in the older versions, when you think about it LL wants to tend towards a "metaverse", which is no less than a 3D web. Hence the browser look-and-feel for the new viewer. It makes sense because conceptually regions are like websites, landmarks are like bookmarks, etc. Some correlations can be done. And I like it because some features were clearly broken in 1.23 and LL had the guts to start them over from scratch, sending the message that they are going to improve them and finally fix some old-time bugs. I still prefer 1.23, though, because it generally offers more power to the user (and requires less clicks for the same actions).

Porting the RLV from 1.23 to 2.0... is a nightmare. We are talking about a source base that has been worked on behind closed doors for a year at LL, before being released to the users with all the changes that it implies. Most of the code that the RLV specification impacts has changed, or is actually not there anymore, which means recoding manually and retesting it all. Some controls have vanished (the upper status bar, some floaters), some have dramatically changed (the lower control bar, the chat bar), some are new (the side tray for instance). Most of the restrictions issued by the RLV were broken, even "detach" had to be fixed. Not to mention the new concept of links (which is a good concept, but the RLV was not able to handle them natively), outfits and worn items. Worse, some intrinsic paradigms in the source code have changed, and this made the port even harder. I can say that practically every single feature of the RLV has been recoded one way or another.

To give you a glimpse of the task, here are the features that were still working (the rest was broken badly or very badly) :
- automatically reattaching locked items after being kicked off
- @recvim, @recvchat
- focusing in-world while Blocked
- @redirchat
- @tplm, @tploc, @tplure
- @fartouch
... and that's about it. Every other feature of the RLV was broken and had to be either fixed or recoded. Granted, everything is not even tested yet, namely @setenv and its suite of commands, I don't know whether they still work or not. The damage assessment is not even complete yet.

But I'm getting there. Most of the features work again, there are still a few things to fix, and a lot of testing to do. The only thing that worries me is that I am actually working on the source code of Snowglobe 2.0 (since Viewer 2.0 is closed source), its first version to be exact, and it does not run with the Beta version of the SL viewer 2.0. Well, it does run, but some XML files must be missing which prevent me from logging on using Beta 2.0. So I can't say that RLV 2.0 works with Viewer 2.0 yet. It works with Snowglobe 2.0 and that's already it.

All this to say that I am not quitting, nor stopping developing on the RLV, but I wanted to avoid conjectures until I had something solid to present. Of course I can't provide any ETA yet, it could be weeks before I can publish an acceptable RLV 2.0. And even then, it would certainly still contain bugs and oversights that would have to be fixed over time.

Please bear in mind, though, that the two projects (1.23 and 2.0) are so radically different that adding a feature to one does not mean it can be added to the other easily. 90% of the time it can't be ported without being entirely recoded. So unless it is small and easy enough, I am not going to add any feature to RLV 1.23 anymore. It is not the time to add features anyway, it is the time to make the damn thing cross the gap and keep living on. Because eventually SL 2.0 will become mandatory and 1.23 will stop working. Better safe than sorry.