I count 58 more files with firmware that need to be removed if the Linux kernel is to legally stay in Debian main. This report is the basis of bug #383403 against linux-2.6. As each piece of firmware is removed from linux-2.6, it should (license permitting) pop up in firmware-nonfree.
Credits/thanks to:
I list a file as "apparently nondistributable" if a binary firmware blob is part of GPL'd driver code, and source for that blob is not available.
I list a file as "apparently ok for non-free" if a binary firmware blob is part of BSD-ish licensed driver code, and source for that blob is not available. Code also falls in this category if it has a license that grants nondiscrimintaing permission for redistribution, but not for modification ("redistr." in the table below). IMHLO, Debian gets into hazy legal territory if such a driver is built into a GPL'd (in aggregate) kernel. Distributing modules built from such code is probably OK for non-free.
In cases where the file itself has no copyright or license notice, I assume it follows the driver file that includes it or links to it. Note that this makes very generous assumptions that the people who put the firmware into the kernel had the rights to do so. There are many cases that look suspiciously like the firmware image was grabbed without permission, but I won't try to categorize and second-guess such cases here. Ownership and permission for these blobs should be researched and documented as they are submitted for firmware-nonfree. The firmware-nonfree maintainers look like they are on the right track so far.
This is not a new problem. Debian bug #242866 (April, 2004) was tagged "sarge-ignore" on the basis of a Debian GR. Unless another GR is passed, Debian must deal with this problem. Goswin summarized the situation nicely, although there is apparently room for disagreement. See also this LWN article (April, 2005) and its discussion.
Possible solutions to each of the 58 bugs, in order of desirability:
Totals:
Relative to sarge, 13 new sourceless-firmware-contaminated files have found their way into Debian's Linux source tree. They are:
Apologies in advance if there are mistakes in this list. It's very easy to believe I missed or misinterpreted a few files. Send me mail if you find any mistakes, and I will correct them. If a Debian linux-2.6.18 package comes out that still has illegal and/or Debian-SC-violating firmware in it, expect me to post an update. (Note: the first cut at 2.6.18 has come out, apparently with major regressions on this topic, causing major flamage on Debian mailing lists. I hope to procrastinate the analysis long enough that an improved linux-2.6.18 source package will be created first.)
file with firmware | use | license | source | apparent status | in Sarge | notes |
drivers/atm/atmsar11.data | ambassador.c | GPL | nondistributable | yes | ||
drivers/atm/pca200e.data | fore200e.c | GPL | nondistributable | yes | ||
drivers/atm/pca200e_ecd.data | fore200e.c | GPL | nondistributable | yes | ||
drivers/atm/sba200e_ecd.data | fore200e.c | GPL | nondistributable | yes | ||
drivers/char/drm/mga_ucode.h | mga_warp.c | BSD-ish | ok for non-free | yes | ||
drivers/char/drm/r128_cce.c | BSD-ish | ok for non-free | yes | 6 | ||
drivers/char/drm/radeon_cp.c | BSD-ish | ok for non-free | yes | 6 | ||
drivers/char/dsp56k.c | GPL | nondistributable | yes | |||
drivers/char/ip2/fip_firm.h | ip2base.c | GPL | nondistributable | yes | ||
drivers/char/ser_a2232fw.h | ser_a2232.c | BSD-ish | ser_a2232fw.ax | free | yes | |
drivers/media/dvb/ttpci/av7110_hw.c | GPLv2 | see note | free | yes | 8 | |
drivers/media/dvb/ttusb-budget/dvb-ttusb-dspbootcode.h | dvb-ttusb-budget.c | GPL? | nondistributable | yes | ||
drivers/media/video/dabfirmware.h | dabusb.c | GPLv2 | already removed | no | ||
drivers/media/video/usbvideo/vicam.c | GPLv2 | nondistributable | yes | |||
drivers/net/acenic_firmware.h | acenic.c | GPLv2 | already removed | no | ||
drivers/net/appletalk/cops_ffdrv.h | cops.c | use-only | nondistributable | yes | ||
drivers/net/appletalk/cops_ltdrv.h | cops.c | use-only | nondistributable | yes | ||
drivers/net/bnx2_fw.h | bnx2.c | GPL | nondistributable | no | 9 | |
drivers/net/cassini.h | cassini.c | GPLv2 | nondistributable | no | ||
drivers/net/dgrs_firmware.c | dgrs.c | GPL | already removed | no | ||
drivers/net/e100.c | GPLv2 | nondistributable | no | 10 | ||
drivers/net/hamradio/yam1200.h | yam.c | GPLv2 | nondistributable | yes | ||
drivers/net/hamradio/yam9600.h | yam.c | GPLv2 | nondistributable | yes | ||
drivers/net/ixp2000/ixp2400_rx.ucode | ixpdev.c | GPLv2 | ixp2400_rx.uc | free | no | 1 |
drivers/net/ixp2000/ixp2400_tx.ucode | ixpdev.c | GPLv2 | ixp2400_tx.uc | free | no | 1 |
drivers/net/myri_code.h | myri_sbus.c | GPL | nondistributable | yes | ||
drivers/net/pcmcia/ositech.h | smc91c92_cs.c | GPL | nondistributable | yes | ||
drivers/net/starfire_firmware.h | starfire.c | GPLv2 | nondistributable | no | ||
drivers/net/tg3.c | redistr. | ok for non-free | no | 6 | ||
drivers/net/tokenring/3c359_microcode.h | 3c359.c | use-only | nondistributable | yes | ||
drivers/net/tokenring/smctr_firmware.h | smctr.c | use-only | already removed | no | ||
drivers/net/typhoon-firmware.h | typhoon.c | redistr. | ok for non-free | yes | ||
drivers/net/wan/wanxlfw.inc_shipped | wanxl.c | GPLv2 | wanxlfw.S | free | yes | |
drivers/net/wireless/atmel.c | GPLv2 | atmel.c | free | yes | ||
drivers/scsi/53c700_d.h_shipped | 53c700.c | GPLv2 | 53c700.scr | free | yes | |
drivers/scsi/53c7xx_d.h_shipped | 53c7xx.c | GPLv2 | 53c7xx.scr | free | yes | |
drivers/scsi/advansys.c | BSD-ish | ok for non-free | yes | |||
drivers/scsi/aic7xxx/aic79xx_seq.h_shipped | aic79xx_core.c | BSD-ish | aic79xx.seq | free | yes | |
drivers/scsi/aic7xxx/aic7xxx_seq.h_shipped | aic7xxx_core.c | BSD-ish | aic7xxx.seq | free | yes | |
drivers/scsi/aic7xxx_old/aic7xxx_seq.c | aic7xxx_old.c | BSD-ish | aic7xxx.seq | free | yes | 1 |
drivers/scsi/ql1040_fw.h | qla1280.c | GPLv2 | nondistributable | no | ||
drivers/scsi/ql12160_fw.h | qla1280.c | GPLv2 | nondistributable | yes | ||
drivers/scsi/ql1280_fw.h | qla1280.c | GPLv2 | nondistributable | yes | ||
drivers/scsi/qla2xxx/ql2100_fw.c | ql2100.c | redistr. | ok for non-free | no | 3 | |
drivers/scsi/qla2xxx/ql2200_fw.c | ql2200.c | redistr. | ok for non-free | no | 3 | |
drivers/scsi/qla2xxx/ql2300_fw.c | ql2300.c | redistr. | ok for non-free | no | 3 | |
drivers/scsi/qla2xxx/ql2322_fw.c | ql2322.c | redistr. | ok for non-free | no | 3 | |
drivers/scsi/qla2xxx/ql2400_fw.c | ql2400.c | redistr. | ok for non-free | no | 3 | |
drivers/scsi/qlogicpti_asm.c | qlogicpti.c | GPL | nondistributable | yes | ||
drivers/scsi/sym53c8xx_2/sym_fw1.h | sym_fw.c | GPLv2 | sym_fw1.h | free | yes | 2 |
drivers/scsi/sym53c8xx_2/sym_fw2.h | sym_fw.c | GPLv2 | sym_fw2.h | free | yes | 2 |
drivers/usb/misc/emi26_fw.h | emi26.h | special | ok for non-free | yes | 4 | |
drivers/usb/misc/emi62_fw_m.h | emi62.c | GPLv2 | already removed | no | ||
drivers/usb/misc/emi62_fw_s.h | emi62.c | GPLv2 | already removed | no | ||
drivers/usb/net/kawethfw.h | kaweth.c | GPLv2 | nondistributable | yes | ||
drivers/usb/serial/io_fw_boot2.h | io_edgeport.c | GPLv2 | nondistributable | yes | ||
drivers/usb/serial/io_fw_boot.h | io_edgeport.c | GPLv2 | nondistributable | yes | ||
drivers/usb/serial/io_fw_down2.h | io_edgeport.c | GPLv2 | nondistributable | yes | ||
drivers/usb/serial/io_fw_down3.h | io_ti.c | GPLv2 | nondistributable | yes | ||
drivers/usb/serial/io_fw_down.h | io_edgeport.c | GPLv2 | nondistributable | yes | ||
drivers/usb/serial/keyspan_mpr_fw.h | keyspan.h | special | already removed | no | 4 | |
drivers/usb/serial/keyspan_pda_fw.h | keyspan_pda.c | GPLv2 | keyspan_pda.S | free | yes | |
drivers/usb/serial/keyspan_usa18x_fw.h | keyspan.h | special | already removed | no | 4 | |
drivers/usb/serial/keyspan_usa19_fw.h | keyspan.h | special | already removed | no | 4 | |
drivers/usb/serial/keyspan_usa19qi_fw.h | keyspan.h | special | already removed | no | 4 | |
drivers/usb/serial/keyspan_usa19qw_fw.h | keyspan.h | special | already removed | no | 4 | |
drivers/usb/serial/keyspan_usa19w_fw.h | keyspan.h | special | already removed | no | 4 | |
drivers/usb/serial/keyspan_usa28_fw.h | keyspan.h | special | already removed | no | 4 | |
drivers/usb/serial/keyspan_usa28xa_fw.h | keyspan.h | special | already removed | no | 4 | |
drivers/usb/serial/keyspan_usa28xb_fw.h | keyspan.h | special | already removed | no | 4 | |
drivers/usb/serial/keyspan_usa28x_fw.h | keyspan.h | special | already removed | no | 4 | |
drivers/usb/serial/keyspan_usa49w_fw.h | keyspan.h | special | already removed | no | 4 | |
drivers/usb/serial/keyspan_usa49wlc_fw.h | keyspan.h | special | already removed | no | 4 | |
drivers/usb/serial/ti_fw_3410.h | ti_usb_3410_5052.c | GPLv2 | nondistributable | no | ||
drivers/usb/serial/ti_fw_5052.h | ti_usb_3410_5052.c | GPLv2 | nondistributable | no | ||
drivers/usb/serial/whiteheat_fw.h | whiteheat.c | GPLv2 | nondistributable | yes | ||
drivers/usb/serial/xircom_pgs_fw.h | keyspan_pda.c | GPLv2 | xircom_pgs.S | free | yes | |
sound/isa/sb/sb16/sb16_csp_codecs.h | sb16_csp.c | GPLv2 | nondistributable | yes | ||
sound/isa/wavefront/wavefront_fx.c | GPLv2 | nondistributable | yes | |||
sound/oss/maestro3.h | maestro3.c | GPLv2 | nondistributable | yes | 7 | |
sound/oss/ymfpci_image.h | ymfpci.c | GPLv2 | nondistributable | yes | 5 | |
sound/oss/yss225.c | wavfront.c | GPLv2 | nondistributable | yes | ||
sound/pci/cs46xx/cs46xx_image.h | cs46xx_lib.c | GPLv2 | nondistributable | yes | ||
sound/pci/cs46xx/imgs/cwc4630.h | cs46xx_lib.c | GPLv2 | nondistributable | yes | ||
sound/pci/cs46xx/imgs/cwcasync.h | cs46xx_lib.c | GPLv2 | nondistributable | yes | ||
sound/pci/cs46xx/imgs/cwcdma.h | cs46xx_lib.c | GPLv2 | nondistributable | yes | ||
sound/pci/cs46xx/imgs/cwcemb80.h | cs46xx_lib.c | GPLv2 | nondistributable | yes | ||
sound/pci/cs46xx/imgs/cwcsnoop.h | cs46xx_lib.c | GPLv2 | nondistributable | yes | ||
sound/pci/korg1212/korg1212-firmware.h | korg1212.c | GPLv2 | nondistributable | yes | ||
sound/pci/maestro3.c | GPLv2 | nondistributable | yes | 7 | ||
sound/pci/ymfpci/ymfpci_image.h | ymfpci_main.c | GPLv2 | nondistributable | yes | 5 |
Notes:
Drivers already using request_firmware: