Skip to main content

When is an object using, vs. based-on an object?

7 replies [Last post]
cajo
Offline
Joined: 2003-09-28
Points: 0

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!

Thanks,

John

Reply viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
mpocock
Offline
Joined: 2006-02-13
Points: 0

I tend to punt these issues by claiming that a jar is the binary linkage unit, and making this explicit in documentation. So, if you dick about with the jar, that is a derivative work. If you include the jar, then you are linking to the work.

As far as sources are concerned, then if you modify my source it is a derivative work. If you write your own code that compiles against mine then it is a linking work. If you write your own code and package it in a single jar with my code then it is a derivative work.

IANAL, but these rules are simple and easy to follow.

biehl
Offline
Joined: 2003-06-19
Points: 0
cajo
Offline
Joined: 2003-09-28
Points: 0

Thanks for the excellent link!

It seems the FSF takes a similar position:

By importing a package, a work is using and [u]not[/u] based-on the library. This applies even when the application extends classes, or implements interfaces contained in that package.

Hopefully this clarfication will be codified in version 3.

It's a very clear line however, in a very gray region.

cowwoc
Offline
Joined: 2003-08-24
Points: 0

My interpretation of their letter is exactly the opposite: that they say that importing a package causes your code to become a derivation of that code.

I happen to strongly disagree with them.

cajo
Offline
Joined: 2003-09-28
Points: 0

I sincerely believe that was my mistake; Sorry!

I am convinced there there is nothing quite so humbling as looking back over one's own posts...

You are right, [i]any[/i] object which extends another, or implements another's interface, definitely [u][i]is[/i][/u] "derivative"; no differently than through reflection, or via RMI.

I think the important point the FSF makes is:

Any "derivative" object is [i]using[/i], [u]but[/u] is not [i]based-on[/i], any object (or interface); as long as it exists in a [u][i]separate[/i][/u] package.

John

umdenken
Offline
Joined: 2004-11-16
Points: 0

These terms - "using" and "based-on" - are they your own? I didn't see them in the FSF/Java document. That could explain some of your problems; Try aligning your questions in terms of the FSF terminology, and your questions may be easier to answer.

cajo
Offline
Joined: 2003-09-28
Points: 0

The terms "using" and "based-on" [i]are[/i] exact FSF terminology.

They are used in a strong admonition, in the second to last sentence of the preamble to the LGPL.

http://www.gnu.org/licenses/lgpl.html