Why doesn’t Imprudence have multilayers, inventory links, or mesh rendering?

Other viewers have them, so why don’t we? Why would a developer purposefully avoid such useful features–ones that users clearly want?

The answer is something of a mixed bag, and to get into it I’ll first have to explain a little bit about licensing and how licensing works. If you already know this stuff, please bear with me as I’ll get to my point soon.

As many of you know, Imprudence is licensed under the GPLv2+FLOSS Exceptions. The GPL is basically a software license that allows for free and open code. It’s because of this that we can easily share our code and incorporate others’ code in turn. Even so, the GPL doesn’t allow us to do whatever we want. There are certain restrictions, such as:

  • You cannot change the license of any line of code unless you are the original author, you hold copyright on that code, or the license permits it. When we get a patch submission, the author must license their code in a compatible fashion.
  • You may not distribute works based on GPL code that violate any part of the GPL itself. Doing so leaves you open to legal action.

So, how does that impact us, exactly? Imprudence is opensource. Second Life is opensource. Why can’t they work together? Here’s where the restrictions of the GPL come in: a bit over a year ago, Linden Lab decided to change the license for the Second Life viewer from GPL+Exceptions to LGPL–a similar-sounding but ultimately different license. While the LGPL is compatible with the old license, there’s no way to go from LGPL to GPL+Exceptions. This put a massive hurdle in our way as far as porting features from the Second Life.

For example, say someone submits a viewer 2/3-based patch to Imprudence.

While the GPL and LGPL are considered compatible licenses, we don’t own the copyright on the LGPL code submitted to us. Thus, we cannot change the license of that source to include exceptions. Whatever code was licensed as LGPL must stay LGPL (or equivalent) and that distinction must always be made clear wherever that code is used.

This might not sound like much of a hurdle (and at times it isn’t–we switched over to the LGPL version of our Quicktime plugin ages ago) but consider the Inventory Links patch that’s currently in most other viewers. It contains ~43K lines of code, and is made up of an unknown mix of GPL+Exceptions viewer 1 code and LGPL viewer 2 code. The two licenses are not made distinct, so the patch is clearly a violation. There’s no way we could legally use it as is.

However, if we could figure out which lines are compatible with Viewer 1 and which ones are compatible with Viewer 2, we could add the appropriate licensing and include the patch. Needless to say, this has felt like a daunting task to us, especially when we’ve been more focused on bug fixes and finalizing 1.4.0 (if you’re using 1.4 and aren’t on beta 2, I strongly recommend upgrading) as far as Imprudence goes. But, these are features you guys need. We want to include them.

My plan is to start looking at these patches one by one and sorting out which lines we can use and which lines need refactoring. As I mentioned in a comment on the beta 2 post, any volunteers who can help us with this process are welcome. Codie and I will be starting on this later tonight, and we’ll see how far we get. If you’d like to join us, please email me at mccabe@kokuaviewer.org and I’ll tell you what you can do.

You might find yourself asking, why go through so much effort for something like a little licensing issue? Why be so concerned when the author of the patch didn’t seem to be?

Our answer has always been–almost from the project’s inception–that while sometimes doing things the right way isn’t easy, these concerns are important to us. It’s thanks to licenses like the GPL, as well as the rules that accompany them, that opensource software has matured to the level it has today. Free and open software gave us the ability to start Imprudence (and later Kokua). We feel an obligation to respect that.

Anyway, I hope this clarifies for people where we’re coming from, and why we’ve done some of the things we have.

EDIT: I’ve updated this post a bit to try to make things clearer.

32 Responses to “Why doesn’t Imprudence have multilayers, inventory links, or mesh rendering?”


  1. Inc

    You’re following the letter of the license, but not the spirit. The purpose is freedom and we’re missing important/awesome features because of some bureaucratic silliness.

    The code was made LGPL and GPL because it was meant to shared freely, so frankly as an end user “I don’t give a damn” about the details of the licenses themselves… I want the bloody features that every other major TPV user takes for granted! Arrrrrgggg!

  2. McCabe Maxsted

    As developers of the software, even if we didn’t care about the letter of the license we’d still have to abide by it. Both licenses are legally enforceable. It sucks that stuff like this gets in our way (we want you to have good features too) and that LL has could solve it in five minutes by dual-licensing their source, only to have them ignore us every time we’ve brought it up. But, that’s reality for you.

  3. Tali

    Your diligence and high standards is one of the reasons I’ve felt comfortable using Imprudence and recommending it to others.
    But I must say that the lack of some features has become a dealbreaker for me, and I have moved to LL’s v3. (Not another TPV v3, I should note).
    My take is: Don’t waste time backporting more to v1. It’s a shambling zombie which will only become harder to maintain.
    Tie a bow on a stable 1.4 as is, for those who insist, and then move on to bring the color purple to v3.

  4. Inc

    Thank you for responding to my comment. Is there a Linden JIRA thingy I can click on to encourage the Linden developers to dual license their code?

    Imprudence has been my favorite viewer for a while but I haven’t been using it recently because of the missing features.

  5. Tinker

    IANAL, but I understood that LGPL software could be ‘promoted’ to GPL, not just by the copyright owner, but by anyone who chooses to redistribute the software. (See section 3 of LGPLv2, and section 2b of LGPLv3.)

    Though I tend to agree with Tali, I’d much rather see time and effort devoted to Kokua.

  6. trinity

    i hate sounding brash and straight up but i can no longer keep my peace

    first of all your understanding of how the gpl and lgpl are quite lacking and i think you need to consult the FSF a bit as to what this all realy means. the SGPL is completely compatible with the GPL and exists to alow bridgeig between GPL code and non GPL and code

    second if you look at the source code for the the meta-Impy viewer fork of 1.4 by dave over on onefang.net it already has a mesh lubrary that is non sl based and the mesh rendering suport started in his fork is free free for you to grab amd use in stock imprudance and the former project manager was going to use it from what i was told but now he is gone ( perhaps ran off by parties interested in other ideas ) you al would rather abandon 1,4 and Push for the 2.x code base and take another year and a half to create something stable and as useful.and sticking to aurora because in reality that’s all you really care about. so for all intents and porpoises if you want a 1,4 based viewer for opensim with mesh and other useful features use and support meta-impy so that the aurora devs can focus on there little wet dream as they plan on leaving the 1,4 user high and dry as wel an opensim

  7. McCabe Maxsted

    @Tinker: you can make a one-way conversion from LGPL to plain GPL. The issue for us is that we don’t use plain GPL, but rather a GPL+Exceptions license. You can’t convert LGPL to that (at least according to the FSF). So, we’re not *truly* GPL because we still rely on the exception list we inherited from LL, but oh is that another can of worms. I didn’t want to further confuse people by going into it. Basically, there’s no way to convert Viewer 2 code to Viewer 1 code right now.

    @Inc: there isn’t one so far as I know. Why not create one? :)

  8. McCabe Maxsted

    @Trinity. There’s compatible, then there’s converting code. We can include LGPL code, but not convert it to our current licensing form. And I did consult with the FSF, actually. Nobody was run off, and nobody is being abandoned here.

  9. Excalibur Steamlander

    As I read LGPL, code so licensed could be distributed under the (even freer less restrictive) GPL. The exception (as I understand it) is to allow inclusion of non-GPL/LGPL code without being in violation of GPL for the portions created by the Nameless Lab. Since they own the copyright for their own code, they can do that.

    This confusion is why the LGPL (sometimes called Library GPL instead of Lesser GPL) licensed code should be spun off into an actual linkable LGPL library.

    Or alternatively we should all be spending more time contributing to OpenMetaverse (which is a BSD-esque license). I see hundreds (if not thousands) of programmer hours being squandered trying to dance around a buggy code base with a client server model that is almost guaranteed to make for laggy bandwidth wasting metaverse.

  10. onefang

    @trinity Since you mentioned my meta-impy viewer and it’s mesh code, I should chime in here.

    The mesh library I use (libg3d) is licensed as LGPL version 2.1 or later. It’s meant to be linked, and that’s what I do. I’ve modified my copy, and that modified copy is in my github repo, thus complying with the LGPL. The code I wrote that links to it is GPL version 2, so that should be OK for Imprudence to use.

    I think the patches McCabe mentioned are NOT link libraries, but I’ve not looked at them. I trust his judgement though. It’s including parts of a patch from one licensed file into a file with a different license, where the Imprudence team are not the authors of either, that is the difficulty. THAT requires tracking down which bits of the patch are licensed under which license. We don’t want to end up with every second line of source code having to include a notice like “This line is LGPLV2.1, except the characters from the 23rd position until the 47th position, which is GPL 2 only, and 53 to 56, which are 3 clause BSD”.

    On the other hand, my mesh code is still highly experimental, even if it is being used by people. The current code base has two different styles of including meshes in world; the old proof of concept one (with the visibility bug and it’s workaround, plus other limitations); and the new style that tries to be a real object, but so far is not working well (may even crash). The old one is fairly stable, but it’s due to be removed once I have the new way working. I would not suggest people start creating lots of content based on the old style.

    I also don’t support LL style meshes yet, but that is on my TODO list. The library is modular, and currently supports quite a lot of common and obscure mesh file formats. The new style code already includes partial support for LL style meshes, and the mesh library supports COLLADA, so that’s half way there. I’ll NOT be taking any code from V2 viewers to do this however.

    Imprudence 1.4 is in a feature freeze at the moment, so no more features are going in until it’s full release. That makes sense, it’s typical to do that. We missed the window for getting OTR in, it was almost ready.

    From what I understand there is internal interest in the Imprudence team to continue with 1.4 after it’s release, which will welcome OTR, my mesh, and other new features. They are happy to accept my patches, and two of them are in the process of being included right now. This is likely why you heard about the former project manager wanting to include my mesh code. I did discuss it with her, but there was no firm commitment.

    If not, well I’ll keep going with my Impy 1.4 based meta-impy, I have zero interest in slavishly following SL into V2 and beyond. That’s one carrot and stick I wont fall for.

  11. Crim Mip

    It seems like while the devs on the team here have been spending a lot of time worrying about the convolutions of licensing various lines of code, they’ve forgotten that most end users don’t give a rat’s rear. They just want a viewer with a reasonable feature set including the basics that every other viewer has (working media streams for instance.)

    I gave up on Imprudence when they couldn’t even get that working over all the hand wringing about licensing. Apparently all the other TPV teams should be sued by the FSF or something. I don’t see it happening.

    Imprudence 1.4 is too little and way too late to the party. Worse yet, it still won’t have features most expect in a 1.x based viewer at this point mesh or no mesh. If this hardened bit of poop is what’s holding back putting the full development effort into Kokua, then for crying out loud, take a laxative, squeeze it out and move on.

  12. Marcus Llewellyn

    I’m going to chime in only to provide a “me too” to the sentiments from Tali and Tinker regarding Kokua. I would far rather see you guys moving to the V2/3 codebase and building on that. People dedicated to keeping the old code relevant are spending time playing catch up and reinventing what LL has already done when they could be spending their time doing what TPVs do best; improving the user experience.

    Im not saying there isn’t a place for the old codebase. But it’s not where I personally wanna see Team Purple expending it’s efforts.

    Get Imprudence stable and out the door. Even in it’s alpha state, Kokua already provides multilayers, inventory links, mesh, a better renderer with shadows and lighting, etc., allowing you guys to spend your time addressing the bizarre UI choices LL has not regarded as a priority, or has found excuses not to fix.

  13. McCabe Maxsted

    I think people are reading way too much into this. We’re not suddenly changing direction, abandoning Kokua, shifting bases, etc. This is just something both Codie and I’ve wanted to do for a while, and I thought it’d be nice to post about the challenge behind it–as well as why these features weren’t ever merged in the first place.

  14. xia xue

    i have to jump on the “update kokua” bandwagon here… for the simple fact that V1, even a V1 that’s kept up to date, will begin to ‘break’ more and more as LL puts in server-side features that v1 simply can’t handle while maintaining stability. XMPP chat anyone? even the well-maintained V1-based viewers are beginning to die a loud kicking and screaming death over the past couple months, why continue to focus there when you’ve got a perfectly good v2 foundation sitting under your noses that only needs a little TLC to pull itself out of preview/beta status?

  15. makomk

    Interestingly, from what I can tell a large chunk of v1.23 multi-attach appears to have been written from scratch by Kitty Barnett and doesn’t have any corresponding Viewer 2.0 equivalent at all… but she went and licensed it under the GPL v2 with no FLOSS exception.

  16. Justin Clark-Casey

    Ah licensing issues, how I love thee.

    Nice post McCabe – very difficult subject to explain.

  17. Anonymous

    Imprudence’s diligence to following the “letter of the law”, so to speak, is one of the reasons I trust this viewer. Prior to recent changes in/to Second Life, Imprudence was my primary viewer. I enjoy the look and “feel” of this viewer above others. If it had mesh compatibility and supported multi-tattoo layering, Imprudence would still be my primary viewer. That being said, Imprudence remains my viewer of choice and when SL’s official viewer gives me trouble Imprudence is my go-to viewer. I believe that though Imprudence’s efforts to upgrade are impeded that the viewer we get when they do will be worth their efforts. I realize quality work takes time and I will wait patiently. I appreciate a viewer that takes the the time to get things right.

  18. Clebber

    Personally, I made the difficult switch about a month ago to a viewer more in tune with the times…
    As much as I love imp, and the great work the team do… this past year as just been a series of “new-feature-less” releases… all be it more stable, but you’re growing out of touch with your audience… I want all the new stuff… It’s just a shame that the best made viewer in SL has also become the most out of date.

    I’ll keep watching the blog and if you catch up I’m back, if not, I probably won’t be the only user you’ve lost.

  19. Greybeard

    I may be one of the few who have nothing to do with SL grid.
    (To the extent that I even edit that grid out of my default-grids.xml, so I can’t even “accidentally” log there.)

    Although I do try to keep current with news about all VR.
    The recent news that even the mighty LL have put mesh at least on an indefinate hold, sort of makes progress in that direction a mute point now.
    I have always been an Imp user, I love the fact that the Imp devs are in the few who do support opensim and Aurora-sim fully.

    I can empathise with the licence delema, ridiculous situtation regarding all those software release systems.

    But, Mac, Codie, Armin and crew keep up the good work folks, someof us still love you.

  20. McCabe Maxsted

    We love you guys too, Grey :)

  21. onefang

    LL put mesh on hold? Got a link for that please?

    /me again raises his hopes that he might be able to get his version of mesh out before LL does. Damn RL getting in the way. lol

  22. Tali

    For being “on hold”, mesh is rocking pretty hard on the LL main grid.
    There’s some disappointment over not being able to deform mesh to match the body shape sliders; only skinning it to the length of the bones. The full deformation was pushed to a “maybe at some point” status, which may be the “on hold” referred to here.

  23. Greybeard

    @Onefang, I hope so too, never did like the SL viewers much,lol. (Still not sure I like v2 or v3 viewers yet either.)
    Follow the links from nebadon’s twitter post to get more info

    https://plus.google.com/101558395514182710128/posts/QQ8jVFQjNMa

    @Tali, yes, that is more correct, after re-reading the links I saw about it, seems LL are somewhat reluctant to use the fix most other VR places have used for deformations.

    OK, back to that annoying RL grid for a while again, later all.

  24. Mister Acacia

    Just a quick follow-up to Inc’s first comment. As a member of the Phoenix Viewer Project, I want to make it clear that we don’t take a different stand as regards licenses. None of the TPV developers can and still stay within the letter of the necessary laws that govern IP rights and the letter and spirit of the TPV policy.

    I’m sure McCabe, like all other viewer developers, would appreciate some help coding, reviewing patch submissions and other support. This is not directed exclusively at you Inc, but to everyone who wants features and bells and whistles in their viewer of choice. If you can help your viewer’s developer to implement features, if you can become familiar with rudimentary code but more importantly detect what changes must be made to satisfy the licensing requirements, by all means become a contributor. If you can’t, well then join me in providing moral support and viewer usage support for newcomers.

    @McCabe, I applaud your efforts. I must admit that Firestorm is my viewer of choice, but I have all viewers installed and I do keep familiar with them. If a time comes that I can offer support in the group, I do. I hope that you get the help you need to continue developing Imprudence and Kokua.

    Mister

  25. shamus

    Imprudence’s diligence in following ,GPL+Exceptions and LGPL licenses to the letter, is one of the reasons I trust this viewer.

  26. Susannah Avonside

    I came to use Imprudence as my main viewer when I upgraded to using Ubuntu in 64 bit. My previous viewer of choice had been Emerald/Phoenix but I discovered that Phoenix did not work out of the box on 64 bit due to needing various add-ons which even when I installed them the viewer still refused to work, and streaming sound issues were an issue even on 32 bit Ubuntu after version 373, even if was claimed that these issues had been ‘fixed’ I still had problems and the suggested workarounds never worked for me. Imprudence was and is the only viewer,of them all, LL’s included that works on 64 bit out of the box. I have tried every V2 based viewer since they first came out over a year ago, and have found them nothing but frustrating to use for anything other than plain social networking within grids – as useful tools for actually doing things, such as building, making machinima or even taking decent pictures all of them, including sadly the Kokua viewer are sadly lacking. It seems to me that many of the changes have been made for change’s sake; never a good reason for making change. Other changes seem to have been made according to the dictats of fashion,seemingly using the rationale of form before function. This ideal is not restricted to VR viewers, as developments in computer UIs seem to have a similar rationale behind the changes being made, as witnessed by Gnome 3, Ubuntu Unity and the mummy of this, the Mac interface. Indeed these interfaces do look good and nice and shiny, but it also makes them virtually unusable if one actually wants to do something productive, and this is as true of the Viewer 2 based viewers as it is of the said desktop environments. I spend a large amount of my free time in various virtual worlds, and need a robust viewer that will function well in all of them, and Imprudence has risen to that challenge until recently, only now I am beginning to experience difficulties in SL. It will be SL that loses me as a regular visitor, not the Imprudence viewer, as I will not use any Viewer 2 based viewer, they are all founded on a misconceived idea in my opinion, and do not work in other virtual worlds without major tweaking, and that ignores the fact that they are in the first place useless as anything other than just viewers. I applaud the work of the Imprudence team, and wish every success, and I shall support them by continuing to use Imprudence as my viewer of choice: it may not be the prettiest viewer in the world, but it is founded on the, in my opinion, far more sound rationale of function before form, or perhaps a better way of saying it, function dictating form. After all, what bloody use is a teapot that looks great, but pours tea everywhere but in a cup? 1.4.0 is a step in the right direction, and I love the new translation feature, which I use a lot. Now all I would like would be an interface in my own language, which is Welsh so that it doesn’t look out of place on my localised desktop environment. I’d be happy to do the donkey work of translation if someone could point me in the technical direction needed. i.e. what files need to be edited. I am aware that it’s not as straight forward as it may seem, as there are conventions to be followed, but I am au fait with many of the standardised technical terms, and know where to go when I need assistance – and I can spell and get the grammar correct, which is one better than the person who made a mistake of this nature on the Welsh language Gnome 2 Desktop environment for Ubuntu 10.04!

  27. Seren

    Whatever. If Imprudence team hands are tied by the license you chose to a degree that makes it impossible for you to incorporate the features I need then I have no choice but to move to a different browser. I also think you are making excuses for falling behind but that is mere opinion. Firestorm Phoenix seems to be keeping up well. I wonder what licensing they are under.

  28. Clebber

    The question “Why doesn’t Imprudence have multilayers, inventory links, or mesh rendering?” is pretty irrelevant…

    The question “Why doesn’t Imprudence have any regular releases or at least some sort of updates to the blog to assure it’s dwindling user base of progress?” should really be answered first.

    Just reading the first point in the imprudence manifesto just shows what a difference 12 months can make, LL are now the people with the regular exciting releases and you’re stuck treading water.

    It’s been a whole year since the last worthwhile release and we’re getting little to reassure us that there is a future for the viewer.

  29. Unwichtig

    I Play in SeconLife an RP. Many Many things from the RP are with this Fucking Shit Mesh. Now i hope that Imprudence become the Function to let me see Mesh.

    On my PC only Working Imprudence. And now waht it is.

    COME ON Make IMPRUDENCE MESH ENABLE

    What is the fucking problem all other viewers Can working with mesh.

  30. Mebrilia

    I was using imprudence but i had to change it when i noticed that some basic things like meshes are missing…

    I am sorry but i like mesh that is a nice implementation…

    And i can’t stand anymore in a client that have this lack..

  31. windmillchaser Constantine

    Awe excuse me for interrupting? I am just an SL user. I have used LL, Singular, Pheonix, Firestorm and Imprudence. Imprudence loads fast easy and is up and running where as the others slow to a crawl. All I want and all any others using LL, opensim or another really want is a viewer that works and works well without any problems. Is that so hard to accomplish? It seems LL has lost it’s soul. (It never has listened to any of it’s members. Please folks I am a simple person, making it simple is complex in the coding and development.

    * A footnote: The radar in the min map works on other sims but not on the sim that I own.

    Any idea whats wrong?

    ———————————————————

    Imprudence 1.3.2 (May 17 2011 16:51:04)
    Release Notes

    Grid: (secondlife)

    Built with MSVC version 1400

    CPU: AMD (Unknown model) (1790 MHz)
    Memory: 1279 MB
    OS Version: Microsoft Windows XP Service Pack 2 (Build 2600)
    Graphics Card Vendor: NVIDIA Corporation
    Graphics Card: GeForce 8400 GS/PCI/SSE2/3DNOW!
    Windows Graphics Driver Version: 6.14.0011.7519
    OpenGL Version: 2.1.2

    libcurl Version: libcurl/7.18.1 OpenSSL/0.9.8j zlib/1.2.3
    J2C Decoder Version: OpenJPEG: 1.4.0.565, Runtime: 1.4.0.565
    Audio Driver Version: OpenAL, version 1.1 ALSOFT 1.12.854 / OpenAL Community / OpenAL Soft: DirectSound Software
    GStreamer Version: 0.10.20.1
    LLMozLib Version: [LLMediaImplLLMozLib] – 2.01.52439 (Mozilla GRE version 1.8.1.21_0000000000)

  32. Rafa

    nah played with imprudence for long years…now don´t work with mesh…very nice was this viewer appear the oldest viewers…now changed to Kurkua…changed all,and lost the spirit to make things working and functional…and simple.Please ocntinue with imprudence…