When is an object using, vs. based-on an object?
A little background: I lead a project here at java.net producing a general purpose library for dynamic distributed computing. Its license is the LGPL, as our community wishes to allow its use in both non-free, as well as free software. Of highest importance is to ensure that it cannot be 'embraced and extended'™ into something proprietary. However, the choice of license is not the topic I wish to discuss.
The L/GPL version 2 is an old license, with a linking perspective largely based on the C language. Modern dynamic linking via classloaders, or through reflection, and even plain-old inheritance, is very ambiguously covered with regard to the uses/based-on issue. The GPL version 3 is due out next year, and doubtless there will be a lot of discussion preceding its release.
My question; what is a reasonable, objective criteria to say: Object A uses, but is not based-on object B? Conversely; at what point does object A become a derivative work of, and therefore subject to, the license of object B?
Clearly this is an interesting and important technical question; with broadly reaching legal repercussions!
We took a somewhat orthogonal approach on our project's license page, to clarify our position. It basically states:
Adding or changing a class inside the packages is basing, and therefore subject to the license, anything else is using, therefore exempt. https://cajo.dev.java.net/license.html
Not perfect, to be sure, but crystal clear. Unfortunately it just replaces a C viewpoint definition, with a Java one. It took quite a lot of discussion just to come up with this criteria. Obviously we had to set aside the valid point that an object simply composed of member objects could logically be considered a derivative work.
Given the important timing; can anyone propose a more generic definition that would accomplish the same clarity of separation?
Lawyers feast on ambiguity!