Choosing a software license

Objectives

  • Knowing about what derivative work is and whether we can share it.

  • Get familiar with terminology around licensing.

  • We will add a license to our example project.

Why software licenses matter

You find some great code that you want to reuse for your own publication.

  • This is good for the original author - you will cite them. Maybe other people who cite you will cite them.

  • You modify and remix the code.

  • Two years later … ⌛

  • Time to publish: You realize there is no license to the original work 😱

Now we have a problem:

  • 😬 “Best” case: You manage to publish the paper without the software/data. Others cannot build on your software and data.

  • 😱 Worst case: You cannot publish it at all. Journal requires that papers should come with data and software so that they are reproducible.

Taxonomy of software licenses

European Union Public Licence (EUPL): guidelines July 2021

European Commission, Directorate-General for Informatics, Schmitz, P., European Union Public Licence (EUPL): guidelines July 2021, Publications Office, 2021, https://data.europa.eu/doi/10.2799/77160

Comments:

  • Arrows represent compatibility (A -> B: B can reuse A)

  • Proprietary/custom: Derivative work typically not possible (no arrow goes from proprietary to open)

  • Permissive: Derivative work does not have to be shared

  • Copyleft/reciprocal: Derivative work must be made available under the same license terms

  • NC (non-commercial) and ND (non-derivative) exist for data licenses but not really for software licenses

Great resource for comparing software licenses: Joinup Licensing Assistant

Exercise/demo

Exercise

  • Let us choose a license for our example project.

  • We will add a LICENSE to the repository.

Discussion

  • What if my code uses libraries like scikit-image, scikit-learn, numpy, matplotlib, etc. Do we need to look at their licenses? In other words, is our project derivative work of something else?

More resources

More exercises

Exercise: What constitutes derivative work?

Which of these are derivative works? Also reflect/discuss how this affects the choice of license.

  • A. Download some code from a website and add on to it

  • B. Download some code and use one of the functions in your code

  • C. Changing code you got from somewhere

  • D. Extending code you got from somewhere

  • E. Completely rewriting code you got from somewhere

  • F. Rewriting code to a different programming language

  • G. Linking to libraries (static or dynamic), plug-ins, and drivers

  • H. Clean room design (somebody explains you the code but you have never seen it)

  • I. You read a paper, understand algorithm, write own code

Exercise: Licensing situations

Consider some common licensing situations. If you are part of an exercise group, discuss these with others:

  1. What is the StackOverflow license for code you copy and paste?

  2. A journal requests that you release your software during publication. You have copied a portion of the code from another package, which you have forgotten. Can you satisfy the journal’s request?

  3. You want to fix a bug in a project someone else has released, but there is no license. What risks are there?

  4. How would you ask someone to add a license?

  5. You incorporate MIT, GPL, and BSD3 licensed code into your project. What possible licenses can you pick for your project?

  6. You do the same as above but add in another license that looks strong copyleft. What possible licenses can you use now?

  7. Do licenses apply if you don’t distribute your code? Why or why not?

  8. Which licenses are most/least attractive for companies with proprietary software?