From 0b5ca394dfee039b585eca52ead115bebe14d4db Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Sun, 30 Aug 2026 22:42:23 +0200 Subject: [PATCH 01/32] Set disclaimer --- content/software-licensing-eu.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 content/software-licensing-eu.md diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md new file mode 100644 index 0000000..154111d --- /dev/null +++ b/content/software-licensing-eu.md @@ -0,0 +1,23 @@ +# Software licensing + +```{objectives} + - Objective 1 +``` + +```{discussion} Limitations and context of this lesson + +This lesson is designed as practical educational material for researchers and research software engineers, not formal legal advice. + +* Regional Focus: Guidance is grounded in European Union directives and Nordic institutional frameworks. Specific rules may differ under non-EU legal frameworks (such as US copyright law). +* Institutional Context: Employment contracts, grant agreements, and university policies heavily influence software ownership and licensing choices. +* Legal Grounding: Core concepts reflect European legal frameworks, including EU software directives, the Cyber Resilience Act regarding dependency tracking, and relevant national copyright exceptions. +* Scope: This lesson covers general principles of open-source reuse, copyright scope, and software adaptation. Complex corporate IP structures, patent strategies, or disputed ownership cases fall outside this scope. + +If you need formal guidance for publishing, commercializing, or licensing a specific project, consult your institution's Technology Transfer Office (TTO), Legal Affairs Department, or these primary reference tools: + +* [Joinup Licensing Assistant (JLA)](https://joinup.ec.europa.eu/collection/eupl/solution/joinup-licensing-assistant/jla-find-and-compare-software-licenses): Official European Commission portal to search and compare open software licenses. +* [JLA Compatibility Checker](https://joinup.ec.europa.eu/collection/eupl/solution/joinup-licensing-assistant/jla-compatibility-checker): European Commission tool to verify if multi-licensed dependencies can be combined. +* [FSFE REUSE Initiative](https://reuse.software/): The modern European standard for managing machine-readable copyright notices and SPDX headers. +* [Research Software Alliance Policy Directory](https://www.researchsoft.org/software-policies/): Reference list of institutional software policies across research organizations. +``` + From 8d3873e3d6118fd4d235b39148797ea3060a12eb Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Mon, 31 Aug 2026 16:41:14 +0200 Subject: [PATCH 02/32] Start the introduction --- content/conf.py | 1 + content/software-licensing-eu.md | 85 +++++++++++++++++++++++++++++--- 2 files changed, 78 insertions(+), 8 deletions(-) diff --git a/content/conf.py b/content/conf.py index 2f54faf..8c6395a 100644 --- a/content/conf.py +++ b/content/conf.py @@ -42,6 +42,7 @@ "sphinx_rtd_theme_ext_color_contrast", "sphinx_coderefinery_branding", "lesson_metadata", + "sphinxcontrib.mermaid", ] # Settings for myst_nb: diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 154111d..2485ac1 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -8,16 +8,85 @@ This lesson is designed as practical educational material for researchers and research software engineers, not formal legal advice. -* Regional Focus: Guidance is grounded in European Union directives and Nordic institutional frameworks. Specific rules may differ under non-EU legal frameworks (such as US copyright law). +* Regional Focus: Guidance is grounded in European Union directives and Nordic institutional frameworks. * Institutional Context: Employment contracts, grant agreements, and university policies heavily influence software ownership and licensing choices. -* Legal Grounding: Core concepts reflect European legal frameworks, including EU software directives, the Cyber Resilience Act regarding dependency tracking, and relevant national copyright exceptions. -* Scope: This lesson covers general principles of open-source reuse, copyright scope, and software adaptation. Complex corporate IP structures, patent strategies, or disputed ownership cases fall outside this scope. +* Scope: This lesson covers general principles of open-source reuse, copyright scope, and software adaptation. -If you need formal guidance for publishing, commercializing, or licensing a specific project, consult your institution's Technology Transfer Office (TTO), Legal Affairs Department, or these primary reference tools: +If you need formal guidance reference below could be used: -* [Joinup Licensing Assistant (JLA)](https://joinup.ec.europa.eu/collection/eupl/solution/joinup-licensing-assistant/jla-find-and-compare-software-licenses): Official European Commission portal to search and compare open software licenses. -* [JLA Compatibility Checker](https://joinup.ec.europa.eu/collection/eupl/solution/joinup-licensing-assistant/jla-compatibility-checker): European Commission tool to verify if multi-licensed dependencies can be combined. -* [FSFE REUSE Initiative](https://reuse.software/): The modern European standard for managing machine-readable copyright notices and SPDX headers. -* [Research Software Alliance Policy Directory](https://www.researchsoft.org/software-policies/): Reference list of institutional software policies across research organizations. +* [Directive 2009/24/EC of the European Parliament and of the Council](https://eur-lex.europa.eu/eli/dir/2009/24) +* [Joinup Licensing Assistant,JLA](https://joinup.ec.europa.eu/collection/eupl/solution/joinup-licensing-assistant/jla-find-and-compare-software-licenses) +* [FSFE REUSE Initiative](https://reuse.software/) +* [Research Software Alliance Policy Directory](https://www.researchsoft.org/software-policies/) +``` + +## Introduction + +- What parts of computer programs are protected by copyright + - Protected: Specific text and expression of a program in any form, including preparatory design work + - Not protected: Underlying ideas, mathematical algorithms, logic, and interface principles. + +## Difference in terminology in the US regulative text and EU regulation 2009/24/EC + +### 1. Modified Code & Works +* **US Concept**: **Derivative Work** (broadly defined in the US Copyright Act). +* **EU Concept**: **Adaptation**, translation, arrangement, or alteration (Directive 2009/24/EC Art. 4(1)(b)). +* **Practical Impact**: EU law avoids the term "derivative work." Any code modifications are classified as specific statutory acts of adaptation or translation. + +### 2. User Rights & Exceptions +* **US Concept**: **Fair Use** (flexible judicial doctrine evaluated case-by-case in court). +* **EU Concept**: **Statutory Exceptions** (strictly codified rights, such as error correction under Art. 5(1) or decompilation for interoperability under Art. 6). +* **Practical Impact**: EU user rights are fixed by statute and cannot be overridden by contract, avoiding reliance on judicial interpretation. + +### 3. Waiver of Rights +* **US Concept**: **Public Domain Dedication** (authors can fully surrender economic and moral rights). +* **EU Concept**: **Economic Rights Transfer / Non-Waivable Moral Rights**. +* **Practical Impact**: European legal traditions do not allow full waiver of moral rights (e.g., right to attribution), requiring permissive open licenses rather than pure public domain dedications. + +### 4. Work Ownership in Employment +* **US Concept**: **Work Made for Hire** (the employer is legally recognized as the primary author). +* **EU Concept**: **Employer Economic Rights** (Directive 2009/24/EC Art. 2(3)). +* **Practical Impact**: The individual developer remains the author, but all economic rights automatically transfer to the employer for code created during employment duties. + +### 5. Non-Protectable Elements +* **US Concept**: **Idea-Expression Dichotomy** (established primarily through court case law). +* **EU Concept**: **Expression vs. Ideas, Principles, & Interfaces** (explicitly codified under Directive 2009/24/EC Art. 1(2)). +* **Practical Impact**: EU statutory law explicitly excludes algorithms, programming languages, logic, and interface principles from copyright protection. + + +## Claisfication + +```{mermaid} + flowchart TB + subgraph box[ ] + A["Copyright Law Foundation
(EU Directive 2009/24/EC)"] --> B["Permissive
(MIT, BSD, Apache-2.0)"] + A --> C["Copyleft / Reciprocal
(EUPL, GPL, LGPL)"] + A --> D["All Rights Reserved / Proprietary"] + + B --> B1["Run & Modify?
Yes!"] + B --> B2["Sell copies as-is?
Yes!"] + B --> B3["Embed in closed product & sell?
Yes!"] + B --> B4["Must changes stay open?
No (Optional)"] + + C --> C1["Run & Modify?
Yes!"] + C --> C2["Sell copies as-is?
Yes!"] + C --> C3["Embed in closed product & sell?
No!"] + C --> C4["Must changes stay open?
Yes! (Mandatory)"] + + D --> D1["Run & Modify?
No! (Zero permission)"] + D --> D2["Sell copies as-is?
No!"] + D --> D3["Embed in closed product & sell?
No!"] + D --> D4["Can I change code?
No (Closed source)"] + end + classDef permissive fill:#e6ffe6,stroke:#2b8a3e,stroke-width:2px,color:#1b4332; + classDef copyleft fill:#fff9db,stroke:#f59f00,stroke-width:2px,color:#5c3c00; + classDef proprietary fill:#ffe3e3,stroke:#e03131,stroke-width:2px,color:#5c0000; + classDef header fill:#f8f9fa,stroke:#495057,stroke-width:2px,color:#212529; + classDef mains fill:#fafadc,stroke:#495057,stroke-width:2px,color:#212529; + classDef box fill:#ffffff; + class B1,B2,B3,B4,C1,C2 permissive; + class C3,C4,D1,D2,D3,D4 proprietary; + class box box; + class A,B,C,D mains; ``` From 1e5a4f66c3e4a137ba87e4e63c722eec3ee1f290 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Tue, 1 Sep 2026 00:25:25 +0200 Subject: [PATCH 03/32] first scenario --- content/software-licensing-eu.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 2485ac1..270ed42 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -54,7 +54,7 @@ If you need formal guidance reference below could be used: * **Practical Impact**: EU statutory law explicitly excludes algorithms, programming languages, logic, and interface principles from copyright protection. -## Claisfication +## Claisfication of licenses related to software ```{mermaid} flowchart TB @@ -90,3 +90,25 @@ If you need formal guidance reference below could be used: class A,B,C,D mains; ``` +::::{exercise} Scenario 1: Own algorithm with external dependencies +You wrote an original algorithm from scratch (in Python, C++, Rust, etc.). Your repository contains only your original source code, but relies on third-party libraries referenced via dependency manifests (`requirements.txt`, `CMakeLists.txt`, `Cargo.toml`). + +**Tasks**: +1. Can you apply any open-source license you want to your repository? +2. Practice selecting a **Permissive** open-source license using the [Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) by toggling the following options: + +| ๐ŸŸข **Can** | โšช **Must** | ๐ŸŸก **Support** | +| :--- | :--- | :--- | +| [x] Commercial use | [x] Incl. Copyright | [x] OSI approved | +| [x] Modify/merge | | | +| [x] Distribute | | | + +:::{solution} +**Legal Reality**: Referenced external dependencies remain separate packages[cite: 1]. Because you have not pasted third-party source code directly into your repository files, you hold full copyright over your original codebase[cite: 1]. + +* **Outcome**: **Fully Permissible.** You own the original source code and can choose any open-source license (e.g., MIT, Apache-2.0, EUPL-1.2, GPL-3.0)[cite: 1]. +* **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` +* **Why**: Selecting these filters returns licenses that grant maximum reuse and commercial rights while requiring only standard copyright attribution[cite: 1]. +* **User Obligation**: Downstream users who compile or run your software must comply with the individual licenses of external packages when fetching or linking them[cite: 1]. +::: +:::: From 91f2699a219cc1b083dcfda1b2d515c5fd6c577c Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Tue, 1 Sep 2026 23:48:04 +0200 Subject: [PATCH 04/32] update clasification diagram --- content/software-licensing-eu.md | 68 ++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 30 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 270ed42..7e66263 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -58,36 +58,44 @@ If you need formal guidance reference below could be used: ```{mermaid} flowchart TB - subgraph box[ ] - A["Copyright Law Foundation
(EU Directive 2009/24/EC)"] --> B["Permissive
(MIT, BSD, Apache-2.0)"] - A --> C["Copyleft / Reciprocal
(EUPL, GPL, LGPL)"] - A --> D["All Rights Reserved / Proprietary"] - - B --> B1["Run & Modify?
Yes!"] - B --> B2["Sell copies as-is?
Yes!"] - B --> B3["Embed in closed product & sell?
Yes!"] - B --> B4["Must changes stay open?
No (Optional)"] - - C --> C1["Run & Modify?
Yes!"] - C --> C2["Sell copies as-is?
Yes!"] - C --> C3["Embed in closed product & sell?
No!"] - C --> C4["Must changes stay open?
Yes! (Mandatory)"] - - D --> D1["Run & Modify?
No! (Zero permission)"] - D --> D2["Sell copies as-is?
No!"] - D --> D3["Embed in closed product & sell?
No!"] - D --> D4["Can I change code?
No (Closed source)"] - end - classDef permissive fill:#e6ffe6,stroke:#2b8a3e,stroke-width:2px,color:#1b4332; - classDef copyleft fill:#fff9db,stroke:#f59f00,stroke-width:2px,color:#5c3c00; - classDef proprietary fill:#ffe3e3,stroke:#e03131,stroke-width:2px,color:#5c0000; - classDef header fill:#f8f9fa,stroke:#495057,stroke-width:2px,color:#212529; - classDef mains fill:#fafadc,stroke:#495057,stroke-width:2px,color:#212529; - classDef box fill:#ffffff; - class B1,B2,B3,B4,C1,C2 permissive; - class C3,C4,D1,D2,D3,D4 proprietary; - class box box; - class A,B,C,D mains; + subgraph box[ ] + A["Copyright Law Foundation
(EU Directive 2009/24/EC)"] --> B["Permissive
(MIT, BSD, Apache-2.0)"] + A --> C["Copyleft / Reciprocal
(EUPL, GPL, LGPL)"] + A --> D["All Rights Reserved / Proprietary"] + + B --> B1["Run & Modify?
Yes!"] + B --> B2["Sell copies as-is?
Yes!"] + B --> B3["Embed in closed product & sell?
Yes!"] + B --> B4["Must changes stay open?
No (Optional)"] + + C --> C1["Run & Modify?
Yes!"] + C --> C2["Sell copies as-is?
Yes!"] + C --> C3["Embed in closed product & sell?
No!"] + C --> C4["Must changes stay open?
Yes! (Mandatory)"] + + D --> D1["Run & Modify?
No! (Zero permission)"] + D --> D2["Sell copies as-is?
No!"] + D --> D3["Embed in closed product & sell?
No!"] + D --> D4["Can I change code?
No (Closed source)"] + subgraph osi["Open Source Initiative (OSI)"] + osi_H["๐Ÿ‘‰ Some exceptions exists"] + B["Permissive
(MIT, BSD, Apache-2.0)"] + C["Copyleft / Reciprocal
(EUPL, GPL, LGPL)"] + end + end + classDef permissive fill:#e6ffe6,stroke:#2b8a3e,stroke-width:2px,color:#1b4332; + classDef copyleft fill:#fff9db,stroke:#f59f00,stroke-width:2px,color:#5c3c00; + classDef proprietary fill:#ffe3e3,stroke:#e03131,stroke-width:2px,color:#5c0000; + classDef header fill:#f8f9fa,stroke:#495057,stroke-width:2px,color:#212529; + classDef mains fill:#fafadc,stroke:#495057,stroke-width:2px,color:#212529; + classDef osiBox fill:#f8f9fa,stroke:#0275d8,stroke-width:2px,stroke-dasharray: 5 5,color:#0275d8; + classDef box fill:#ffffff; + class B1,B2,B3,B4,C1,C2 permissive; + class C3,C4,D1,D2,D3,D4 proprietary; + class box box; + class A,B,C,D mains; + class osi_H,osi osiBox; + ``` ::::{exercise} Scenario 1: Own algorithm with external dependencies From cb1e18f051b4fda7a099b4e414c1d2b3bfce0d37 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Wed, 2 Sep 2026 23:07:07 +0200 Subject: [PATCH 05/32] Make scenario 1 shorter --- content/software-licensing-eu.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 7e66263..b688374 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -99,11 +99,9 @@ If you need formal guidance reference below could be used: ``` ::::{exercise} Scenario 1: Own algorithm with external dependencies -You wrote an original algorithm from scratch (in Python, C++, Rust, etc.). Your repository contains only your original source code, but relies on third-party libraries referenced via dependency manifests (`requirements.txt`, `CMakeLists.txt`, `Cargo.toml`). +You wrote an original algorithm from scratch (in Python, C++, Rust, etc.). Your repository contains only your original source code, but relies on third-party libraries referenced via dependency manifests, i.e. tell the user what dependencies are needed to be satisfied and they obtain it them selves (`requirements.txt`, `CMakeLists.txt`, `Cargo.toml`). -**Tasks**: -1. Can you apply any open-source license you want to your repository? -2. Practice selecting a **Permissive** open-source license using the [Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) by toggling the following options: +[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide: | ๐ŸŸข **Can** | โšช **Must** | ๐ŸŸก **Support** | | :--- | :--- | :--- | @@ -112,11 +110,12 @@ You wrote an original algorithm from scratch (in Python, C++, Rust, etc.). Your | [x] Distribute | | | :::{solution} -**Legal Reality**: Referenced external dependencies remain separate packages[cite: 1]. Because you have not pasted third-party source code directly into your repository files, you hold full copyright over your original codebase[cite: 1]. +**Legal Reality**: Referenced external dependencies remain separate packages. Because you have not pasted third-party source code directly into your repository files, you hold full copyright over your original codebase. -* **Outcome**: **Fully Permissible.** You own the original source code and can choose any open-source license (e.g., MIT, Apache-2.0, EUPL-1.2, GPL-3.0)[cite: 1]. +* **Outcome**: **Fully Permissible.** You own the original source code and can choose any open-source license. * **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` -* **Why**: Selecting these filters returns licenses that grant maximum reuse and commercial rights while requiring only standard copyright attribution[cite: 1]. -* **User Obligation**: Downstream users who compile or run your software must comply with the individual licenses of external packages when fetching or linking them[cite: 1]. +* **Why**: Selecting these filters returns licenses that grant maximum reuse and commercial rights while requiring only standard copyright attribution. +* **User Obligation**: Downstream users who compile or run your software must comply with the individual licenses of external packages when fetching or linking them. +* **Mixing, redistribution: ::: :::: From 596d35b4995cd98c12e6ffb01ace6432f2242b77 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Wed, 2 Sep 2026 23:29:02 +0200 Subject: [PATCH 06/32] include new lesson --- content/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/index.rst b/content/index.rst index 4486a72..49c059b 100644 --- a/content/index.rst +++ b/content/index.rst @@ -51,7 +51,7 @@ navigating and deciding on licenses. :hidden: social-coding - software-licensing + software-licensing-eu software-citation sharing-data From e77d6560467a2b32ccda7f9fd1cd519811ec37d5 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Wed, 2 Sep 2026 23:29:18 +0200 Subject: [PATCH 07/32] Scenario 2 --- content/software-licensing-eu.md | 46 +++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index b688374..d2cbf0c 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -99,23 +99,51 @@ If you need formal guidance reference below could be used: ``` ::::{exercise} Scenario 1: Own algorithm with external dependencies -You wrote an original algorithm from scratch (in Python, C++, Rust, etc.). Your repository contains only your original source code, but relies on third-party libraries referenced via dependency manifests, i.e. tell the user what dependencies are needed to be satisfied and they obtain it them selves (`requirements.txt`, `CMakeLists.txt`, `Cargo.toml`). +You wrote an original algorithm from scratch (in Python, C++, Rust, etc.). Your repository contains only your original source code and dependency specifications (`requirements.txt`, `CMakeLists.txt`, `Cargo.toml`, or dynamic linking flags). + +* **Licensing Goal**: You want **maximum adoption** and zero friction for commercial or academic reuse. [Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide: | ๐ŸŸข **Can** | โšช **Must** | ๐ŸŸก **Support** | | :--- | :--- | :--- | -| [x] Commercial use | [x] Incl. Copyright | [x] OSI approved | -| [x] Modify/merge | | | -| [x] Distribute | | | +| โ˜‘ Commercial use | โ˜‘ Incl. Copyright | โ˜‘ OSI approved | +| โ˜‘ Modify/merge | | | +| โ˜‘ Distribute | | | :::{solution} -**Legal Reality**: Referenced external dependencies remain separate packages. Because you have not pasted third-party source code directly into your repository files, you hold full copyright over your original codebase. +**Legal Reality**: External dependencies remain separate works. Because you have not bundled third-party code inside your repository, you hold full copyright over your original codebase. -* **Outcome**: **Fully Permissible.** You own the original source code and can choose any open-source license. +* **Outcome**: **Fully Permissible.** You own the code and can choose any open-source license. +* **Selected Category**: **Permissive** (driven by your goal of maximum adoption). * **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` -* **Why**: Selecting these filters returns licenses that grant maximum reuse and commercial rights while requiring only standard copyright attribution. -* **User Obligation**: Downstream users who compile or run your software must comply with the individual licenses of external packages when fetching or linking them. -* **Mixing, redistribution: +* **Why**: Filters select licenses granting maximum reuse while requiring only basic copyright attribution. +* **User Obligation**: Downstream users must comply with individual external package licenses when fetching, compiling, or running them. +* **Mixing & Redistribution**: Anyone can freely mix, embed, or redistribute your source code. If a user compiles and distributes a combined binary that dynamically links to a copyleft shared library (e.g., GPL `.so`), their *distributed binary* must comply with copyleft obligations, but your upstream source repository remains unaffected under your chosen permissive license. +::: +:::: + +::::{exercise} Scenario 2: Implementing an algorithm from a paper +You read a published scientific paper or technical specification, understand the underlying mathematical algorithm, and write your own original software implementation from scratch. + +* **Licensing Goal**: You want **reciprocal protection** anyone can use your implementation, but any downstream modifications distributed by others must remain open source. + +[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide: + +| ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | +| :--- | :--- | :--- | +| โ˜‘ Commercial use | โ˜‘ Copyleft/Share a. | โ˜‘ For software | +| โ˜‘ Modify/merge | โ˜‘ Disclose source | | +| โ˜‘ Distribute | | | + +:::{solution} +**Legal Reality**: Under EU Directive 2009/24/EC Art. 1(2), copyright protects specific source code *expression*, not underlying mathematical algorithms or scientific principles. Writing a fresh implementation creates a brand-new, independent copyright. + +* **Outcome**: **Fully Permissible.** You own 100% of the copyright for your software implementation and can choose any open-source license. +* **Selected Category**: **Copyleft / Reciprocal** (driven by your goal of community protection). +* **JLA Expected Matches**: `EUPL-1.2`, `GPL-3.0`, `AGPL-3.0` +* **Why**: Selecting **"Copyleft/Share a."** and **"Disclose source"** filters out permissive licenses to isolate reciprocal terms. +* **User Obligation**: Users who redistribute your software or their modified versions must provide source code access under the same copyleft terms. +* **Mixing & Redistribution**: Anyone can use and modify your code. However, if a third party integrates your copyleft implementation into their software and distributes the combined product, their whole application must be released under a compatible open-source copyleft license. ::: :::: From 66f7026130baf0f79e90401bb9149c2d6c3507c6 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Thu, 3 Sep 2026 12:06:00 +0200 Subject: [PATCH 08/32] make scenarios consitent --- content/software-licensing-eu.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index d2cbf0c..3889006 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -105,21 +105,21 @@ You wrote an original algorithm from scratch (in Python, C++, Rust, etc.). Your [Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide: -| ๐ŸŸข **Can** | โšช **Must** | ๐ŸŸก **Support** | -| :--- | :--- | :--- | -| โ˜‘ Commercial use | โ˜‘ Incl. Copyright | โ˜‘ OSI approved | -| โ˜‘ Modify/merge | | | -| โ˜‘ Distribute | | | +| ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | ๐ŸŸก **Support** | +| :--- | :--- | :--- | :--- | +| โ˜‘ Commercial use | โ˜‘ Incl. Copyright | โ˜‘ For software | โ˜‘ OSI approved | +| โ˜‘ Modify/merge | | | | +| โ˜‘ Distribute | | | | :::{solution} **Legal Reality**: External dependencies remain separate works. Because you have not bundled third-party code inside your repository, you hold full copyright over your original codebase. * **Outcome**: **Fully Permissible.** You own the code and can choose any open-source license. -* **Selected Category**: **Permissive** (driven by your goal of maximum adoption). +* **Selected Category**: **Permissive** (driven by our goal of maximum adoption). * **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` -* **Why**: Filters select licenses granting maximum reuse while requiring only basic copyright attribution. +* **Why**: The filters select licenses granting maximum reuse while requiring only basic copyright attribution (`Incl. Copyright`). * **User Obligation**: Downstream users must comply with individual external package licenses when fetching, compiling, or running them. -* **Mixing & Redistribution**: Anyone can freely mix, embed, or redistribute your source code. If a user compiles and distributes a combined binary that dynamically links to a copyleft shared library (e.g., GPL `.so`), their *distributed binary* must comply with copyleft obligations, but your upstream source repository remains unaffected under your chosen permissive license. +* **Mixing & Redistribution**: Anyone can freely mix, embed, or redistribute your source code. If a user compiles and distributes a combined **binary** that dynamically links to a copyleft shared library (e.g., GPL `.so`), their *distributed binary* must comply with copyleft obligations, but your upstream source repository remains unaffected under your chosen permissive license. ::: :::: @@ -130,11 +130,11 @@ You read a published scientific paper or technical specification, understand the [Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide: -| ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | -| :--- | :--- | :--- | -| โ˜‘ Commercial use | โ˜‘ Copyleft/Share a. | โ˜‘ For software | -| โ˜‘ Modify/merge | โ˜‘ Disclose source | | -| โ˜‘ Distribute | | | +| ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | ๐ŸŸก **Support** | +| :--- | :--- | :--- | :--- | +| โ˜‘ Commercial use | โ˜‘ Copyleft/Share a. | โ˜‘ For software | โ˜‘ OSI approved | +| โ˜‘ Modify/merge | โ˜‘ Disclose source | | | +| โ˜‘ Distribute | | | | :::{solution} **Legal Reality**: Under EU Directive 2009/24/EC Art. 1(2), copyright protects specific source code *expression*, not underlying mathematical algorithms or scientific principles. Writing a fresh implementation creates a brand-new, independent copyright. @@ -142,7 +142,7 @@ You read a published scientific paper or technical specification, understand the * **Outcome**: **Fully Permissible.** You own 100% of the copyright for your software implementation and can choose any open-source license. * **Selected Category**: **Copyleft / Reciprocal** (driven by your goal of community protection). * **JLA Expected Matches**: `EUPL-1.2`, `GPL-3.0`, `AGPL-3.0` -* **Why**: Selecting **"Copyleft/Share a."** and **"Disclose source"** filters out permissive licenses to isolate reciprocal terms. +* **Why**: Adding **`Copyleft/Share a.`** and **`Disclose source`** under the **Must** column isolates reciprocal terms while leaving all other baseline criteria identical. * **User Obligation**: Users who redistribute your software or their modified versions must provide source code access under the same copyleft terms. * **Mixing & Redistribution**: Anyone can use and modify your code. However, if a third party integrates your copyleft implementation into their software and distributes the combined product, their whole application must be released under a compatible open-source copyleft license. ::: From 7a24dba4bca219bcd530666c8a67c493a87ee632 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Thu, 3 Sep 2026 13:56:45 +0200 Subject: [PATCH 09/32] Ai licenses --- content/software-licensing-eu.md | 50 ++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 3889006..727563d 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -147,3 +147,53 @@ You read a published scientific paper or technical specification, understand the * **Mixing & Redistribution**: Anyone can use and modify your code. However, if a third party integrates your copyleft implementation into their software and distributes the combined product, their whole application must be released under a compatible open-source copyleft license. ::: :::: + +::::{exercise} Scenario 3: Directly embedding third-party Copyleft source code +You find a useful utility function or module online licensed under a **Copyleft / Reciprocal license** (e.g., GPL-3.0 or EUPL-1.2). You copy and paste this source code directly into your repository files and extend it to fit your project. + +* **Licensing Goal**: Fulfill legal obligations imposed by incorporating inbound copyleft code into your codebase. + +[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide: + +| ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | ๐ŸŸก **Support** | +| :--- | :--- | :--- | :--- | +| โ˜‘ Commercial use | โ˜‘ Copyleft/Share a. | โ˜‘ For software | โ˜‘ OSI approved | +| โ˜‘ Modify/merge | โ˜‘ Disclose source | | | +| โ˜‘ Distribute | | | | + +:::{solution} +**Legal Reality**: Unlike referencing external dependencies or writing code from scratch, pasting third-party source code directly into your repository creates a single combined (derivative) work. You do not hold exclusive copyright over the entire codebase. + +* **Outcome**: **Restricted Choice (Mandatory Copyleft).** You cannot choose a permissive license (e.g., MIT) or keep the repository proprietary. You must choose a copyleft license compatible with the inbound code. +* **Selected Category**: **Copyleft / Reciprocal** (mandated by the inbound license's copyleft clause). +* **JLA Expected Matches**: `EUPL-1.2`, `GPL-3.0` +* **Why**: Inbound copyleft terms mandate that any derivative work distributed as a whole must inherit reciprocal sharing obligations (`Copyleft/Share a.` and `Disclose source`). +* **User Obligation**: Anyone distributing your project must provide access to the full source code (including your modifications) under the matching copyleft terms. +* **Mixing & Redistribution**: Downstream users receive full copyleft freedoms. You cannot re-license your combined repository under a permissive license later unless you completely strip out or rewrite the third-party copyleft code from scratch. +::: +:::: + +::::{exercise} Scenario 4: Generating or assisting code using AI tools +You write software using AI coding assistants (e.g., GitHub Copilot, ChatGPT) to generate functions, boilerplate, or refactor algorithms. Your repository consists of a mix of human-authored code and AI-generated outputs. + +* **Licensing Goal**: You want **maximum adoption** (or any open-source model) and need to know if using AI tools restricts your choice of open-source license. + +[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide (example using Permissive selection): + +| ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | ๐ŸŸก **Support** | +| :--- | :--- | :--- | :--- | +| โ˜‘ Commercial use | โ˜‘ Incl. Copyright | โ˜‘ For software | โ˜‘ OSI approved | +| โ˜‘ Modify/merge | | | | +| โ˜‘ Distribute | | | | + +:::{solution} +**Legal Reality**: Under EU copyright law and international consensus, **pure AI-generated outputs lacking human authorship** and are generally **ineligible** for copyright protection. However, when you assemble, refine, and integrate AI code into an overarching software project through creative human effort, you hold copyright over the resulting human-authored work (provided the AI tool did not reproduce substantial copyrighted third-party snippets verbatim). + +* **Outcome**: **Fully Permissible.** The use of AI tools does not force a specific open-source license onto your repository. You retain the choice between Permissive or Copyleft based on your strategic goals. +* **Selected Category**: **Permissive** (or Copyleft, determined by author intent rather than the AI tool). +* **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` (or `EUPL-1.2`, `GPL-3.0` if your intent is Copyleft). +* **Why**: AI generation does not introduce third-party license obligations unless the AI model directly copied, copyrighted copyleft code from its training data. +* **User Obligation**: Standard obligations apply based on the license you choose to attach to your human-authored codebase. +* **Mixing & Redistribution**: Anyone can use, modify, or redistribute your repository under your chosen license. Downstream users are bound by your overall repository license terms, while the standalone, raw unedited AI snippets themselves remain ineligible for copyright protection. +::: +:::: From 01fd8874b46237e41b62120709bf996b507cbac7 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Thu, 3 Sep 2026 16:08:34 +0200 Subject: [PATCH 10/32] Update to how much ai --- content/software-licensing-eu.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 727563d..092f6f3 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -189,6 +189,8 @@ You write software using AI coding assistants (e.g., GitHub Copilot, ChatGPT) to :::{solution} **Legal Reality**: Under EU copyright law and international consensus, **pure AI-generated outputs lacking human authorship** and are generally **ineligible** for copyright protection. However, when you assemble, refine, and integrate AI code into an overarching software project through creative human effort, you hold copyright over the resulting human-authored work (provided the AI tool did not reproduce substantial copyrighted third-party snippets verbatim). +* **How much AI assitance allowed**: There is no prenstage stated, if a dispute arrises *Human Authorship and Creative Control* used by the justice system. Treat AI like an boilerplate code generator, advanced autocomplete or research assistant and use it for actively guiding, reviewing, modifying, and structuring the code compared to *press a button to generate all the code* would be the direction to follow if you are planing to license it. +* **How to check if AI gave copyrighted material**: Manual code base search, built in facilities in AI tools like *Block suggestions matching public code* in GitHub Copilot. Automated license scanners like FOSSology or Snyk. * **Outcome**: **Fully Permissible.** The use of AI tools does not force a specific open-source license onto your repository. You retain the choice between Permissive or Copyleft based on your strategic goals. * **Selected Category**: **Permissive** (or Copyleft, determined by author intent rather than the AI tool). * **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` (or `EUPL-1.2`, `GPL-3.0` if your intent is Copyleft). From da785210282cd5979fa2fbc238be277756fd24eb Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Thu, 3 Sep 2026 16:12:09 +0200 Subject: [PATCH 11/32] Update to how much ai --- content/software-licensing-eu.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 092f6f3..6bc6b22 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -189,12 +189,11 @@ You write software using AI coding assistants (e.g., GitHub Copilot, ChatGPT) to :::{solution} **Legal Reality**: Under EU copyright law and international consensus, **pure AI-generated outputs lacking human authorship** and are generally **ineligible** for copyright protection. However, when you assemble, refine, and integrate AI code into an overarching software project through creative human effort, you hold copyright over the resulting human-authored work (provided the AI tool did not reproduce substantial copyrighted third-party snippets verbatim). -* **How much AI assitance allowed**: There is no prenstage stated, if a dispute arrises *Human Authorship and Creative Control* used by the justice system. Treat AI like an boilerplate code generator, advanced autocomplete or research assistant and use it for actively guiding, reviewing, modifying, and structuring the code compared to *press a button to generate all the code* would be the direction to follow if you are planing to license it. -* **How to check if AI gave copyrighted material**: Manual code base search, built in facilities in AI tools like *Block suggestions matching public code* in GitHub Copilot. Automated license scanners like FOSSology or Snyk. +* **How Much AI Assistance Is Allowed**: There is no fixed percentage threshold. If a legal dispute arises, courts evaluate **Human Authorship and Creative Control**. Using AI as a boilerplate code generator, advanced autocomplete, or research assistant where you actively guide, review, modify, and structure the code preserves your copyright ownership. Conversely, simply pressing a button to generate an entire project without human creative intervention yields uncopyrightable output. +* **How to Check for Copyrighted Material**: Combine manual codebase searches (e.g., GitHub Code Search), built-in AI tool filters (such as *Block suggestions matching public code* in GitHub Copilot), and automated open-source license scanners (like FOSSology or Snyk). * **Outcome**: **Fully Permissible.** The use of AI tools does not force a specific open-source license onto your repository. You retain the choice between Permissive or Copyleft based on your strategic goals. * **Selected Category**: **Permissive** (or Copyleft, determined by author intent rather than the AI tool). * **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` (or `EUPL-1.2`, `GPL-3.0` if your intent is Copyleft). -* **Why**: AI generation does not introduce third-party license obligations unless the AI model directly copied, copyrighted copyleft code from its training data. * **User Obligation**: Standard obligations apply based on the license you choose to attach to your human-authored codebase. * **Mixing & Redistribution**: Anyone can use, modify, or redistribute your repository under your chosen license. Downstream users are bound by your overall repository license terms, while the standalone, raw unedited AI snippets themselves remain ineligible for copyright protection. ::: From 0432f2ab065593b2c11f43a0a3b072fed1d3f2aa Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Thu, 3 Sep 2026 16:32:15 +0200 Subject: [PATCH 12/32] embedding third-party Permissive source code --- content/software-licensing-eu.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 6bc6b22..d01d6b3 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -198,3 +198,27 @@ You write software using AI coding assistants (e.g., GitHub Copilot, ChatGPT) to * **Mixing & Redistribution**: Anyone can use, modify, or redistribute your repository under your chosen license. Downstream users are bound by your overall repository license terms, while the standalone, raw unedited AI snippets themselves remain ineligible for copyright protection. ::: :::: +::::{exercise} Scenario 5: Directly embedding third-party Permissive source code +You find a useful helper module online licensed under a **Permissive license** (e.g., MIT or BSD-3-Clause). You copy and paste this code directly into your repository to build upon it. + +* **Licensing Goal**: You want to know if including permissive third-party code limits your overall repository license choices (e.g., if you prefer a Copyleft license like EUPL-1.2 or GPL-3.0). + +[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide (example selecting Copyleft): + +| ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | ๐ŸŸก **Support** | +| :--- | :--- | :--- | :--- | +| โ˜‘ Commercial use | โ˜‘ Copyleft/Share a. | โ˜‘ For software | โ˜‘ OSI approved | +| โ˜‘ Modify/merge | โ˜‘ Disclose source | | | +| โ˜‘ Distribute | | | | + +:::{solution} +**Legal Reality**: Permissive licenses (MIT, BSD) grant broad rights to combine, modify, and re-license derivative works under different terms, provided you preserve the original author's copyright notice and license text in the copied files. + +* **Outcome**: **Full Flexibility.** Unlike inbound Copyleft (Scenario 3), embedding Permissive code does not force a specific license on your project. You can license your combined repository as Permissive *or* Copyleft. +* **Selected Category**: **Copyleft** (or Permissive, depending on your intent). +* **JLA Expected Matches**: `EUPL-1.2`, `GPL-3.0` (or `MIT`, `Apache-2.0` if Permissive goal). +* **Why**: Permissive inbound code is compatible with almost all OSI-approved software licenses. +* **User Obligation**: You must retain the original copyright notice and MIT/BSD license text within the specific files or NOTICE file where the copied code resides. +* **Mixing & Redistribution**: Downstream users follow your repository's overall license terms, but the original permissive author's attribution notice must remain intact inside the codebase. +::: +:::: From f6d48f058c879637883bde4e22d2a8fc2ceb6561 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Thu, 3 Sep 2026 16:34:36 +0200 Subject: [PATCH 13/32] linking against a Strong Copyleft --- content/software-licensing-eu.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index d01d6b3..68367c0 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -222,3 +222,28 @@ You find a useful helper module online licensed under a **Permissive license** ( * **Mixing & Redistribution**: Downstream users follow your repository's overall license terms, but the original permissive author's attribution notice must remain intact inside the codebase. ::: :::: + +::::{exercise} Scenario 6: Linking against a Strong Copyleft library (e.g., GSL or FFTW) +You write your own original code from scratch, but your program includes or links against a third-party scientific library licensed under a **Strong Copyleft license** (such as GPL-3.0). + +* **Licensing Goal**: You want to publish your repository and need to select a license that complies with the inbound linking requirements of the GPL library. + +[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide: + +| ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | ๐ŸŸก **Support** | +| :--- | :--- | :--- | :--- | +| โ˜‘ Commercial use | โ˜‘ Copyleft/Share a. | โ˜‘ For software | โ˜‘ OSI approved | +| โ˜‘ Modify/merge | โ˜‘ Disclose source | | | +| โ˜‘ Distribute | | | | + +:::{solution} +**Legal Reality**: Linking your code (statically or dynamically) with a Strong Copyleft library like GPL creates a combined software work upon compilation and distribution. The strong copyleft obligation extends across the linking boundary. + +* **Outcome**: **Mandatory Copyleft.** To distribute the compiled application or repository, your code must be licensed under a GPL-compatible copyleft license. You cannot license the overall project under a Permissive license (like MIT). +* **Selected Category**: **Copyleft / Reciprocal** (required by the linked GPL library). +* **JLA Expected Matches**: `GPL-3.0`, `AGPL-3.0`, `EUPL-1.2` +* **Why**: The linked library's reciprocal license mandates that any distributed program depending on it must also provide source code access under compatible copyleft terms (`Copyleft/Share a.` and `Disclose source`). +* **User Obligation**: Users who distribute binaries or modified packages of your project must provide the full source code under the GPL-compatible copyleft license. +* **Mixing & Redistribution**: Anyone using or building upon your work must maintain the GPL-compatible copyleft license. If you want to avoid copyleft restrictions for your codebase, you must replace the GPL library dependency with a permissively licensed alternative (e.g., an MIT or BSD library). +::: +:::: From 3a9ef7e0754ab417e601b73b26518442dd92c29b Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Thu, 3 Sep 2026 17:26:00 +0200 Subject: [PATCH 14/32] Move us EU diffrences to the bottom --- content/software-licensing-eu.md | 55 ++++++++++++++++---------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 68367c0..00fd61d 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -26,33 +26,6 @@ If you need formal guidance reference below could be used: - Protected: Specific text and expression of a program in any form, including preparatory design work - Not protected: Underlying ideas, mathematical algorithms, logic, and interface principles. -## Difference in terminology in the US regulative text and EU regulation 2009/24/EC - -### 1. Modified Code & Works -* **US Concept**: **Derivative Work** (broadly defined in the US Copyright Act). -* **EU Concept**: **Adaptation**, translation, arrangement, or alteration (Directive 2009/24/EC Art. 4(1)(b)). -* **Practical Impact**: EU law avoids the term "derivative work." Any code modifications are classified as specific statutory acts of adaptation or translation. - -### 2. User Rights & Exceptions -* **US Concept**: **Fair Use** (flexible judicial doctrine evaluated case-by-case in court). -* **EU Concept**: **Statutory Exceptions** (strictly codified rights, such as error correction under Art. 5(1) or decompilation for interoperability under Art. 6). -* **Practical Impact**: EU user rights are fixed by statute and cannot be overridden by contract, avoiding reliance on judicial interpretation. - -### 3. Waiver of Rights -* **US Concept**: **Public Domain Dedication** (authors can fully surrender economic and moral rights). -* **EU Concept**: **Economic Rights Transfer / Non-Waivable Moral Rights**. -* **Practical Impact**: European legal traditions do not allow full waiver of moral rights (e.g., right to attribution), requiring permissive open licenses rather than pure public domain dedications. - -### 4. Work Ownership in Employment -* **US Concept**: **Work Made for Hire** (the employer is legally recognized as the primary author). -* **EU Concept**: **Employer Economic Rights** (Directive 2009/24/EC Art. 2(3)). -* **Practical Impact**: The individual developer remains the author, but all economic rights automatically transfer to the employer for code created during employment duties. - -### 5. Non-Protectable Elements -* **US Concept**: **Idea-Expression Dichotomy** (established primarily through court case law). -* **EU Concept**: **Expression vs. Ideas, Principles, & Interfaces** (explicitly codified under Directive 2009/24/EC Art. 1(2)). -* **Practical Impact**: EU statutory law explicitly excludes algorithms, programming languages, logic, and interface principles from copyright protection. - ## Claisfication of licenses related to software @@ -247,3 +220,31 @@ You write your own original code from scratch, but your program includes or link * **Mixing & Redistribution**: Anyone using or building upon your work must maintain the GPL-compatible copyleft license. If you want to avoid copyleft restrictions for your codebase, you must replace the GPL library dependency with a permissively licensed alternative (e.g., an MIT or BSD library). ::: :::: + +## Difference in terminology in the US regulative text and EU regulation 2009/24/EC + +### 1. Modified Code & Works +* **US Concept**: **Derivative Work** (broadly defined in the US Copyright Act). +* **EU Concept**: **Adaptation**, translation, arrangement, or alteration (Directive 2009/24/EC Art. 4(1)(b)). +* **Practical Impact**: EU law avoids the term "derivative work." Any code modifications are classified as specific statutory acts of adaptation or translation. + +### 2. User Rights & Exceptions +* **US Concept**: **Fair Use** (flexible judicial doctrine evaluated case-by-case in court). +* **EU Concept**: **Statutory Exceptions** (strictly codified rights, such as error correction under Art. 5(1) or decompilation for interoperability under Art. 6). +* **Practical Impact**: EU user rights are fixed by statute and cannot be overridden by contract, avoiding reliance on judicial interpretation. + +### 3. Waiver of Rights +* **US Concept**: **Public Domain Dedication** (authors can fully surrender economic and moral rights). +* **EU Concept**: **Economic Rights Transfer / Non-Waivable Moral Rights**. +* **Practical Impact**: European legal traditions do not allow full waiver of moral rights (e.g., right to attribution), requiring permissive open licenses rather than pure public domain dedications. + +### 4. Work Ownership in Employment +* **US Concept**: **Work Made for Hire** (the employer is legally recognized as the primary author). +* **EU Concept**: **Employer Economic Rights** (Directive 2009/24/EC Art. 2(3)). +* **Practical Impact**: The individual developer remains the author, but all economic rights automatically transfer to the employer for code created during employment duties. + +### 5. Non-Protectable Elements +* **US Concept**: **Idea-Expression Dichotomy** (established primarily through court case law). +* **EU Concept**: **Expression vs. Ideas, Principles, & Interfaces** (explicitly codified under Directive 2009/24/EC Art. 1(2)). +* **Practical Impact**: EU statutory law explicitly excludes algorithms, programming languages, logic, and interface principles from copyright protection. + From 8fd34d2a6625151485aa6f47344f07f66b628053 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Thu, 3 Sep 2026 23:02:59 +0200 Subject: [PATCH 15/32] Objectives --- content/software-licensing-eu.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 00fd61d..25fc92f 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -1,7 +1,12 @@ -# Software licensing +# Software licensing focusing on open source ```{objectives} - - Objective 1 + +- Principles of open source license +- Difference between permissive and copyleft licenses. +- Determine software licence for your project folowing EU regulation. +- Navigate the Joinup Licensing Assistant to select a compliant license. + ``` ```{discussion} Limitations and context of this lesson From d4492906ce9e678128b972c0619c3ab87809304d Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Thu, 3 Sep 2026 23:24:27 +0200 Subject: [PATCH 16/32] Rearangment --- content/software-licensing-eu.md | 158 +++++++++++++++++-------------- 1 file changed, 85 insertions(+), 73 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 25fc92f..9c15ee5 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -27,9 +27,9 @@ If you need formal guidance reference below could be used: ## Introduction -- What parts of computer programs are protected by copyright - - Protected: Specific text and expression of a program in any form, including preparatory design work - - Not protected: Underlying ideas, mathematical algorithms, logic, and interface principles. +Because copyright only protects the expression (code) and not the ideas, developers use licenses to define how that expression can be legally reused. We can classify these licenses into three main categories + * **Protected**: Specific text and expression of a program in any form, including preparatory design work + * **Not protected**: Underlying ideas, mathematical algorithms, logic, and interface principles. ## Claisfication of licenses related to software @@ -76,6 +76,42 @@ If you need formal guidance reference below could be used: ``` +## Difference in terminology in the US regulative text and EU regulation 2009/24/EC + +### 1. Modified Code & Works +* **US Concept**: **Derivative Work** (broadly defined in the US Copyright Act). +* **EU Concept**: **Adaptation**, translation, arrangement, or alteration (Directive 2009/24/EC Art. 4(1)(b)). +* **Practical Impact**: EU law avoids the term "derivative work." Any code modifications are classified as specific statutory acts of adaptation or translation. + +### 2. User Rights & Exceptions +* **US Concept**: **Fair Use** (flexible judicial doctrine evaluated case-by-case in court). +* **EU Concept**: **Statutory Exceptions** (strictly codified rights, such as error correction under Art. 5(1) or decompilation for interoperability under Art. 6). +* **Practical Impact**: EU user rights are fixed by statute and cannot be overridden by contract, avoiding reliance on judicial interpretation. + +### 3. Waiver of Rights +* **US Concept**: **Public Domain Dedication** (authors can fully surrender economic and moral rights). +* **EU Concept**: **Economic Rights Transfer / Non-Waivable Moral Rights**. +* **Practical Impact**: European legal traditions do not allow full waiver of moral rights (e.g., right to attribution), requiring permissive open licenses rather than pure public domain dedications. + +### 4. Work Ownership in Employment +* **US Concept**: **Work Made for Hire** (the employer is legally recognized as the primary author). +* **EU Concept**: **Employer Economic Rights** (Directive 2009/24/EC Art. 2(3)). +* **Practical Impact**: The individual developer remains the author, but all economic rights automatically transfer to the employer for code created during employment duties. + +### 5. Non-Protectable Elements +* **US Concept**: **Idea-Expression Dichotomy** (established primarily through court case law). +* **EU Concept**: **Expression vs. Ideas, Principles, & Interfaces** (explicitly codified under Directive 2009/24/EC Art. 1(2)). +* **Practical Impact**: EU statutory law explicitly excludes algorithms, programming languages, logic, and interface principles from copyright protection. + + +## How to select a license + +Lets go through some examples on how to use the European Commission's Joinup Licensing Assistant (JLA) to select licenses. The JLA groups license clauses into four categories that map to the visual diagram above: + * ๐ŸŸข Can (Rights): What you are allowed to do (e.g., Run, Modify). Matches the "Yes!" bubbles in the diagram. + * โšช Must (Obligations): What you are required to do (e.g., Include Copyright for Permissive, or Share Alike for Copyleft). Maps to "Must changes stay open?". + * ๐Ÿ”ต Compatible: What context the code is used in (e.g., For software). + * ๐ŸŸก Support: External verification (e.g., OSI approved). Maps to the blue dashed box. + ::::{exercise} Scenario 1: Own algorithm with external dependencies You wrote an original algorithm from scratch (in Python, C++, Rust, etc.). Your repository contains only your original source code and dependency specifications (`requirements.txt`, `CMakeLists.txt`, `Cargo.toml`, or dynamic linking flags). @@ -97,7 +133,7 @@ You wrote an original algorithm from scratch (in Python, C++, Rust, etc.). Your * **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` * **Why**: The filters select licenses granting maximum reuse while requiring only basic copyright attribution (`Incl. Copyright`). * **User Obligation**: Downstream users must comply with individual external package licenses when fetching, compiling, or running them. -* **Mixing & Redistribution**: Anyone can freely mix, embed, or redistribute your source code. If a user compiles and distributes a combined **binary** that dynamically links to a copyleft shared library (e.g., GPL `.so`), their *distributed binary* must comply with copyleft obligations, but your upstream source repository remains unaffected under your chosen permissive license. +* **Mixing & Redistribution**: Anyone can freely mix, embed, or redistribute your source code. If a user compiles and distributes a combined **binary** that dynamically links to a copyleft shared library (e.g., GPL `.so`), their *distributed compiled binary* must comply with copyleft obligations, but your upstream source repository remains unaffected under your chosen permissive license. ::: :::: @@ -126,12 +162,12 @@ You read a published scientific paper or technical specification, understand the ::: :::: -::::{exercise} Scenario 3: Directly embedding third-party Copyleft source code -You find a useful utility function or module online licensed under a **Copyleft / Reciprocal license** (e.g., GPL-3.0 or EUPL-1.2). You copy and paste this source code directly into your repository files and extend it to fit your project. +::::{exercise} Scenario 3: Directly embedding third-party Permissive source code +You find a useful helper module online licensed under a **Permissive license** (e.g., MIT or BSD-3-Clause). You copy and paste this code directly into your repository to build upon it. -* **Licensing Goal**: Fulfill legal obligations imposed by incorporating inbound copyleft code into your codebase. +* **Licensing Goal**: You want to know if including permissive third-party code limits your overall repository license choices (e.g., if you prefer a Copyleft license like EUPL-1.2 or GPL-3.0). -[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide: +[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide (example selecting Copyleft): | ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | ๐ŸŸก **Support** | | :--- | :--- | :--- | :--- | @@ -140,48 +176,24 @@ You find a useful utility function or module online licensed under a **Copyleft | โ˜‘ Distribute | | | | :::{solution} -**Legal Reality**: Unlike referencing external dependencies or writing code from scratch, pasting third-party source code directly into your repository creates a single combined (derivative) work. You do not hold exclusive copyright over the entire codebase. +**Legal Reality**: Permissive licenses (MIT, BSD) grant broad rights to combine, modify, and re-license derivative works under different terms, provided you preserve the original author's copyright notice and license text in the copied files. -* **Outcome**: **Restricted Choice (Mandatory Copyleft).** You cannot choose a permissive license (e.g., MIT) or keep the repository proprietary. You must choose a copyleft license compatible with the inbound code. -* **Selected Category**: **Copyleft / Reciprocal** (mandated by the inbound license's copyleft clause). -* **JLA Expected Matches**: `EUPL-1.2`, `GPL-3.0` -* **Why**: Inbound copyleft terms mandate that any derivative work distributed as a whole must inherit reciprocal sharing obligations (`Copyleft/Share a.` and `Disclose source`). -* **User Obligation**: Anyone distributing your project must provide access to the full source code (including your modifications) under the matching copyleft terms. -* **Mixing & Redistribution**: Downstream users receive full copyleft freedoms. You cannot re-license your combined repository under a permissive license later unless you completely strip out or rewrite the third-party copyleft code from scratch. +* **Outcome**: **Full Flexibility.** Unlike inbound Copyleft (Scenario 3), embedding Permissive code does not force a specific license on your project. You can license your combined repository as Permissive *or* Copyleft. +* **Selected Category**: **Copyleft** (or Permissive, depending on your intent). +* **JLA Expected Matches**: `EUPL-1.2`, `GPL-3.0` (or `MIT`, `Apache-2.0` if Permissive goal). +* **Why**: Permissive inbound code is compatible with almost all OSI-approved software licenses. +* **User Obligation**: You must retain the original copyright notice and MIT/BSD license text within the specific files or NOTICE file where the copied code resides. +* **Mixing & Redistribution**: Downstream users follow your repository's overall license terms, but the original permissive author's attribution notice must remain intact inside the codebase. ::: :::: -::::{exercise} Scenario 4: Generating or assisting code using AI tools -You write software using AI coding assistants (e.g., GitHub Copilot, ChatGPT) to generate functions, boilerplate, or refactor algorithms. Your repository consists of a mix of human-authored code and AI-generated outputs. - -* **Licensing Goal**: You want **maximum adoption** (or any open-source model) and need to know if using AI tools restricts your choice of open-source license. -[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide (example using Permissive selection): - -| ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | ๐ŸŸก **Support** | -| :--- | :--- | :--- | :--- | -| โ˜‘ Commercial use | โ˜‘ Incl. Copyright | โ˜‘ For software | โ˜‘ OSI approved | -| โ˜‘ Modify/merge | | | | -| โ˜‘ Distribute | | | | - -:::{solution} -**Legal Reality**: Under EU copyright law and international consensus, **pure AI-generated outputs lacking human authorship** and are generally **ineligible** for copyright protection. However, when you assemble, refine, and integrate AI code into an overarching software project through creative human effort, you hold copyright over the resulting human-authored work (provided the AI tool did not reproduce substantial copyrighted third-party snippets verbatim). - -* **How Much AI Assistance Is Allowed**: There is no fixed percentage threshold. If a legal dispute arises, courts evaluate **Human Authorship and Creative Control**. Using AI as a boilerplate code generator, advanced autocomplete, or research assistant where you actively guide, review, modify, and structure the code preserves your copyright ownership. Conversely, simply pressing a button to generate an entire project without human creative intervention yields uncopyrightable output. -* **How to Check for Copyrighted Material**: Combine manual codebase searches (e.g., GitHub Code Search), built-in AI tool filters (such as *Block suggestions matching public code* in GitHub Copilot), and automated open-source license scanners (like FOSSology or Snyk). -* **Outcome**: **Fully Permissible.** The use of AI tools does not force a specific open-source license onto your repository. You retain the choice between Permissive or Copyleft based on your strategic goals. -* **Selected Category**: **Permissive** (or Copyleft, determined by author intent rather than the AI tool). -* **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` (or `EUPL-1.2`, `GPL-3.0` if your intent is Copyleft). -* **User Obligation**: Standard obligations apply based on the license you choose to attach to your human-authored codebase. -* **Mixing & Redistribution**: Anyone can use, modify, or redistribute your repository under your chosen license. Downstream users are bound by your overall repository license terms, while the standalone, raw unedited AI snippets themselves remain ineligible for copyright protection. -::: -:::: -::::{exercise} Scenario 5: Directly embedding third-party Permissive source code -You find a useful helper module online licensed under a **Permissive license** (e.g., MIT or BSD-3-Clause). You copy and paste this code directly into your repository to build upon it. +::::{exercise} Scenario 4: Directly embedding third-party Copyleft source code +You find a useful utility function or module online licensed under a **Copyleft / Reciprocal license** (e.g., GPL-3.0 or EUPL-1.2). You copy and paste this source code directly into your repository files and extend it to fit your project. -* **Licensing Goal**: You want to know if including permissive third-party code limits your overall repository license choices (e.g., if you prefer a Copyleft license like EUPL-1.2 or GPL-3.0). +* **Licensing Goal**: Fulfill legal obligations imposed by incorporating inbound copyleft code into your codebase. -[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide (example selecting Copyleft): +[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide: | ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | ๐ŸŸก **Support** | | :--- | :--- | :--- | :--- | @@ -190,18 +202,19 @@ You find a useful helper module online licensed under a **Permissive license** ( | โ˜‘ Distribute | | | | :::{solution} -**Legal Reality**: Permissive licenses (MIT, BSD) grant broad rights to combine, modify, and re-license derivative works under different terms, provided you preserve the original author's copyright notice and license text in the copied files. +**Legal Reality**: Unlike referencing external dependencies or writing code from scratch, pasting third-party source code directly into your repository creates a single combined (derivative) work. You do not hold exclusive copyright over the entire codebase. -* **Outcome**: **Full Flexibility.** Unlike inbound Copyleft (Scenario 3), embedding Permissive code does not force a specific license on your project. You can license your combined repository as Permissive *or* Copyleft. -* **Selected Category**: **Copyleft** (or Permissive, depending on your intent). -* **JLA Expected Matches**: `EUPL-1.2`, `GPL-3.0` (or `MIT`, `Apache-2.0` if Permissive goal). -* **Why**: Permissive inbound code is compatible with almost all OSI-approved software licenses. -* **User Obligation**: You must retain the original copyright notice and MIT/BSD license text within the specific files or NOTICE file where the copied code resides. -* **Mixing & Redistribution**: Downstream users follow your repository's overall license terms, but the original permissive author's attribution notice must remain intact inside the codebase. +* **Outcome**: **Restricted Choice (Mandatory Copyleft).** You cannot choose a permissive license (e.g., MIT) or keep the repository proprietary. You must choose a copyleft license compatible with the inbound code. +* **Selected Category**: **Copyleft / Reciprocal** (mandated by the inbound license's copyleft clause). +* **JLA Expected Matches**: `EUPL-1.2`, `GPL-3.0` +* **Why**: Inbound copyleft terms mandate that any derivative work distributed as a whole must inherit reciprocal sharing obligations (`Copyleft/Share a.` and `Disclose source`). +* **User Obligation**: Anyone distributing your project must provide access to the full source code (including your modifications) under the matching copyleft terms. +* **Mixing & Redistribution**: Downstream users receive full copyleft freedoms. You cannot re-license your combined repository under a permissive license later unless you completely strip out or rewrite the third-party copyleft code from scratch. ::: :::: -::::{exercise} Scenario 6: Linking against a Strong Copyleft library (e.g., GSL or FFTW) + +::::{exercise} Scenario 5: Linking against a Strong Copyleft library (e.g., GSL or FFTW) You write your own original code from scratch, but your program includes or links against a third-party scientific library licensed under a **Strong Copyleft license** (such as GPL-3.0). * **Licensing Goal**: You want to publish your repository and need to select a license that complies with the inbound linking requirements of the GPL library. @@ -226,30 +239,29 @@ You write your own original code from scratch, but your program includes or link ::: :::: -## Difference in terminology in the US regulative text and EU regulation 2009/24/EC - -### 1. Modified Code & Works -* **US Concept**: **Derivative Work** (broadly defined in the US Copyright Act). -* **EU Concept**: **Adaptation**, translation, arrangement, or alteration (Directive 2009/24/EC Art. 4(1)(b)). -* **Practical Impact**: EU law avoids the term "derivative work." Any code modifications are classified as specific statutory acts of adaptation or translation. +::::{exercise} Scenario 6: Generating or assisting code using AI tools +You write software using AI coding assistants (e.g., GitHub Copilot, ChatGPT) to generate functions, boilerplate, or refactor algorithms. Your repository consists of a mix of human-authored code and AI-generated outputs. -### 2. User Rights & Exceptions -* **US Concept**: **Fair Use** (flexible judicial doctrine evaluated case-by-case in court). -* **EU Concept**: **Statutory Exceptions** (strictly codified rights, such as error correction under Art. 5(1) or decompilation for interoperability under Art. 6). -* **Practical Impact**: EU user rights are fixed by statute and cannot be overridden by contract, avoiding reliance on judicial interpretation. +* **Licensing Goal**: You want **maximum adoption** (or any open-source model) and need to know if using AI tools restricts your choice of open-source license. -### 3. Waiver of Rights -* **US Concept**: **Public Domain Dedication** (authors can fully surrender economic and moral rights). -* **EU Concept**: **Economic Rights Transfer / Non-Waivable Moral Rights**. -* **Practical Impact**: European legal traditions do not allow full waiver of moral rights (e.g., right to attribution), requiring permissive open licenses rather than pure public domain dedications. +[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide (example using Permissive selection): -### 4. Work Ownership in Employment -* **US Concept**: **Work Made for Hire** (the employer is legally recognized as the primary author). -* **EU Concept**: **Employer Economic Rights** (Directive 2009/24/EC Art. 2(3)). -* **Practical Impact**: The individual developer remains the author, but all economic rights automatically transfer to the employer for code created during employment duties. +| ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | ๐ŸŸก **Support** | +| :--- | :--- | :--- | :--- | +| โ˜‘ Commercial use | โ˜‘ Incl. Copyright | โ˜‘ For software | โ˜‘ OSI approved | +| โ˜‘ Modify/merge | | | | +| โ˜‘ Distribute | | | | -### 5. Non-Protectable Elements -* **US Concept**: **Idea-Expression Dichotomy** (established primarily through court case law). -* **EU Concept**: **Expression vs. Ideas, Principles, & Interfaces** (explicitly codified under Directive 2009/24/EC Art. 1(2)). -* **Practical Impact**: EU statutory law explicitly excludes algorithms, programming languages, logic, and interface principles from copyright protection. +:::{solution} +**Legal Reality**: Under EU copyright law and international consensus, **pure AI-generated outputs lacking human authorship** and are generally **ineligible** for copyright protection. However, when you assemble, refine, and integrate AI code into an overarching software project through creative human effort, you hold copyright over the resulting human-authored work (provided the AI tool did not reproduce substantial copyrighted third-party snippets verbatim). + +* **How Much AI Assistance Is Allowed**: There is no fixed percentage threshold. If a legal dispute arises, courts evaluate **Human Authorship and Creative Control**. Using AI as a boilerplate code generator, advanced autocomplete, or research assistant where you actively guide, review, modify, and structure the code preserves your copyright ownership. Conversely, simply pressing a button to generate an entire project without human creative intervention yields uncopyrightable output. +* **How to Check for Copyrighted Material**: Combine manual codebase searches (e.g., GitHub Code Search), built-in AI tool filters (such as *Block suggestions matching public code* in GitHub Copilot), and automated open-source license scanners (like FOSSology or Snyk). +* **Outcome**: **Fully Permissible.** The use of AI tools does not force a specific open-source license onto your repository. You retain the choice between Permissive or Copyleft based on your strategic goals. +* **Selected Category**: **Permissive** (or Copyleft, determined by author intent rather than the AI tool). +* **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` (or `EUPL-1.2`, `GPL-3.0` if your intent is Copyleft). +* **User Obligation**: Standard obligations apply based on the license you choose to attach to your human-authored codebase. +* **Mixing & Redistribution**: Anyone can use, modify, or redistribute your repository under your chosen license. Downstream users are bound by your overall repository license terms, while the standalone, raw unedited AI snippets themselves remain ineligible for copyright protection. +::: +:::: From 33bfeaf45211d03131cd6d40841481fc2f46621d Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Fri, 4 Sep 2026 00:07:37 +0200 Subject: [PATCH 17/32] typo fixes --- content/software-licensing-eu.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 9c15ee5..9a01264 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -1,10 +1,9 @@ # Software licensing focusing on open source ```{objectives} - -- Principles of open source license +- Principles of open source licensing +- Determine the software license for your project following EU regulation - Difference between permissive and copyleft licenses. -- Determine software licence for your project folowing EU regulation. - Navigate the Joinup Licensing Assistant to select a compliant license. ``` @@ -25,11 +24,14 @@ If you need formal guidance reference below could be used: * [Research Software Alliance Policy Directory](https://www.researchsoft.org/software-policies/) ``` -## Introduction +## Introduction + +In the European Union, software protection is governed by copyright law, which makes a sharp distinction between what is protected and what is not: + + * **Protected**: The specific source code text, expression, binaries, and preparatory design work. + * **Not protected**: Underlying mathematical algorithms, ideas, programming logic, and interface principles. -Because copyright only protects the expression (code) and not the ideas, developers use licenses to define how that expression can be legally reused. We can classify these licenses into three main categories - * **Protected**: Specific text and expression of a program in any form, including preparatory design work - * **Not protected**: Underlying ideas, mathematical algorithms, logic, and interface principles. +Because copyright only protects the expression and not the underlying ideas, developers use licenses to define how that expression can be legally reused. ## Claisfication of licenses related to software @@ -56,7 +58,7 @@ Because copyright only protects the expression (code) and not the ideas, develop D --> D3["Embed in closed product & sell?
No!"] D --> D4["Can I change code?
No (Closed source)"] subgraph osi["Open Source Initiative (OSI)"] - osi_H["๐Ÿ‘‰ Some exceptions exists"] + osi_H["๐Ÿ‘‰ Some exceptions exist"] B["Permissive
(MIT, BSD, Apache-2.0)"] C["Copyleft / Reciprocal
(EUPL, GPL, LGPL)"] end @@ -129,7 +131,7 @@ You wrote an original algorithm from scratch (in Python, C++, Rust, etc.). Your **Legal Reality**: External dependencies remain separate works. Because you have not bundled third-party code inside your repository, you hold full copyright over your original codebase. * **Outcome**: **Fully Permissible.** You own the code and can choose any open-source license. -* **Selected Category**: **Permissive** (driven by our goal of maximum adoption). +* **Selected Category**: **Permissive** (driven by you goal of maximum adoption). * **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` * **Why**: The filters select licenses granting maximum reuse while requiring only basic copyright attribution (`Incl. Copyright`). * **User Obligation**: Downstream users must comply with individual external package licenses when fetching, compiling, or running them. From 42d344f682c3da48fecd57f191dae7c48d37ff8d Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Fri, 4 Sep 2026 23:35:44 +0200 Subject: [PATCH 18/32] Containers --- content/software-licensing-eu.md | 83 +++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 9a01264..a2a633b 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -4,7 +4,9 @@ - Principles of open source licensing - Determine the software license for your project following EU regulation - Difference between permissive and copyleft licenses. +- Regualtions for AI generated and AI assited code - Navigate the Joinup Licensing Assistant to select a compliant license. +- Understand the licensing distinction between container recipes and container images ``` @@ -33,6 +35,19 @@ In the European Union, software protection is governed by copyright law, which m Because copyright only protects the expression and not the underlying ideas, developers use licenses to define how that expression can be legally reused. +### Scope of this Lesson: What Counts as "Software"? + +Under EU statutory law (Directive 2009/24/EC) and international legal frameworks, software is legally defined as **a set of instructions to be used directly or indirectly in a computer to bring about a certain result**, protected under copyright as a literary work. + +Because copyright protection hinges on functional execution combined with creative human expression, this lesson covers the full spectrum of modern research software assets: + +* **Source Code**: Original algorithms written from scratch or implemented from scientific papers. +* **Third-Party Integrations**: Embedded permissive or copyleft code snippets and dynamically/statically linked libraries. +* **Container Recipes**: Infrastructure as Code text files (`Dockerfile`, Apptainer `.def`). +* **Container Images**: Bundled binary filesystem snapshots (`.sif` files, OCI registry images). +* **AI-Assisted Code**: Code generated, refactored, or assembled with human creative oversight. +* **AI Prompt Templates**: Complex, engineered system prompts and structured frameworks meeting the threshold of human creative authorship. + ## Claisfication of licenses related to software @@ -77,7 +92,23 @@ Because copyright only protects the expression and not the underlying ideas, dev class osi_H,osi osiBox; ``` - +### Best Practice: In-File Identification using SPDX + +Once you select a license, apply it to individual source files and build recipes using **SPDX identifiers** (Software Package Data Exchange). Managed by the Linux Foundation, an SPDX identifier is a standardized, machine-readable short tag (e.g., `MIT`, `Apache-2.0`, `GPL-3.0-only`, `0BSD`) recognized by automated compliance scanners, package managers, and CI/CD build pipelines. + +Instead of pasting long legal texts at the top of every file, add a single-line comment at the very first line of your script or recipe: + - In a container recipe + ```dockerfile + # SPDX-License-Identifier: MIT + FROM ubuntu:24.04 + ``` + - In a python script + ```python + # SPDX-License-Identifier: 0BSD + import numpy as np + ``` + +--- ## Difference in terminology in the US regulative text and EU regulation 2009/24/EC ### 1. Modified Code & Works @@ -267,3 +298,53 @@ You write software using AI coding assistants (e.g., GitHub Copilot, ChatGPT) to ::: :::: +::::{exercise} Scenario 7: Distributing a Container Build Recipe (Dockerfile or Apptainer .def) +You write or generate a container build recipe (`Dockerfile` or Apptainer `.def` file) to make your research reproducible. The recipe contains text commands that pull a base image, install system packages (`apt-get`), clone code from GitHub, and download data. + +* **Licensing Goal**: You want **maximum adoption** for your build recipe and zero restrictions on who can use or modify your setup instructions. + +[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide: + +| ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | ๐ŸŸก **Support** | +| :--- | :--- | :--- | :--- | +| โ˜‘ Commercial use | โ˜‘ Incl. Copyright | โ˜‘ For software | โ˜‘ OSI approved | +| โ˜‘ Modify/merge | | | | +| โ˜‘ Distribute | | | | + +:::{solution} +**Legal Reality**: A container recipe is a text file containing build instructions (Infrastructure as Code). Referencing external base images, packages, or repositories in build commands does not transfer third-party copyright onto your text file. + +* **Outcome**: **Fully Permissible.** You own the copyright to the build instructions you write and can choose any license for your recipe file. +* **If Generated by AI**: Using AI tools (Copilot, ChatGPT) to generate or refactor a `Dockerfile` follows standard AI code rules. As long as you review, adapt, and configure the recipe for your project, you hold the copyright and retain total freedom over its license. +* **Selected Category**: **Permissive** (driven by your goal of maximum adoption). +* **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` +* **Why**: The recipe file itself is source code. Referencing third-party packages in `RUN` or `FROM` steps is legally equivalent to writing an `import` statement or listing dependencies in `requirements.txt`. +* **User Obligation**: Users who download your recipe file must preserve your copyright notice. +* **Mixing & Redistribution**: Anyone can freely share or modify your `Dockerfile` or `.def` file under your chosen permissive license, regardless of whether the tools installed by the recipe are Permissive, Copyleft, or Proprietary. +::: +:::: +::::{exercise} Scenario 9: Including AI prompt templates in LLM applications +You develop a research software pipeline that uses Large Language Models (LLMs) for automated data extraction. Your repository contains Python scripts alongside a `prompts/` directory containing both short functional prompts (e.g., *"Extract keywords from this paper"*) and complex, 500-word structured prompt templates (e.g., system prompts, JSON schemas, and chain-of-thought frameworks). + +* **Licensing Goal**: You want **maximum adoption** for your application and want to ensure your prompt templates are legally covered under the same open-source license as your Python code. + +[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide: + +| ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | ๐ŸŸก **Support** | +| :--- | :--- | :--- | :--- | +| โ˜‘ Commercial use | โ˜‘ Incl. Copyright | โ˜‘ For software | โ˜‘ OSI approved | +| โ˜‘ Modify/merge | | | | +| โ˜‘ Distribute | | | | + +:::{solution} +**Legal Reality**: Copyrightability depends on creative complexity. Simple, functional prompts lack the minimal threshold of creative human expression and carry no copyright. However, complex, highly structured prompt templates are legally classified as literary text assets and are fully protected by copyright. + +* **Outcome**: **Fully Coverable.** Engineered prompt templates checked into your repository are treated like source code assets. Applying your overall repository license automatically covers these prompt files. +* **Simple vs. Engineered Prompts**: Short commands (e.g., *"Fix this Dockerfile"*) are uncopyrightable instructions. Complex system prompts, XML-formatted templates, or multi-step reasoning frameworks meet the threshold of creative human authorship. +* **Selected Category**: **Permissive** (driven by your goal of maximum adoption). +* **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` +* **Why**: Permissive open-source licenses cover software text assets, allowing downstream developers to incorporate, modify, and execute your prompt templates in their own AI pipelines. +* **User Obligation**: Standard attribution obligations apply. Downstream users who copy your prompt files must preserve your copyright notice and file headers (e.g., `# SPDX-License-Identifier: MIT`). +* **Mixing & Redistribution**: Downstream users can freely adapt your prompt templates or integrate them into closed commercial LLM applications, provided they maintain your original copyright attribution in the template files. +::: +:::: From 53bca29d1f0e3a9c19f74bb245c4d2d324c34483 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Fri, 4 Sep 2026 23:49:33 +0200 Subject: [PATCH 19/32] Restructure global context --- content/software-licensing-eu.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index a2a633b..7fabb7b 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -49,6 +49,37 @@ Because copyright protection hinges on functional execution combined with creati * **AI Prompt Templates**: Complex, engineered system prompts and structured frameworks meeting the threshold of human creative authorship. +## Global Context: Software Engineering Across Legal Borders + +Software development is an inherently cosmopolitan business. Research software engineers routinely collaborate across continents, fetch dependencies from global registries, and commit code to international repositories. + +However, modern developers face a subtle trap: **AI legal bias**. Coding assistants (ChatGPT, Claude, GitHub Copilot) are overwhelmingly trained on US-centric web data and legal texts. Consequently, when asked about software ownership or licensing, AI outputs almost universally default to **US common law concepts** (*"Fair Use"*, *"Work Made for Hire"*, *"Derivative Works"*). Relying blindly on AI advice can create legal blind spots when operating in the EU or collaborating globally. + +* **Code Adaptation / Refactoring** + * **US Concept:** **Derivative Work** (broadly interpreted judicial doctrine). + * **EU Concept:** **Adaptation**, translation, arrangement, or alteration (Directive 2009/24/EC Art. 4(1)(b)). + * **Practical Impact:** EU law avoids the vague term "derivative work." Any code modification is classified as a specific statutory act of adaptation or translation. + +* **User Rights & Interoperability** (Run, debug, reverse engineer) + * **US Concept:** **Fair Use** (flexible balancing test evaluated case-by-case in court). + * **EU Concept:** **Statutory Exceptions** (strictly codified rights, such as error correction under Art. 5(1) or decompilation under Art. 6). + * **Practical Impact:** EU user rights are fixed by statute and **cannot be overridden by contract**, removing reliance on judicial interpretation. + +* **Code Ownership** (Employee authorship) + * **US Concept:** **Work Made for Hire** (the employer is legally recognized as the primary author). + * **EU Concept:** **Employer Economic Rights** (Directive 2009/24/EC Art. 2(3)). + * **Practical Impact:** The individual developer remains the legal author, but all economic exploitation rights automatically transfer to the employer for code created during employment duties. + +* **Waiving Rights & Public Domain** (Giving up control) + * **US Concept:** **Public Domain Dedication** (authors can fully surrender both economic and moral rights). + * **EU & Asian Civil Law Concept:** **Economic Rights Transfer / Non-Waivable Moral Rights**. + * **Practical Impact:** Civil law traditions (EU, China, Japan, South Korea) do not allow complete waivers of moral rights (e.g., the author's right to attribution). Always use permissive open-source licenses (MIT, 0BSD) rather than informal public domain claims. + +* **Collaborating with Asian Ecosystems & Chinese AI Tools** + * **Civil Law Alignment:** Legal frameworks in China, Japan, and South Korea mirror EU civil law rather than US common law, strictly protecting moral rights and requiring formal contract grants. + * **OSI-Approved Chinese Licenses:** Chinese open-source projects frequently use **MulanPSL-2.0** (Mulan Permissive Software License), an OSI-approved bilingual license designed to align with Chinese contract law while maintaining global compatibility with MIT/Apache-2.0. + * **Using Chinese AI Models (e.g., DeepSeek, Qwen):** While code generated using Chinese LLMs follows standard copyright rules (human creative oversight determines ownership), always review the **Model Weights License** (e.g., OpenRAIL or specific commercial restrictions) attached to the model itself, as some open-weight licenses restrict specific commercial downstream uses. + ## Claisfication of licenses related to software ```{mermaid} From ae17b9ab9be0889bd07f5bbfbc1d336790d908b7 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Fri, 4 Sep 2026 23:53:00 +0200 Subject: [PATCH 20/32] References --- content/software-licensing-eu.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 7fabb7b..8ba5421 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -20,7 +20,9 @@ This lesson is designed as practical educational material for researchers and re If you need formal guidance reference below could be used: -* [Directive 2009/24/EC of the European Parliament and of the Council](https://eur-lex.europa.eu/eli/dir/2009/24) +* EU Directive 2009/24/EC: [EUR-Lex - Directive 2009/24/EC](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32009L0024) +* US Title 17 ยง 117: [LII / Cornell - 17 U.S. Code ยง 117](https://www.law.cornell.edu/uscode/text/17/117) +* China Software Protection Regulations: [WIPO Lex - Regulations on Computer Software Protection](https://www.wipo.int/wipolex/en/legislation/details/13109) * [Joinup Licensing Assistant,JLA](https://joinup.ec.europa.eu/collection/eupl/solution/joinup-licensing-assistant/jla-find-and-compare-software-licenses) * [FSFE REUSE Initiative](https://reuse.software/) * [Research Software Alliance Policy Directory](https://www.researchsoft.org/software-policies/) @@ -30,14 +32,14 @@ If you need formal guidance reference below could be used: In the European Union, software protection is governed by copyright law, which makes a sharp distinction between what is protected and what is not: - * **Protected**: The specific source code text, expression, binaries, and preparatory design work. - * **Not protected**: Underlying mathematical algorithms, ideas, programming logic, and interface principles. + * Protected: The specific source code text, expression, binaries, and preparatory design work. + * Not protected: Underlying mathematical algorithms, ideas, programming logic, and interface principles. Because copyright only protects the expression and not the underlying ideas, developers use licenses to define how that expression can be legally reused. ### Scope of this Lesson: What Counts as "Software"? -Under EU statutory law (Directive 2009/24/EC) and international legal frameworks, software is legally defined as **a set of instructions to be used directly or indirectly in a computer to bring about a certain result**, protected under copyright as a literary work. +Under EU statutory law (Directive 2009/24/EC) and international legal frameworks, software is legally defined as a set of instructions to be used directly or indirectly in a computer to bring about a certain result, protected under copyright as a literary work. Because copyright protection hinges on functional execution combined with creative human expression, this lesson covers the full spectrum of modern research software assets: From 0f3c0bff8380a1f8c83759390bc73dd1316c1899 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Fri, 4 Sep 2026 23:55:51 +0200 Subject: [PATCH 21/32] Scenario 8 --- content/software-licensing-eu.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 8ba5421..1009d32 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -356,6 +356,32 @@ You write or generate a container build recipe (`Dockerfile` or Apptainer `.def` * **Mixing & Redistribution**: Anyone can freely share or modify your `Dockerfile` or `.def` file under your chosen permissive license, regardless of whether the tools installed by the recipe are Permissive, Copyleft, or Proprietary. ::: :::: + +::::{exercise} Scenario 8: Distributing a Built Container Image (Docker Hub or Apptainer .sif) +You build a complete container runtime image (as an Apptainer `.sif` file or an image pushed to Docker Hub/GitHub Container Registry). The compiled image contains a base Linux OS, installed system libraries, runtime dependencies, and your application code. + +* **Licensing Goal**: Fulfill legal obligations imposed by distributing a bundled, compiled binary filesystem image containing third-party works. + +[Licensing Assistant](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) selection guide: + +| ๐ŸŸข **Can** | โšช **Must** | ๐Ÿ”ต **Compatible** | ๐ŸŸก **Support** | +| :--- | :--- | :--- | :--- | +| โ˜‘ Commercial use | โ˜‘ Copyleft/Share a. | โ˜‘ For software | โ˜‘ OSI approved | +| โ˜‘ Modify/merge | โ˜‘ Disclose source | | | +| โ˜‘ Distribute | | | | + +:::{solution} +**Legal Reality**: Unlike a text recipe file, a compiled container image (`.sif` or registry image) is a **bundle of third-party software works**. You do not hold exclusive copyright over the entire image filesystem. + +* **Outcome**: **Mandatory Compliance (Restricted Choice).** You cannot assign a single permissive license to the distributed image. Distribution is governed by the overlapping terms of all installed base layers, packages, and linked binaries inside. +* **Selected Category**: **Copyleft / Reciprocal** (if any layer or installed package contains Copyleft software, such as GPL libraries). +* **JLA Expected Matches**: `EUPL-1.2`, `GPL-3.0` +* **Why**: If your built image bundles a Strong Copyleft component (e.g., a GPL shared library installed via `apt-get` that your application links to), distributing that bundled binary image triggers reciprocal source disclosure requirements for the entire image payload (`Copyleft/Share a.` and `Disclose source`). +* **User Obligation**: Anyone distributing the built image file must ensure compliance with all third-party licenses inside the container, including making source code available for any copyleft components contained in the image layers. +* **Mixing & Redistribution**: Downstream users who pull your image must abide by the strictest component license in the container. To keep your distributed application unencumbered, ensure all packages installed into your image layers use permissive licenses. +::: +:::: + ::::{exercise} Scenario 9: Including AI prompt templates in LLM applications You develop a research software pipeline that uses Large Language Models (LLMs) for automated data extraction. Your repository contains Python scripts alongside a `prompts/` directory containing both short functional prompts (e.g., *"Extract keywords from this paper"*) and complex, 500-word structured prompt templates (e.g., system prompts, JSON schemas, and chain-of-thought frameworks). From 8599445fddb8e6a9a433ec47fd85a948d77f214a Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Fri, 4 Sep 2026 23:58:35 +0200 Subject: [PATCH 22/32] Fix typos --- content/software-licensing-eu.md | 48 ++++++++------------------------ 1 file changed, 11 insertions(+), 37 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 1009d32..3b6c4bf 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -4,7 +4,7 @@ - Principles of open source licensing - Determine the software license for your project following EU regulation - Difference between permissive and copyleft licenses. -- Regualtions for AI generated and AI assited code +- Regulations for AI-generated - Navigate the Joinup Licensing Assistant to select a compliant license. - Understand the licensing distinction between container recipes and container images @@ -82,7 +82,7 @@ However, modern developers face a subtle trap: **AI legal bias**. Coding assista * **OSI-Approved Chinese Licenses:** Chinese open-source projects frequently use **MulanPSL-2.0** (Mulan Permissive Software License), an OSI-approved bilingual license designed to align with Chinese contract law while maintaining global compatibility with MIT/Apache-2.0. * **Using Chinese AI Models (e.g., DeepSeek, Qwen):** While code generated using Chinese LLMs follows standard copyright rules (human creative oversight determines ownership), always review the **Model Weights License** (e.g., OpenRAIL or specific commercial restrictions) attached to the model itself, as some open-weight licenses restrict specific commercial downstream uses. -## Claisfication of licenses related to software +## Classification of licenses ```{mermaid} flowchart TB @@ -131,44 +131,18 @@ Once you select a license, apply it to individual source files and build recipes Instead of pasting long legal texts at the top of every file, add a single-line comment at the very first line of your script or recipe: - In a container recipe - ```dockerfile - # SPDX-License-Identifier: MIT - FROM ubuntu:24.04 - ``` + +```dockerfile +# SPDX-License-Identifier: MIT +FROM ubuntu:24.04 +``` - In a python script - ```python - # SPDX-License-Identifier: 0BSD - import numpy as np - ``` +```python +# SPDX-License-Identifier: 0BSD +import numpy as np +``` --- -## Difference in terminology in the US regulative text and EU regulation 2009/24/EC - -### 1. Modified Code & Works -* **US Concept**: **Derivative Work** (broadly defined in the US Copyright Act). -* **EU Concept**: **Adaptation**, translation, arrangement, or alteration (Directive 2009/24/EC Art. 4(1)(b)). -* **Practical Impact**: EU law avoids the term "derivative work." Any code modifications are classified as specific statutory acts of adaptation or translation. - -### 2. User Rights & Exceptions -* **US Concept**: **Fair Use** (flexible judicial doctrine evaluated case-by-case in court). -* **EU Concept**: **Statutory Exceptions** (strictly codified rights, such as error correction under Art. 5(1) or decompilation for interoperability under Art. 6). -* **Practical Impact**: EU user rights are fixed by statute and cannot be overridden by contract, avoiding reliance on judicial interpretation. - -### 3. Waiver of Rights -* **US Concept**: **Public Domain Dedication** (authors can fully surrender economic and moral rights). -* **EU Concept**: **Economic Rights Transfer / Non-Waivable Moral Rights**. -* **Practical Impact**: European legal traditions do not allow full waiver of moral rights (e.g., right to attribution), requiring permissive open licenses rather than pure public domain dedications. - -### 4. Work Ownership in Employment -* **US Concept**: **Work Made for Hire** (the employer is legally recognized as the primary author). -* **EU Concept**: **Employer Economic Rights** (Directive 2009/24/EC Art. 2(3)). -* **Practical Impact**: The individual developer remains the author, but all economic rights automatically transfer to the employer for code created during employment duties. - -### 5. Non-Protectable Elements -* **US Concept**: **Idea-Expression Dichotomy** (established primarily through court case law). -* **EU Concept**: **Expression vs. Ideas, Principles, & Interfaces** (explicitly codified under Directive 2009/24/EC Art. 1(2)). -* **Practical Impact**: EU statutory law explicitly excludes algorithms, programming languages, logic, and interface principles from copyright protection. - ## How to select a license From d45adbb945f18294ed1b1c78409164cafac10bb3 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Sat, 5 Sep 2026 00:18:00 +0200 Subject: [PATCH 23/32] Fix typos --- content/software-licensing-eu.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 3b6c4bf..9d8c673 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -3,11 +3,10 @@ ```{objectives} - Principles of open source licensing - Determine the software license for your project following EU regulation -- Difference between permissive and copyleft licenses. -- Regulations for AI-generated -- Navigate the Joinup Licensing Assistant to select a compliant license. +- Difference between permissive and copyleft licenses +- Regulations for AI-generated and AI-assisted code +- Navigate the Joinup Licensing Assistant to select a compliant license - Understand the licensing distinction between container recipes and container images - ``` ```{discussion} Limitations and context of this lesson @@ -169,7 +168,7 @@ You wrote an original algorithm from scratch (in Python, C++, Rust, etc.). Your **Legal Reality**: External dependencies remain separate works. Because you have not bundled third-party code inside your repository, you hold full copyright over your original codebase. * **Outcome**: **Fully Permissible.** You own the code and can choose any open-source license. -* **Selected Category**: **Permissive** (driven by you goal of maximum adoption). +* **Selected Category**: **Permissive** (driven by your goal of maximum adoption). * **JLA Expected Matches**: `MIT`, `Apache-2.0`, `BSD-3-Clause` * **Why**: The filters select licenses granting maximum reuse while requiring only basic copyright attribution (`Incl. Copyright`). * **User Obligation**: Downstream users must comply with individual external package licenses when fetching, compiling, or running them. @@ -218,7 +217,7 @@ You find a useful helper module online licensed under a **Permissive license** ( :::{solution} **Legal Reality**: Permissive licenses (MIT, BSD) grant broad rights to combine, modify, and re-license derivative works under different terms, provided you preserve the original author's copyright notice and license text in the copied files. -* **Outcome**: **Full Flexibility.** Unlike inbound Copyleft (Scenario 3), embedding Permissive code does not force a specific license on your project. You can license your combined repository as Permissive *or* Copyleft. +* **Outcome**: **Full Flexibility.** Unlike inbound Copyleft (Scenario 4), embedding Permissive code does not force a specific license on your project. You can license your combined repository as Permissive *or* Copyleft. * **Selected Category**: **Copyleft** (or Permissive, depending on your intent). * **JLA Expected Matches**: `EUPL-1.2`, `GPL-3.0` (or `MIT`, `Apache-2.0` if Permissive goal). * **Why**: Permissive inbound code is compatible with almost all OSI-approved software licenses. @@ -293,7 +292,7 @@ You write software using AI coding assistants (e.g., GitHub Copilot, ChatGPT) to | โ˜‘ Distribute | | | | :::{solution} -**Legal Reality**: Under EU copyright law and international consensus, **pure AI-generated outputs lacking human authorship** and are generally **ineligible** for copyright protection. However, when you assemble, refine, and integrate AI code into an overarching software project through creative human effort, you hold copyright over the resulting human-authored work (provided the AI tool did not reproduce substantial copyrighted third-party snippets verbatim). +**Legal Reality**: Under EU copyright law and international consensus, **pure AI-generated outputs lacking human authorship are generally ineligible for copyright protection**. However, when you assemble, refine, and integrate AI code into an overarching software project through creative human effort, you hold copyright over the resulting human-authored work (provided the AI tool did not reproduce substantial copyrighted third-party snippets verbatim). * **How Much AI Assistance Is Allowed**: There is no fixed percentage threshold. If a legal dispute arises, courts evaluate **Human Authorship and Creative Control**. Using AI as a boilerplate code generator, advanced autocomplete, or research assistant where you actively guide, review, modify, and structure the code preserves your copyright ownership. Conversely, simply pressing a button to generate an entire project without human creative intervention yields uncopyrightable output. * **How to Check for Copyrighted Material**: Combine manual codebase searches (e.g., GitHub Code Search), built-in AI tool filters (such as *Block suggestions matching public code* in GitHub Copilot), and automated open-source license scanners (like FOSSology or Snyk). From fb2c87dbb09615c5e17333a46e5c04c12182c37b Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Sat, 5 Sep 2026 00:19:43 +0200 Subject: [PATCH 24/32] Encoperate Claude suggesitons --- content/software-licensing-eu.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 9d8c673..0524a88 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -63,8 +63,8 @@ However, modern developers face a subtle trap: **AI legal bias**. Coding assista * **User Rights & Interoperability** (Run, debug, reverse engineer) * **US Concept:** **Fair Use** (flexible balancing test evaluated case-by-case in court). - * **EU Concept:** **Statutory Exceptions** (strictly codified rights, such as error correction under Art. 5(1) or decompilation under Art. 6). - * **Practical Impact:** EU user rights are fixed by statute and **cannot be overridden by contract**, removing reliance on judicial interpretation. + * **EU Concept:** **Statutory Exceptions** (Directive 2009/24/EC Articles 5 & 6). + * **Practical Impact:** EU law splits user rights into **non-waivable statutory rights** (backup copies under Art. 5(2), studying/testing under Art. 5(3), and decompilation for interoperability under Art. 6, which cannot be overridden by contract under Art. 8) and **contract-overridable default rules** (error correction under Art. 5(1), which applies unless an employment or vendor contract specifies otherwise). * **Code Ownership** (Employee authorship) * **US Concept:** **Work Made for Hire** (the employer is legally recognized as the primary author). @@ -347,11 +347,11 @@ You build a complete container runtime image (as an Apptainer `.sif` file or an **Legal Reality**: Unlike a text recipe file, a compiled container image (`.sif` or registry image) is a **bundle of third-party software works**. You do not hold exclusive copyright over the entire image filesystem. * **Outcome**: **Mandatory Compliance (Restricted Choice).** You cannot assign a single permissive license to the distributed image. Distribution is governed by the overlapping terms of all installed base layers, packages, and linked binaries inside. -* **Selected Category**: **Copyleft / Reciprocal** (if any layer or installed package contains Copyleft software, such as GPL libraries). +* **Selected Category**: **Copyleft / Reciprocal** (if your application links against or incorporates Copyleft components inside the container). * **JLA Expected Matches**: `EUPL-1.2`, `GPL-3.0` -* **Why**: If your built image bundles a Strong Copyleft component (e.g., a GPL shared library installed via `apt-get` that your application links to), distributing that bundled binary image triggers reciprocal source disclosure requirements for the entire image payload (`Copyleft/Share a.` and `Disclose source`). -* **User Obligation**: Anyone distributing the built image file must ensure compliance with all third-party licenses inside the container, including making source code available for any copyleft components contained in the image layers. -* **Mixing & Redistribution**: Downstream users who pull your image must abide by the strictest component license in the container. To keep your distributed application unencumbered, ensure all packages installed into your image layers use permissive licenses. +* **Why (Linking vs. Aggregation)**: If your application links against or embeds a Strong Copyleft library (`GPL-3.0`) installed in the container, distributing that image triggers copyleft disclosure obligations for your compiled application. However, if GPL components in the image are merely independent system utilities or standalone tools, GPL's "mere aggregation" provisions applyโ€”the GPL license governs those specific tools, but does not extend to your independent application binaries. +* **User Obligation**: Anyone distributing the built image file must ensure compliance with all third-party licenses inside the container, including providing source access for any GPL components or linked works contained in the layers. +* **Mixing & Redistribution**: Downstream users who pull your image must abide by individual component licenses. To keep your application source code unencumbered, ensure your app links only against permissively licensed libraries inside the container layers. ::: :::: From 90c41d3a4181da44856272d88c4015e9a8e634af Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Sat, 5 Sep 2026 00:23:57 +0200 Subject: [PATCH 25/32] Fix JLA link --- content/software-licensing-eu.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 0524a88..ad3aff2 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -22,7 +22,7 @@ If you need formal guidance reference below could be used: * EU Directive 2009/24/EC: [EUR-Lex - Directive 2009/24/EC](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32009L0024) * US Title 17 ยง 117: [LII / Cornell - 17 U.S. Code ยง 117](https://www.law.cornell.edu/uscode/text/17/117) * China Software Protection Regulations: [WIPO Lex - Regulations on Computer Software Protection](https://www.wipo.int/wipolex/en/legislation/details/13109) -* [Joinup Licensing Assistant,JLA](https://joinup.ec.europa.eu/collection/eupl/solution/joinup-licensing-assistant/jla-find-and-compare-software-licenses) +* [Joinup Licensing Assistant,JLA](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) * [FSFE REUSE Initiative](https://reuse.software/) * [Research Software Alliance Policy Directory](https://www.researchsoft.org/software-policies/) ``` From de4fb87e735843920243805789b26a69f6d6059f Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Sat, 5 Sep 2026 23:53:48 +0200 Subject: [PATCH 26/32] include LLM improvment suggestions --- content/software-licensing-eu.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index ad3aff2..ac87c6f 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -1,5 +1,7 @@ # Software licensing focusing on open source +# Software licensing focusing on open source + ```{objectives} - Principles of open source licensing - Determine the software license for your project following EU regulation From 4a0c59f1f06b39f0eeaea6b86c8cbf2a355e2ca6 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Sun, 6 Sep 2026 22:13:38 +0200 Subject: [PATCH 27/32] polish scope and objectives --- content/software-licensing-eu.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index ac87c6f..9673d0c 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -4,9 +4,9 @@ ```{objectives} - Principles of open source licensing -- Determine the software license for your project following EU regulation - Difference between permissive and copyleft licenses - Regulations for AI-generated and AI-assisted code +- Determine the software license for your project following EU regulation - Navigate the Joinup Licensing Assistant to select a compliant license - Understand the licensing distinction between container recipes and container images ``` @@ -15,11 +15,11 @@ This lesson is designed as practical educational material for researchers and research software engineers, not formal legal advice. -* Regional Focus: Guidance is grounded in European Union directives and Nordic institutional frameworks. +* Regional Focus: Guidance is grounded in EU statutory directives, European institutional frameworks and developers based in Europe with a global focus. * Institutional Context: Employment contracts, grant agreements, and university policies heavily influence software ownership and licensing choices. -* Scope: This lesson covers general principles of open-source reuse, copyright scope, and software adaptation. +* Scope: This lesson covers only the general principles of open-source reuse, copyright scope, and software adaptation. -If you need formal guidance reference below could be used: +If you need formal guidance reference below and legal experts at your host institute could be used: * EU Directive 2009/24/EC: [EUR-Lex - Directive 2009/24/EC](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32009L0024) * US Title 17 ยง 117: [LII / Cornell - 17 U.S. Code ยง 117](https://www.law.cornell.edu/uscode/text/17/117) From b3caf2191af419142af0879907554e565d0930c4 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Sun, 6 Sep 2026 22:27:17 +0200 Subject: [PATCH 28/32] Update timing, keep the old lessons for comparisen --- content/index.rst | 5 +++-- content/software-licensing-eu.md | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/content/index.rst b/content/index.rst index 49c059b..0dad5cf 100644 --- a/content/index.rst +++ b/content/index.rst @@ -40,7 +40,7 @@ navigating and deciding on licenses. :delim: ; 20 min ; :doc:`social-coding` - 30 min ; :doc:`software-licensing` + 90 min ; :doc:`software-licensing-eu` 20 min ; :doc:`software-citation` 10 min ; :doc:`sharing-data` @@ -77,7 +77,8 @@ Who is the course for? .. toctree:: :maxdepth: 1 :caption: About - + + software-licensing All lessons CodeRefinery reusing diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 9673d0c..265bbf1 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -17,13 +17,13 @@ This lesson is designed as practical educational material for researchers and re * Regional Focus: Guidance is grounded in EU statutory directives, European institutional frameworks and developers based in Europe with a global focus. * Institutional Context: Employment contracts, grant agreements, and university policies heavily influence software ownership and licensing choices. -* Scope: This lesson covers only the general principles of open-source reuse, copyright scope, and software adaptation. +* This lesson covers only the general principles of open-source reuse, copyright scope, and software adaptation. If you need formal guidance reference below and legal experts at your host institute could be used: -* EU Directive 2009/24/EC: [EUR-Lex - Directive 2009/24/EC](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32009L0024) -* US Title 17 ยง 117: [LII / Cornell - 17 U.S. Code ยง 117](https://www.law.cornell.edu/uscode/text/17/117) -* China Software Protection Regulations: [WIPO Lex - Regulations on Computer Software Protection](https://www.wipo.int/wipolex/en/legislation/details/13109) +* [EUR Directive 2009/24/EC](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32009L0024) +* [US Title 17 ยง 117-Limitations on exclusive rights: Computer programs](https://www.law.cornell.edu/uscode/text/17/117) +* [China Software Protection Regulations,State Council Decree](https://www.wipo.int/wipolex/en/legislation/details/13109) * [Joinup Licensing Assistant,JLA](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) * [FSFE REUSE Initiative](https://reuse.software/) * [Research Software Alliance Policy Directory](https://www.researchsoft.org/software-policies/) From de87a56c04d3e5cdee9bb1ac98358d7db1c16b14 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Mon, 7 Sep 2026 17:19:09 +0200 Subject: [PATCH 29/32] Updates, may be relevent to issue #56 --- content/software-licensing-eu.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 265bbf1..52d3fb3 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -1,7 +1,5 @@ # Software licensing focusing on open source -# Software licensing focusing on open source - ```{objectives} - Principles of open source licensing - Difference between permissive and copyleft licenses @@ -19,7 +17,7 @@ This lesson is designed as practical educational material for researchers and re * Institutional Context: Employment contracts, grant agreements, and university policies heavily influence software ownership and licensing choices. * This lesson covers only the general principles of open-source reuse, copyright scope, and software adaptation. -If you need formal guidance reference below and legal experts at your host institute could be used: +If you need formal guidance reference below and legal experts at your host institute could be of help: * [EUR Directive 2009/24/EC](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32009L0024) * [US Title 17 ยง 117-Limitations on exclusive rights: Computer programs](https://www.law.cornell.edu/uscode/text/17/117) From acc8a1208bef59cfa74aa198ed2d26545b6ff899 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Mon, 7 Sep 2026 21:43:52 +0200 Subject: [PATCH 30/32] Fixed urls , related to #165 --- content/software-licensing-eu.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index 52d3fb3..eda7804 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -20,8 +20,8 @@ This lesson is designed as practical educational material for researchers and re If you need formal guidance reference below and legal experts at your host institute could be of help: * [EUR Directive 2009/24/EC](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32009L0024) -* [US Title 17 ยง 117-Limitations on exclusive rights: Computer programs](https://www.law.cornell.edu/uscode/text/17/117) -* [China Software Protection Regulations,State Council Decree](https://www.wipo.int/wipolex/en/legislation/details/13109) +* [Compendium of U.S. Copyright Office Practices (3rd Ed.) โ€“ Chapter 700, Section 721: Computer Programs](https://www.copyright.gov/comp3/) +* [Chinese Regulations on Computer Software Protection,(search:"่ฎก็ฎ—ๆœบ่ฝฏไปถไฟๆŠคๆกไพ‹")](https://xzfg.moj.gov.cn/) * [Joinup Licensing Assistant,JLA](https://interoperable-europe.ec.europa.eu/collection/eupl/solution/licensing-assistant/find-and-compare-software-licenses) * [FSFE REUSE Initiative](https://reuse.software/) * [Research Software Alliance Policy Directory](https://www.researchsoft.org/software-policies/) From b18645dcf8ea857aa0ecb41c63aab583e9e0e0d4 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Mon, 7 Sep 2026 22:24:39 +0200 Subject: [PATCH 31/32] Fix software definition according to EU regualtions --- content/software-licensing-eu.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/software-licensing-eu.md b/content/software-licensing-eu.md index eda7804..530080f 100644 --- a/content/software-licensing-eu.md +++ b/content/software-licensing-eu.md @@ -38,7 +38,7 @@ Because copyright only protects the expression and not the underlying ideas, dev ### Scope of this Lesson: What Counts as "Software"? -Under EU statutory law (Directive 2009/24/EC) and international legal frameworks, software is legally defined as a set of instructions to be used directly or indirectly in a computer to bring about a certain result, protected under copyright as a literary work. +Across international legal frameworks (such as 17 U.S.C. ยง 101 and WIPO model provisions), software is commonly defined as a set of instructions to be used directly or indirectly in a computer to bring about a certain result. Under EU statutory law (Directive 2009/24/EC), computer programsโ€”including their preparatory design materialโ€”are protected under copyright as literary works. Because copyright protection hinges on functional execution combined with creative human expression, this lesson covers the full spectrum of modern research software assets: From ecd8e6dcbf0b79e6786ad62a613c816c6f12f442 Mon Sep 17 00:00:00 2001 From: Sabry Razick Date: Mon, 7 Sep 2026 22:32:47 +0200 Subject: [PATCH 32/32] For rendering mermaid --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 2a7e803..d98c203 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,7 @@ Sphinx sphinx_rtd_theme sphinx_rtd_theme_ext_color_contrast +sphinxcontrib.mermaid myst_nb git+https://github.com/rkdarst/sphinx-copybutton.git@exclude-unselectable-3 sphinx-lesson