LekKit / RVVM

The RISC-V Virtual Machine
GNU General Public License v3.0
938 stars 65 forks source link

Relicense librvvm source under MPL 2.0 #162

Open Kamillaova opened 3 weeks ago

Kamillaova commented 3 weeks ago

librvvm should be MPL 2.0 compatible.

Originally, RVVM was simply a standalone emulator which wasn't reusable, but nowadays it's a proper library reusable in other projects. Keeping the GPL license for a library reduces it's usefulness a lot - not many other projects may afford switching to GPL too.

The MPL license is a good middle-ground where RVVM code itself is still not entirely permissive (No closed forks of RVVM itself may exist), however it allows proper dynamic/static linking into other projects without affecting their license as a whole. This license is also widely adopted in the Rust world (Since Rust libraries may only be linked statically).

This decision was done way back in 2022, but the source license headers were not properly updated which led to confusion, and was not done fully in a proper way. We need to actually fix librvvm source license headers to reflect the MPL 2.0 license used for the library to prevent further issues.

This legally requires either the code owners to submit the license header change PR, or at the very least acknowledge the changes being done with their code (Which most people did, but not in a formal and verifiable way).

Standalone RVVM binaries (rvvm-cli and rvvm-user) are still licensed under GPL since they are expected to be directly used by the end user and not reusable by other projects. Realistically, both are simply frontends to librvvm (rvvm-user has it's own Linux syscall translation layer, but that thing stays under GPL too.)

To agree to the relicensing, please reply to this issue with the following verbatim text:

I agree to license all of my past contributions to https://github.com/LekKit/RVVM under the MPL 2.0 license used by librvvm.

List of required approvals:

Nebulka and iyzsong(宋文武) will be contacted by email.

Thanks to https://github.com/NixOS/nixpkgs/issues/334374! (as an example)

LekKit commented 3 weeks ago

We need to actually fix librvvm source license headers to reflect the MPL 2.0 license used for the library to prevent further issues.

This legally requires either the code owners to submit the license header change PR, or at the very least acknowledge the changes being done with their code (Which most people did, but not in a formal and verifiable way).

Proper license header template:

/*
blah-blah.h - Short explanation what this source does
Copyright (C) 2021  MaintainerName <email/github/other means to reach>
                    MaintainerName <email/github/other means to reach>
                    ContributorName <email/github/other means to reach>

This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/

The only sources that are NOT part of librvvm and are supposed to be GPL 3.0: src/main.c - RVVM Standalone CLI VM src/rvvm_user.c - RVVM Linux binary emulator

Sources that are maintained/have code written by @cerg2010cerg2010: src/devices/ata.c; src/devices/ata.h src/devices/eth-oc.c; src/devices/eth-oc.h src/devices/ps2-altera.c; src/devices/ps2-altera.h src/devices/ps2-keyboard.c src/devices/ps2-mouse.c src/devices/tap_linux.c src/rvjit/rvjit_arm.h src/rvjit/rvjit_arm64.h src/fdtlib.c; src/fdtlib.h src/ringbuf.c; src/ringbuf.h src/elf_load.c; src/elf_load.h src/riscv_csr.c; src/riscv_csr.h

Sources that are maintained/have code written by @X547: src/devices/haiku_window.cpp src/devices/i2c-hid.c; src/devices/i2c-hid.h src/devices/hid_mouse.c src/devices/hid_keyboard.c

Sources that are maintained/have code written by @0xCatPKG: src/blk_io.c; src/blk_io.h src/dlib.c; src/dlib.h src/devices/tap_user.c src/utils.c; src/utils.h

Sources that are maintained/have code written by @Mr0maks: src/devices/ns16550a.c; src/devices/ns16550a.h src/rvjit/rvjit_arm.h

Should we also ping people with few-line fix patches? How should the acknowledgement process go?

LekKit commented 3 weeks ago

Parts of chardev subsystem have code originally owned by 宋文武 iyzsong@envs.net

LekKit commented 3 weeks ago

Sources owned only by me - many, TBD

Kamillaova commented 3 weeks ago

Sources owned only by me - many, TBD

Not only "original author" matters, we also need to take into account small contributions that may be copyrightable

Kamillaova commented 3 weeks ago

Should we also ping people with few-line fix patches? How should the acknowledgement process go?

I think we can use this as an example

https://github.com/NixOS/nixpkgs/issues/334374

Kamillaova commented 3 weeks ago

Files that are already licensed under MPL 2.0 (or dual GPL 2.0 or MPL 2.0) https://yaso.su/u3SuGRkS (raw)

Kamillaova commented 3 weeks ago

@emilazy said

works that have an insufficient degree of creative input are considered non-copyrightable

so I think we can ignore small changes that is very likely non-copyrightable

LekKit commented 3 weeks ago

Current blockers: src/atomics.h: MSVC fixes by @cerg2010cerg2010 src/bit_ops.h: Renames by @Mr0maks src/elf_load.c; src/elf_load.h: Old ELF loader was written by @cerg2010cerg2010, with some remnants possibly still there src/fdtlib.c; src/fdtlib.h: Original code by @cerg2010cerg2010 src/mem_ops.h: Old FPU load/store code by @cerg2010cerg2010 src/ringbuf.c; src/ringbuf.h: Original code by @cerg2010cerg2010 src/riscv_csr.c; src/riscv_csr.h: Some pieces by @cerg2010cerg2010 src/riscv_mmu.c; src/riscv_mmu.h: Fixes by @cerg2010cerg2010, KSM support by @0xCatPKG src/threading.c; src/threading.h: Fixes by @cerg2010cerg2010 src/rvjit_arm64.h: Original code by @cerg2010cerg2010 src/rvjit_arm.h: Original code by @cerg2010cerg2010 and @Mr0maks src/devices/ata.c; src/devices/ata.h: Original code by @cerg2010cerg2010 src/devices/chardev.h; src/devices/chardev_term.c; src/devices/chardev_term.h: Original code by iyzsong@envs.net src/devices/eth-oc.c; src/devices/eth-oc.h: Original code by @cerg2010cerg2010 src/devices/haiku_windows.cpp: Original code by @X547 src/devices/hid-keyboard.c: Original code by @X547 src/devices/hid-mouse.c: Original code by @X547; Nebulka1 src/devices/hid_dev.h; src/devices/i2c-hid.c; src/devices/i2c-hid.h: Original code by @X547 src/devices/ns16550a.c: Some parts originally by @Mr0maks, chardev API transition by iyzsong@envs.net src/devices/pci-bus.c; src/devices/pci-bus.h: Original code by @cerg2010cerg2010 src/devices/plic.c; src/devices/plic.h: Original code by @cerg2010cerg2010 src/devices/ps2-altera.c; src/devices/ps2-altera.h: Original code by @cerg2010cerg2010 src/devices/ps2-keyboard.c; src/devices/ps2-mouse.c: Original code by @cerg2010cerg2010 src/devices/tap_linux.c; src/devices/tap_api.h: Original code by @cerg2010cerg2010 src/devices/win32window.c: Fixes by @cerg2010cerg2010 & @0xCatPKG src/devices/x11window_xlib.c: Features by @cerg2010cerg2010 & Nebulka1

Kamillaova commented 3 weeks ago

@LekKit and @0xCatPKG have already changed the license in files where no one else has made significant changes

New list of files that are licensed under MPL 2.0 (dual licensing has been removed): https://yaso.su/bS6DIi1Q

Kamillaova commented 3 weeks ago

list of all contributions by file: https://yaso.su/T6Gh46Qx

nerodono commented 3 weeks ago

I agree to license all of my past contributions to https://github.com/LekKit/RVVM under the MPL 2.0 license used by librvvm.

OscarL commented 3 weeks ago

@Kamillaova, just in case: I really doubt my ultra-tiny change to the README.md file counts as copyrightable, so you can just remove me from the list.

Kamillaova commented 3 weeks ago

@Kamillaova, just in case: I really doubt my ultra-tiny change to the README.md file counts as copyrightable, so you can just remove me from the list.

Sorry for the ping, I was too lazy to filter out small changes after 3 hours of trying to workaround a git (very likely to be) bug (git not showing history for some files via git log -- $file)

Kamillaova commented 3 weeks ago

Also dropped @mishrasamiksha, @singodiyashubham87, @ChinYikMing as they just changed one word.

Sorry for the pings.

cerg2010cerg2010 commented 3 weeks ago

I agree to license all of my past contributions to https://github.com/LekKit/RVVM under the MPL 2.0 license used by librvvm.

n30f0x commented 3 weeks ago

I agree to license all of my past contributions to https://github.com/LekKit/RVVM under the MPL 2.0 license used by librvvm.

Kamillaova commented 3 weeks ago

Dropped @mjunix since his change was removed from the codebase a long time ago, and I also think that the change wasn't even copyrightable.

Sorry for the pings.

X547 commented 3 weeks ago

src/devices/haiku_windows.cpp: Original code by @X547 src/devices/hid-keyboard.c: Original code by @X547 src/devices/hid-mouse.c: Original code by @X547; Nebulka1 src/devices/hid_dev.h; src/devices/i2c-hid.c; src/devices/i2c-hid.h: Original code by @X547

I agree to re-license my contributions to MPL 2.0.

Kamillaova commented 3 weeks ago

@X547 can you include the repository address in your message? thanks.

X547 commented 3 weeks ago

What do you mean by "repository address"?

Kamillaova commented 3 weeks ago

What do you mean by "repository address"?

https://github.com/LekKit/RVVM

(as in this message

image

)

X547 commented 3 weeks ago

I agree to license all of my past contributions to https://github.com/LekKit/RVVM under the MPL 2.0 license used by librvvm.

Kamillaova commented 3 weeks ago

The only sources that are NOT part of librvvm and are supposed to be GPL 3.0: src/main.c - RVVM Standalone CLI VM src/rvvm_user.c - RVVM Linux binary emulator

also src/bindings/libretro/**/* is NOT part of librvvm

Mr0maks commented 3 weeks ago

Current blockers: src/atomics.h: MSVC fixes by @cerg2010cerg2010 src/bit_ops.h: Renames by @Mr0maks src/elf_load.c; src/elf_load.h: Old ELF loader was written by @cerg2010cerg2010, with some remnants possibly still there src/fdtlib.c; src/fdtlib.h: Original code by @cerg2010cerg2010 src/mem_ops.h: Old FPU load/store code by @cerg2010cerg2010 src/ringbuf.c; src/ringbuf.h: Original code by @cerg2010cerg2010 src/riscv_csr.c; src/riscv_csr.h: Some pieces by @cerg2010cerg2010 src/riscv_mmu.c; src/riscv_mmu.h: Fixes by @cerg2010cerg2010, KSM support by @0xCatPKG src/threading.c; src/threading.h: Fixes by @cerg2010cerg2010 src/rvjit_arm64.h: Original code by @cerg2010cerg2010 src/rvjit_arm.h: Original code by @cerg2010cerg2010 and @Mr0maks src/devices/ata.c; src/devices/ata.h: Original code by @cerg2010cerg2010 src/devices/chardev.h; src/devices/chardev_term.c; src/devices/chardev_term.h: Original code by iyzsong@envs.net src/devices/eth-oc.c; src/devices/eth-oc.h: Original code by @cerg2010cerg2010 src/devices/haiku_windows.cpp: Original code by @X547 src/devices/hid-keyboard.c: Original code by @X547 src/devices/hid-mouse.c: Original code by @X547; Nebulka1 src/devices/hid_dev.h; src/devices/i2c-hid.c; src/devices/i2c-hid.h: Original code by @X547 src/devices/ns16550a.c: Some parts originally by @Mr0maks, chardev API transition by iyzsong@envs.net src/devices/pci-bus.c; src/devices/pci-bus.h: Original code by @cerg2010cerg2010 src/devices/plic.c; src/devices/plic.h: Original code by @cerg2010cerg2010 src/devices/ps2-altera.c; src/devices/ps2-altera.h: Original code by @cerg2010cerg2010 src/devices/ps2-keyboard.c; src/devices/ps2-mouse.c: Original code by @cerg2010cerg2010 src/devices/tap_linux.c; src/devices/tap_api.h: Original code by @cerg2010cerg2010 src/devices/win32window.c: Fixes by @cerg2010cerg2010 & @0xCatPKG src/devices/x11window_xlib.c: Features by @cerg2010cerg2010 & Nebulka1

I agree to license all of my past contributions to https://github.com/LekKit/RVVM under the MPL 2.0 license used by librvvm. I also don’t want to be associated with this project anymore.

Kamillaova commented 2 weeks ago

Dropped @fish4terrisa-MSDSM as their changes only affected README.mdand src/main.c, and these files do not belong to librvvm.

Sorry for the pings.