Planning/Relicensing
Overview
In order to share code with binutils, QEMU might need to relicense to GPLv2 or later since binutils is GPLv3. While the sharing of code with the Linux kernel might present an insurmountable problem, relicensing at least some of the files may still provide benefits, and can help other open source programs.
How to Help
To relicense a file, use the following git command to get a list of authors:
git log --format:"%an <%ae>" -- file.c
Check this wiki page to see if the author has already committed to relicensing. If so, add their Signed-off-by to the patch. For any author that hasn't already committed to relicensing, contact that individual and ask them if they are willing to relicense and collect their Signed-off-by.
Commitments to Relicense
If you or your company is willing to relicense your past contributions from GPLv2 to GPLv2+, please send an email to qemu-devel stating that explicitly and then link to that message on this wiki.
The following people expressed their agreement on the mailing list [need to link to the messages]:
- Andrzej Zaborowski (balrog) for GPLv2+ [1]
- Blue Swirl for any GPLv2 or GPLv3-compatible license [2]
- Stefan Weil for GPLv2+ [3]
- Dor Laor for all Red Hat contributions for GPLv2+ [4]
- Michael Walle for GPLv2+ [5]
Files under LGPLv2/LGPLv2.1
These do not need relicensing even if the "or later" clause were missing (see section 3):
block/qed.c block/qed-check.c block/qed-cluster.c block/qed-gencb.c block/qed.h block/qed-l2-cache.c block/qed-table.c hw/arm_pic.c hw/ccid-card-emulated.c hw/fmopl.c hw/i2c.c hw/lsi53c895a.c hw/pc.c hw/pl110.c hw/ptimer.c hw/scsi-disk.c hw/scsi-generic.c hw/smbus.c hw/usb-msd.c hw/usb-serial.c hw/versatile_pci.c check-qdict.c check-qfloat.c check-qint.c check-qjson.c check-qlist.c check-qstring.c error.c json-lexer.c json-parser.c json-streamer.c qbool.c qdict.c qemu-coroutine.c qerror.c qfloat.c qint.c qjson.c qlist.c qstring.c test-coroutine.c
Files under GPLv2+
These would need relicensing in order to do a blanket relicensing of QEMU (it is debatable whether this requires authorization of the copyright holders). However, the license is GPLv3-compatible, so they can be left as is: overall, QEMU would still be distributed as GPLv3, but the code from this files could be reused in GPLv2 projects:
block/vdi.c hw/alpha_typhoon.c hw/ccid-card-passthru.c hw/empty_slot.c hw/ppc440_bamboo.c hw/ppc440.c hw/usb-ccid.c blockdev.c device_tree.c dma-helpers.c kvm-all.c kvm-stub.c linux-aio.c qemu-error.c qemu-ga.c qemu-io.c qemu-thread-posix.c qemu-thread-win32.c
The situation of this file is unclear:
net/tap-win32.c
Files under "GPL"
These files can be interpreted as being "GPLv1+" or "GPLv2+" (the difference is mostly theoretical, nobody is using GPLv1 anymore). Relicensing is thus not needed.
hw/a9mpcore.c hw/an5206.c hw/arm11mpcore.c hw/arm_boot.c hw/arm_gic.c hw/arm_sysctl.c hw/arm_timer.c hw/armv7m.c hw/armv7m_nvic.c hw/dummy_m68k.c hw/integratorcp.c hw/max7310.c hw/mcf5206.c hw/mcf5208.c hw/mcf_fec.c hw/mcf_intc.c hw/mcf_uart.c hw/mpcore.c hw/pl011.c hw/pl022.c hw/pl050.c hw/pl061.c hw/pl080.c hw/pl181.c hw/pl190.c hw/pxa2xx.c hw/pxa2xx_dma.c hw/pxa2xx_gpio.c hw/pxa2xx_pic.c hw/pxa2xx_timer.c hw/realview.c hw/realview_gic.c hw/sh_intc.c hw/sh_timer.c hw/smc91c111.c hw/ssd0303.c hw/ssd0323.c hw/stellaris.c hw/stellaris_enet.c hw/stellaris_input.c hw/versatilepb.c hw/wm8750.c
Files without license
Need to be audited for GPLv2-only material, but otherwise can probably be considered GPLv2+ (reasoning here):
audio/audio_pt_int.c malc, Stefan Weil audio/wavcapture.c malc, Fabrice Bellard, Red Hat, Siemens block/raw.c (extracted from block/raw-posix.c, which is MIT/BSD) IBM, Blue Swirl, Red Hat, hch, John Arbuckle, Stefan Weil, Aurelien Jarno, Hervé Poussineau, AMD, Fam Zheng, Frediano Ziglio cache-utils.c malc, Juergen Lock disas.c envlist.c Aurelien Jarno, Blue Swirl path.c Fabrice Bellard, CodeSourcery, ths, Stefan Weil, Thayne Harbaugh hw/mipsnet.c ths, Red Hat, CodeSourcery, Stefan Weil, Hervé Poussineau, Aurelien Jarno, Siemens hw/mips_r4k.c ths, .... hw/qdev-addr.c Red Hat hw/qdev-properties.c Red Hat, IBM, AMD, Google, VALinux (Isaku), Siemens, Kusanagi Kouichi, Stefan Weil hw/spapr_hcall.c IBM, Blue Swirl, SuSE hw/spapr_vty.c IBM, Red Hat hw/tc58128.c Samuel Tardieu, Blue Swirl, CodeSourcery, IBM hw/usb-bus.c Red Hat, Blue Swirl, Siemens, CodeSourcery, TeLeMan hw/usb-desc.c Red Hat, IBM, Brad Hards hw/xen_devconfig.c Red Hat, Blue Swirl, Siemens, IBM hw/xen_domainbuild.c Red Hat, Blue Swirl, IBM, Citrix linux-user/strace.c linux-user/uaccess.c cursor.c Red Hat, IBM qemu-config.c Red Hat, IBM, SuSE, Blue Swirl, Citrix, Siemens, Kusanagi Kouichi, LLuis Villanova qemu-sockets.c Red Hat, IBM, Blue Swirl, Nick Thomas, Vibi Sreenivasan */machine.c (extracted from vl.c, which is MIT/BSD)
Files Needing Relicensing
Copyright owners already tracked
block/raw-posix-aio.h (header?) Red Hat, hch hw/msix.c Red Hat, Blue Swirl, VALinux (Isaku), SuSE, Siemens, IBM hw/smbios.c Stefan Weil, IBM, Blue Swirl, HP net/checksum.c Red Hat aio.c IBM, Red Hat, SuSE, Nolan Leake, Blue Swirl block-migration.c IBM, Blue Swirl, Siemens, Red Hat, malc, NTT (Yoshi), Pierre Riteau, buffered_file.c IBM, Blue Swirl, Red Hat, Pierre Riteau, malc compatfd.c IBM, Red Hat, AdaCore, SuSE, Siemens hmp.c Red Hat, IBM iov.c Red Hat, SuSE (incl. hw/iov.c) memory.c IBM, Red Hat, Michael Walle, Blue Swirl, Siemens, migration.c IBM, Charles Duffy, Siemens, Red Hat, malc, NTT (Yoshi) migration-exec.c IBM, Charles Duffy, Siemens, Red Hat, malc, Blue Swirl migration-fd.c IBM, Red Hat, Siemens migration-unix.c IBM, Red Hat, Siemens, malc, Blue Swirl migration-tcp.c IBM, Hervé Poussineau, Charles Duffy, Siemens, Red Hat, malc, Stefan Weil, NTT (Yoshi), Blue Swirl module.c IBM, Blue Swirl notify.c IBM, Siemens pflib.c Red Hat, IBM posix-aio-compat.c IBM, Blue Swirl, Siemens, malc, Red Hat, hch, Blue Swirl, Kirill Shutemov, Frediano Ziglio qemu-tool.c IBM, CodeSourcery, Stefan Weil, Blue Swirl, Siemens, Red Hat, Frediano Ziglio qmp.c Red Hat, IBM xen-all.c Red Hat, IBM, Citrix, Siemens, Intel xen-stub.c Citrix, Intel
Entirely hosted in git
block/rbd.c block/sheepdog.c hw/ac97.c (VirtualBox) targets using it: x86, MIPS, PPC hw/acpi.c targets using it: x86, MIPS hw/acpi_piix4.c targets using it: x86, MIPS hw/apm.c targets using it: x86, MIPS hw/bitbang_i2c.c targets using it: ARM hw/bonito.c targets using it: MIPS hw/collie.c targets using it: ARM hw/ds1338.c targets using it: ARM hw/ivshmem.c targets using it: x86, PPC hw/kvmclock.c targets using it: x86 hw/lan9118.c targets using it: ARM hw/marvell_88w8618_audio.c targets using it: ARM hw/mips_fulong2e.c targets using it: MIPS hw/ssi.c targets using it: ARM hw/strongarm.c targets using it: ARM hw/vexpress.c targets using it: ARM hw/vhost.c targets using it: x86, PPC hw/vhost_net.c targets using it: x86, PPC hw/virtio-pci.c hw/virtio-serial-bus.c hw/vt82c686.c targets using it: MIPS hw/z2.c targets using it: ARM xen-mapcache.c targets using it: x86
Also, some authors in svn
Need more care, since git really lists the committer as author for svn commits.
hw/ads7846.c targets using it: ARM hw/ecc.c targets using it: ARM, SPARC hw/framebuffer.c targets using it: ARM, LM32 hw/gumstix.c targets using it: ARM hw/mainstone.c targets using it: ARM hw/max111x.c targets using it: ARM hw/mst_fpga.c targets using it: ARM hw/musicpal.c targets using it: ARM hw/nand.c targets using it: ARM, CRIS hw/pl031.c targets using it: ARM hw/pxa2xx_keypad.c targets using it: ARM hw/pxa2xx_lcd.c targets using it: ARM hw/pxa2xx_mmci.c targets using it: ARM hw/pxa2xx_pcmcia.c targets using it: ARM hw/spitz.c targets using it: ARM hw/ssi-sd.c targets using it: ARM hw/tc6393xb.c targets using it: ARM hw/tosa.c targets using it: ARM hw/virtio-balloon.c hw/virtio-blk.c hw/virtio.c hw/virtio-console.c hw/virtio-net.c hw/xen_backend.c targets using it: x86 hw/xen_disk.c targets using it: x86 hw/xen_nic.c targets using it: x86
Based on Linux kernel code
linux-user/elfload.c linux-user/floatload.c linux-user/linuxload.c