Is it “Use” or “Reuse”?

In soft­ware engi­neer­ing, it is an old ques­tion whether you are “using” a com­po­nent or whether you are “reusing” it. Peo­ple tend to use the­se two terms inter­change­ably, annoy­ing those among us who are try­ing to put pre­cise mean­ing to terms. Alas, I don’t know of a good com­mon­ly accept­ed def­i­n­i­tion. I only know that “reuse” is an over-used term, most­ly because “reusing” has more cache than “using”.

After read­ing some legal mate­ri­al, I’m won­der­ing whether the copy­right lawyers already solved this prob­lem.

In (open source) copy­right law, the text­books dis­tin­guish between col­lec­tive and deriv­a­tive works. In a col­lec­tive work, soft­ware com­po­nents are put togeth­er as is, pos­si­bly with some glue code around them. In a deriv­a­tive work of some com­po­nent, the orig­i­nal com­po­nent is mod­i­fied (that is, its source code is changed). A deriv­a­tive work can of course be used as part of a col­lec­tive work.

To me it seems like a com­po­nent used as part of a col­lec­tive work is being used, and a com­po­nent of which a derivate work is being cre­at­ed is being reused.

Thus, call­ing func­tions of some com­po­nent in a col­lec­tive work means using that com­po­nent. Sub-classing a class and using its inher­i­tance inter­face also means just using that class. Any form of link­ing or mak­ing dynam­ic calls, even to remote process­es, are forms of using the respec­tive com­po­nent.

You are only reusing some com­po­nent if you are chang­ing its source code (or may­be some meta data) to adapt it to some unfore­seen con­text. For that, you need to cre­ate a deriv­a­tive of the com­po­nent, as the lawyers would say. (I real­ize that lawyers may not agree on such a sim­ple notion of deriv­a­tive work, but then I’m not ask­ing they decide over use vs. reuse. I’m only say­ing we should use the dis­tinc­tion between col­lec­tive and derivate work to decide on use vs. reuse.)


using a com­po­nent = embed­ding it in a col­lec­tive work
reusing a com­po­nent = cre­at­ing a derivate (derived) ver­sion of it

Sounds rea­son­able?

3 thoughts on “Is it “Use” or “Reuse”?

  1. Anonymous

    The prob­lem you are fac­ing is not that peo­ple are unwill­ing to agree that there is a dis­tinc­tion between the two notions you are describ­ing, but that they are unwill­ing to rede­fine the nor­mal use of words.

    In nor­mal Eng­lish ver­nac­u­lar, to use any tool sim­ply means to employ it for some func­tion. To reuse a tool means that it has been employed before for some func­tion and is being employed again. It is nat­u­ral then to speak of the use of a soft­ware library in anoth­er con­text from which it was orig­i­nal­ly cre­at­ed as “re-use”.

    If we, as a soft­ware devel­op­ment com­mu­ni­ty, are to for­mu­late rules about when some­thing should be “used” and when some­thing is to be “reused” as Udi Dahan has attempt­ed to do in his arti­cle “The Fal­la­cy of Reuse”, we need to choose a vocab­u­lary that helps rather than hin­ders the under­stand­ing of the ideas we are try­ing to com­mu­ni­cate.

    There­fore, we should say you may “use” or “reuse” a soft­ware com­po­nent if you are employ­ing its func­tion with­out mod­i­fi­ca­tion to the orig­i­nal code, but that you are “using por­tions of” or “using a mod­i­fied ver­sion of” a soft­ware com­po­nent if you have tak­en some library which has por­tions of ben­e­fi­cial func­tion­al­i­ty which need mod­i­fi­ca­tion to be applied to a new con­text.

  2. Dirk Riehle Post author

    Hi, Anony­mous: Thanks for the thoughts.

    I agree that rein­vent­ing words isn’t a good idea and that we should fol­low estab­lished seman­tics as long as it makes sense. Here my take at “com­mon sense/semantics”:

    In every­day, non-computer-science ter­mi­nol­o­gy, we use some­thing until it breaks. Then we give it to some recy­cling facil­i­ty for the mate­ri­als to be reused.

    I think that’s what we do in soft­ware too. We use and use and use a library as we see fit and as the library rea­son­ably per­mits. When we can’t do so any longer, because things keep break­ing, we retro­fit (“recy­cle”) the library by mod­i­fy­ing it, there­by reusing it to form a new (derived) library. That new library then we can start using. That’s the same dis­tinc­tion between a col­lec­tive and a derived work.

    My best guess is that this is what you are say­ing too, except that your com­ment implies a much nar­row­er con­text before one switch­es from using to reusing. I think as long as it ain’t bro­ken (wrt intend­ed use), you can’t reuse it.

  3. Pingback: The Use/Reuse Paradox : Software & Technology

Leave a Reply