[Tutor] Borrowing restricted code

Alex Kleider akleider at sonic.net
Thu Dec 6 11:39:06 EST 2018


On 2018-12-05 16:45, Steven D'Aprano wrote:
> On Wed, Dec 05, 2018 at 11:22:35AM -0500, Avi Gross wrote:
> 

Those following this thread might like to google "code V2"- the book by 
Laurence Lessig is relevant to many if not all of the disagreements.  
It's also a very interesting read (and free.)

>> I am NOT advocating copying code. Not even "free" code.
>> 
>> I am saying there may be times you want to package the code for 
>> special
>> purposes.
> 
> "Packaging" the code IS copying the code.
> 
> 
>> Perhaps someone can enlighten me on a subtle aspect here.
>> 
>> What does it mean to include something?
> 
> https://en.wiktionary.org/wiki/include
> 
> 
> [... description of how #include works in C ...]
>> The above is not meant to be a precise description but indicates that 
>> your
>> code was rarely all your own. You could literally set it up so if 
>> someone
>> else left their code unguarded, you could arrange to grab text or 
>> library
>> code into your finished executable.
> 
> The precise details of what an individual programming language means by
> "including" code will, naturally, depend on the language in question.
> 
> This is not really the place to go into a detailed description of all
> the possible variations (this is supposed to be a *Python* forum after
> all) but briefly there are at least two kinds of code which we might
> "include": source code and compiled object code.
> 
> When "including" source code, the interpreter might read a command like
> "load spam", look up a file "spam", read the contents into memory, 
> parse
> it and run it through the interpreter as if it had been copied and
> pasted into the original file in place of the "load" line.
> 
> When "including" object code, the compiler (or often a separate program
> called a linker) can make a copy of the object code and insert that 
> code
> directly into the object code it is generating. This is called "static
> linking".
> 
> An alternative is to leave the object code where it is, but instead
> insert instructions for how to access it at runtime. This is called
> "dynamic linking".
> 
> https://kb.iu.edu/d/akqn
> 
> Python's import is (I think) closer to dynamic linking than the others.
> 
> 
>> In python, you can generally have access to the python code of what 
>> you can
>> import or at least to the byte code. But there may be different rules
>> attached to several categories.
>> 
>> If you use "import" you don't so much copy as USE the code. I mean the
>> interpreter pauses evaluating the current file and opens the one you 
>> asked
>> for and reads it as if it were your code.
> 
> That is not entirely wrong, but its not quite right either.
> 
> The action of the import command is surprisingly complex, and so I may
> have got some subtle details wrong. But the high-level overview of what
> the interpreter does when you run "import spam" is as follows.
> 
> 1. Look for an already loaded module "spam"; if the interpreter finds
> one, it creates an new variable called "spam" in the current namespace,
> and assigns that module object to that name. The import is complete.
> 
> # Pseudo-code
> if "spam" in sys.modules:
>     spam = sys.modules["spam"]
>     return
> 
> 
> 2. If no such already loaded module, then search a set of known
> locations for a library called "spam":
> 
> # Pseudo-code
> for location in sys.path:
>     for filename in os.listdir(location):
>         name, ext = path.splitext(filename)
>         if name == "spam":
>             if ext == ".py":
>                 read the source code from spam.py into memory
>                 parse it into bytecode into memory
>                 write out the bytecode to spam.pyc
>             elif ext == ".pyc":
>                 read the bytecode from spam.pyc into memory
>             else:
>                 # other cases handled here, e.g. packages, zip files,
>                 # C libraries (.dll or .so), other extensions etc.
>             # Assuming we get to here...
>             create a module object in memory
>             run that bytecode, using that module object as the 
> namespace
>             cache the module object in sys.modules['spam']
>             spam = module object
>             return
> # no such "spam" module or package found
> raise ImportError
> 
> 
> So you can see that modules are only executed the first time the
> interpreter imports them, not on subsequent imports.
> 
> There really isn't a distinction to make between code treated "as if it
> were your code" and other code. All code is treated the same.
> 
> How could it not be? The interpreter cannot know which modules or
> libraries you wrote, which were collaborative efforts between you and
> other people, and which were written by other people.
> 
> 
> 
>> Some actions are transient. A line
>> like "5+3" evaluates to 8 and you ignore it. But many and perhaps most 
>> lines
>> end up creating instantiations of objects (yes, classes are also 
>> objects)
>> which then sit in memory.
> 
> Or get used and then disposed of by the garbage collector.
> 
> 
>> Functions are also objects and pretty much contain
>> within them everything you need to reconstruct the function if you 
>> know
>> where to look. Is what is copied really different than the original 
>> text
>> used?
> 
> Yes.
> 
> 
>> If you import the base modules that come with python, can you assume 
>> it is
>> freely given with few strings other than the kind discussed?
> 
> There is no need to assume anything, you can read the licence. When you
> start the interactive interpeter, it says:
> 
> Type "help", "copyright", "credits" or "license" for more information.
> 
> 
> so the licence is always at your fingertips.
> 
> If that's too much trouble, then you can trust the millions of other
> people who use Python every day, and believe them when they say the
> interpreter and the standard library are available under a permissive
> licence.
> 
> Unless you are distributing a copy of Python or its libraries to 
> others,
> you don't need to care about the details. That's the point of using a
> permissive licence.
> 
> 
> [...]
>> Back to the main topic, for me. What kind of uses might be considered 
>> legal
>> or at least not worth prosecuting?
> 
> Under the current copyright maximalist domain, virtually nothing is
> legal unless you are the copyright owner, or have a licence from the
> copyright owner. (Disclaimer: I am not a lawyer.)
> 
> You may have the right to *read* the code (if it isn't a Trade Secret),
> but that's about as far as it goes. In principle, copying the code in
> any way (whether by a literal "copy and paste" into your text editor, 
> or
> by merely re-implementing the code from memory after reading it) could
> be deemed to be either copyright infringement or plagiarism or both.
> 
> Especially under the current academic standards of zero-tolerance for
> so-called "plagiarism" in the US, which are extreme and hypocritical.
> But that's off-topic.
> 
> There's a theoretical "Fair Use" right in some countries (but not in
> Australia!) that could allow you to copy small, trivial chunks, perhaps
> as much as 10% of the work, under certain circumstances, but lawyers
> LOVE arguing about what is or isn't Fair Use because such arguments can
> go on and on for months.
> 
> There are also theoretical arguments that the code in question was so
> trivial that there should be no copyright on it in the first place. 
> Just
> as you can't copyright the sentence "I ate a spam sandwich" in 
> isolation
> (only as part of a more substantial work), so you can't copyright a
> trivial isolated line of code. Again, lawyers love arguing about what 
> is
> or isn't trivial.
> 
> In principle, you might even argue independent invention. If you
> happened to come up with substantially the same work independently,
> perhaps because there is only a single obvious way to do something, 
> then
> no copying too place and so you may be deemed to have not infringed
> copyright. (But independent invention is no defence against patent
> infringement.)
> 
> So you can see why many organisations are so paranoid about having
> licences for every line of code they use. Failure to be fully licenced
> could be *incredibly* time-consuming and expensive if they get into a
> legal dispute. The only way to win is to avoid getting into a legal
> dispute in the first place.
> 
> As for what is "not worth prosecuting", there are no copyright police
> who troll the internet looking for copied lines of code. Nobody is 
> going
> to be scanning your Github repos looking for infringement (at least not
> yet, and I'm sure that by now the anti-plagiarism software industry is
> looking to do something like that...)
> 
> There generally needs to be a civil complaint where the copyright owner
> needs to sue you.
> 
> In the USA, the TSA and immigration do look for infringing software (at
> least sometimes) but they mostly care about commercial-scale piracy. If
> the customs official is feeling especially obnoxious and/or diligent,
> they might demand to know why you don't have a Windows licence key on
> your laptop[1] or poke around looking for pirated videos on behalf of
> Hollywood and co. Deep pockets speak loudly.
> 
> But they're not going to open up your Python folder and demand to see
> licences for everything or question whether or not you copy code from
> Stackoverflow without permission.
> 
> 
>> The law in various countries likely
>> differs, Alan and I are definitely using different legal systems but
>> possibly not as different as where Asad is. (His phone number would be 
>> in
>> India.)
> 
> Most countries in the world abide by the Berne convention on
> copyrights, so probably not as different as you may be imagining.
> 
> India, in particular, is a signatory to the Berne Convention, the
> Universal Copyright Convention of both Geneva and Paris, and the TRIPS
> agreement (but not the WIPO Copyright Treaty) so the differences will 
> be
> relatively minor.
> 
> https://en.wikipedia.org/wiki/Berne_Convention
> 
> https://en.wikipedia.org/wiki/List_of_parties_to_international_copyright_agreements
> 
> 
> 
>> Clearly if you make a product and sell it, then borrowing code can
>> be a serious thing.
> 
> Indeed. Most FOSS (Free Open Source Software) projects turn a blind eye
> to trivial non-compliance unless it involves commercial products. Even
> Richard Stallman is probably not going to chase you for copying a few
> lines of GPLed software
> 
> 
>> If you are a student doing a homework assignment and
>> will never use it again, few might care especially if you use small 
>> amounts
>> and don't claim it is your own work.
> 
> I wouldn't be so sure about that, especially in US macademia. (Warning:
> may contain nuts.) Their rules for plagiarism are insanely strict and
> exceedingly hypocritical, because the macademics enforcing those rules
> against students don't even come close to living up to the same
> standards themselves.
> 
> 
>> But the question I would like answered is DOES IT MAKE A DIFFERENCE 
>> how you
>> borrow the use of the code?
> 
> Not legally. Copying is copying, whether you cut and paste in a text
> editor, drag and drop a file from one disk to another, download it from
> the Pirate Bay, or retype it from memory.
> 
> 
>> We talked about the normal intended method:
>> 
>> Load the file into a place on your local machine.
> 
> That's a copy. If you are not permitted to make that copy, you are
> already infringing right there.
> 
> 
>> Write one or more python files and one of them imports it.
>> 
>> A second method I suggested WHEN NEEDED AND ALLOWED is to find the 
>> code you
>> need, perhaps on another machine where you can download it, or in some 
>> other
>> public repository. Copy the minimum you need into your own code, with
>> perhaps enough attribution and explanation.
> 
> That's a copy. If you are not permitted to make that copy, you are
> already infringing right there.
> 
> In addition, "enough attribution" may not be sufficient to avoid 
> charges
> of plagiarism.
> 
> Example: I've seen at least one case of a student given a reprimand for
> plagiarism after giving a one-line quote, acknowledging the author, but
> failing to give a formal reference including page number.
> 
> 
> 
>> Now what about a third way? No edit needed. Simply use a program like 
>> "cat"
>> to concatenate multiple files
> 
> That's a copy. If you are not permitted to make that copy, you are
> already infringing right there.
> 
> (How do you get the copy of the file you pass to cat, if not by making 
> a
> copy?)
> 
> 
> 
> 
> 
> 
> [1] Because it is unthinkable that you might be running some OS other
> than Windows, one which doesn't require a licence key.


More information about the Tutor mailing list