Wifit3 is licensed GPL-2.0-only, but the 24 firmware blobs it ships under
src/wifit3/chips/<chip>/assets/ (*.bin, plus the ath9k *.fw) are not GPL. Each is a vendor binary that the
silicon needs loaded at bring-up, redistributed here verbatim under its own
manufacturer's license, exactly as Linux's
linux-firmware
repository ships them, and documented the same way that repo's WHENCE manifest does.
None of these blobs are a derivative of the GPLv2 driver code we ported; they pass through
untouched.
Every blob was byte-verified against its upstream before shipping: either against the
canonical linux-firmware copy (SHA-256 / byte-diff), or against the vendor DKMS source's
embedded C array, and in most cases re-derived from the chip's own cold-boot pcap and
diffed against that copy. The per-chip ground-truth docs (chips/<chip>/<CHIP>.md) carry
the verification detail, frame ranges, and hashes; this file is the licensing summary.
| Blob | Chip(s) | Upstream source | Redistribution license | Byte-verified? |
|---|---|---|---|---|
rtw8821a_fw.bin |
RTL8821AU (mainline) | linux-firmware rtw88/rtw8821a_fw.bin |
Realtek redistributable (LICENCE.rtlwifi_firmware.txt) |
✅ pcap body == wire == linux-firmware |
rtw8822b_fw.bin |
RTL8822BU (mainline) | linux-firmware rtw88/rtw8822b_fw.bin |
Realtek redistributable (LICENCE.rtlwifi_firmware.txt) |
✅ vs rtw8822b_fw.bin[FW_HDR_SIZE:] |
rtw8812a_fw.bin |
RTL8812AU (mainline) | linux-firmware rtw88/rtw8812a_fw.bin |
Realtek redistributable (LICENCE.rtlwifi_firmware.txt) |
✅ SHA-256 + pcap body diff |
rtw8814a_fw-linux_firmware.bin |
RTL8814AU (rtw88 mainline) | linux-firmware rtw88/rtw8814a_fw.bin |
Realtek redistributable (LICENCE.rtlwifi_firmware.txt) |
✅ pcap-reassembled == rtw8814a_fw.bin[64:] |
rtl8188eufw.bin |
RTL8188EUS (mainline) | linux-firmware rtlwifi/rtl8188eufw.bin |
Realtek redistributable (LICENCE.rtlwifi_firmware.txt) |
✅ SHA-256 match (pcap-extracted) |
rtl8812au_fw.bin |
RTL8812AU (vendor DKMS) | morrownr 8812au DKMS hal/rtl8812a (array_mp_8812a_fw_nic) |
Realtek redistributable (same Realtek FW terms) | ✅ golden-hash vs vendor C array (27030 B) |
rtl8814au_fw.bin |
RTL8814AU (vendor DKMS) | morrownr 8814au DKMS hal8814a_fw.c (array_mp_8814a_fw_nic) |
Realtek redistributable (same Realtek FW terms) | ✅ vendor C array == pcap bulk payload (68320 B) |
rtl8821au_fw.bin |
RTL8821AU (vendor DKMS) | Lucid-Duck PR #194 morrownr/8821au-20210708 DKMS hal/rtl8821a (vendor FW array) |
Realtek redistributable (same Realtek FW terms) | ✅ FW page-write byte-exact in verify_pcap (30880 B) |
rtl8822bu_fw.bin |
RTL8822BU (vendor DKMS) | morrownr 88x2bu DKMS (array_mp_8822b_fw_nic v30.20) |
Realtek redistributable (same Realtek FW terms) | ✅ download byte-exact in verify_pcap (161240 B) |
rtl8822c_fw_nic.bin |
RTL8822CU (vendor DKMS) | rtl88x2cu GPL hal/rtl8822c/hal8822c_fw.c (array_mp_8822c_fw_nic v9.17) |
Realtek redistributable (same Realtek FW terms) | ✅ HALMAC container parse (v9.17, 200624 B) |
rtl8188eufw.bin (dkms) |
RTL8188EUS (vendor DKMS) | aircrack-ng/kimocoder 8188eus DKMS (array_mp_8188e_t_fw_nic) |
Realtek redistributable (LICENCE.rtlwifi_firmware.txt) |
✅ SHA-256 == linux-firmware copy |
WIFI_MT7961_patch_mcu_1_2_hdr.bin |
MT7921AU | linux-firmware mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin |
MediaTek redistributable (LICENCE.mediatek) |
✅ SHA-256 vs linux-firmware |
WIFI_RAM_CODE_MT7961_1.bin |
MT7921AU | linux-firmware mediatek/WIFI_RAM_CODE_MT7961_1.bin |
MediaTek redistributable (LICENCE.mediatek) |
✅ SHA-256 vs linux-firmware |
WIFI_MT7925_PATCH_MCU_1_1_hdr.bin |
MT7925AU | linux-firmware mediatek/mt7925/WIFI_MT7925_PATCH_MCU_1_1_hdr.bin |
MediaTek redistributable (LICENCE.mediatek) |
✅ FW download byte-exact in verify_pcap (197792 B, sha256 8b68c73d…) |
WIFI_RAM_CODE_MT7925_1_1.bin |
MT7925AU | linux-firmware mediatek/mt7925/WIFI_RAM_CODE_MT7925_1_1.bin |
MediaTek redistributable (LICENCE.mediatek) |
✅ FW download byte-exact in verify_pcap (1246968 B, sha256 f156ca10…) |
mt7662_ilm.bin |
MT7612U (MT76x2U) | linux-firmware mediatek/mt7662.bin (ILM region) |
Ralink/MediaTek redistributable (LICENCE.ralink_a_mediatek_company_firmware) |
✅ == mt7662.bin[32:32+ilm_len] |
mt7662_dlm.bin |
MT7612U (MT76x2U) | linux-firmware mediatek/mt7662.bin (DLM region) |
Ralink/MediaTek redistributable (LICENCE.ralink_a_mediatek_company_firmware) |
✅ == mt7662.bin DLM region |
mt7662_rom_patch_body.bin |
MT7612U (MT76x2U) | linux-firmware mediatek/mt7662_rom_patch.bin (30-B header stripped) |
Ralink/MediaTek redistributable (LICENCE.ralink_a_mediatek_company_firmware) |
✅ == mt7662_rom_patch.bin[30:] |
mt7610e_linux-firmware.bin |
MT7610U (MT76x0U) | linux-firmware mediatek/mt7610e.bin |
MediaTek redistributable (LICENCE.mediatek) |
✅ pcap body == mt7610e.bin[32:] |
mt7610u_linux-firmware.bin |
MT7610U (MT76x0U) | linux-firmware mediatek/mt7610u.bin |
MediaTek redistributable (LICENCE.mediatek) |
✅ shipped verbatim (kernel fallback variant) |
mt7610u_pcap_body.bin |
MT7610U (MT76x0U) | extracted from cold-boot pcap; == mt7610e.bin[32:] |
MediaTek redistributable (LICENCE.mediatek) |
✅ byte-for-byte vs mt7610e.bin[32:] |
rt5572.bin |
RT5572 / RT3572 (RT2800USB) | linux-firmware rt2870.bin (USB half, offset 4096) |
Ralink redistributable (LICENCE.ralink-firmware.txt) |
✅ md5 8d98ca9f…, second 4 KB of rt2870.bin |
rt3070_fw.bin |
RT3070 | linux-firmware rt2870.bin (first 4 KB, offset 0) |
Ralink redistributable (LICENCE.ralink-firmware.txt) |
✅ md5 d94f0280…, wire multiwrite == rt2870.bin[:4096] |
rt5372_fw.bin |
RT5372 | linux-firmware rt2870.bin (USB half, offset 4096) |
Ralink redistributable (LICENCE.ralink-firmware.txt) |
✅ md5 8d98ca9f…, rt2870.bin[4096:] |
rt5370_fw.bin |
RT5370 | linux-firmware rt2870.bin (USB half, offset 4096) |
Ralink redistributable (LICENCE.ralink-firmware.txt) |
✅ md5 8d98ca9f…, rt2870.bin[4096:] (byte-identical to rt5372_fw.bin) |
htc_9271-1.4.0.fw |
AR9271 (ath9k_htc, v2) | linux-firmware ath9k_htc/htc_9271-1.4.0.fw |
Atheros redistributable (LICENCE.atheros_firmware) |
✅ md5 4ed467d4…, wire FW-download (13 chunks) == blob on all 3 pcaps |
Notes:
- One blob shared, two slices. The Ralink
rt3070_fw.bin,rt5370_fw.bin,rt5372_fw.bin, andrt5572.binare all carved from the singlelinux-firmwarert2870.bin: RT3070 uses the first 4 KB (PCI half), RT5370/RT5372/RT5572 use the second 4 KB (USB half). InWHENCE,rt3070.binis a symlink tort2870.bin, andrt3071.binis documented as "a copy of bytes 4096-8191 of rt2870.bin." - RTL8814AU. Both the mainline (
rtw88_8814au) and the vendor-DKMS (rtl8814au_dkms) ports carry an 8814a blob; they are the same 68320-byte Realtek firmware.linux-firmwarenow ships it asrtw88/rtw8814a_fw.bin; the DKMS copy was verified against the vendor C array (array_mp_8814a_fw_nic). - Vendor-DKMS Realtek blobs are embedded as C
dataarrays inside the GPLv2 DKMS driver source rather than shipped as standalone files. The driver code is GPLv2; the embedded firmware payload is Realtek's redistributable binary and is governed by the same Realtek firmware terms as the mainline copies (LICENCE.rtlwifi_firmware.txt). We extract the array to a.binand ship it unmodified. - MT7612U firmware is
mt7662.bin, notmt7662u.bin. The mainlinemt76x2uUSB driver requestsMT7662_FIRMWARE/MT7662_ROM_PATCH=mt7662.bin/mt7662_rom_patch.bin(mt76x2/mt76x2.h,usb_mcu.c), the same files the PCIemt76x2edriver uses. Our three blobs are byte-identical to them (ILM+DLM ==mt7662.bin[32:]; rom-patch body ==mt7662_rom_patch.bin[30:], the 30-bytemt76x02_patch_headerstripped). The similarly namedmt7662u.bin(a different, larger build thatWHENCEfiles undermt76x2u/LICENCE.mediatek) is not what mainline loads or what wifit3 ships, called out here so the provenance and the governing license stay correct.
The blobs group under four vendor licenses, mirroring linux-firmware's WHENCE. The
verbatim linux-firmware LICENCE.* file for each blob now ships next to it in that chip's
assets/ directory, so the license travels with the binary in the repo, the built wheel, and
the PyInstaller bundle. The governing-license wording quoted below is from that same file.
Covers the rtw88/rtw88xx and rtlwifi/rtl8188eufw blobs, and (by the same Realtek terms)
the vendor-DKMS Realtek blobs. WHENCE marks every one:
Licence: Redistributable. See LICENCE.rtlwifi_firmware.txt for details.
The license itself (Copyright (c) 2010, Realtek Semiconductor Corporation) permits redistribution and use in binary form, without modification, provided redistributions reproduce the copyright notice and disclaimer; it explicitly forbids reverse engineering, decompilation, or disassembly, and grants a limited patent license for use alone or in combination with an OSI-approved open-source-licensed operating system.
Covers the MT7921AU (WIFI_MT7961_*, WIFI_RAM_CODE_MT7961_*), MT7925AU
(WIFI_MT7925_PATCH_MCU_1_1_hdr, WIFI_RAM_CODE_MT7925_1_1, filed under mediatek/mt7925/),
and MT7610U (mt7610e/mt7610u) blobs. (The MT7612U mt7662* blobs are not here:
WHENCE files them under the Ralink/MediaTek license below.) WHENCE marks the MediaTek blobs:
Licence: Redistributable. See LICENCE.mediatek for details.
The license reads, in full:
MediaTek Inc. grants permission to use and redistribute aforementioned firmware files for the use with devices containing MediaTek chipsets, but not as part of the Linux kernel or in any other form which would require these files themselves to be covered by the terms of the GNU General Public License or the GNU Lesser General Public License.
(Distributed WITHOUT ANY WARRANTY.) This is the explicit upstream basis for keeping the blobs out of the GPL boundary: they are bundled data, not part of the GPL-2.0-only codebase.
The RT2800USB-family blobs (rt2870.bin slices: rt3070_fw.bin, rt5370_fw.bin,
rt5372_fw.bin, rt5572.bin) fall under the original Ralink firmware license. WHENCE marks
rt2870.bin:
Licence: Redistributable. See LICENCE.ralink-firmware.txt for details
The license (Copyright (c) 2007, Ralink Technology Corporation) permits redistribution and use in binary form, without modification provided redistributions reproduce the copyright notice and disclaimer; no reverse engineering, decompilation, or disassembly; with the same limited patent license as the Realtek terms above.
Covers the MT7612U (MT76x2U) blobs: mt7662_ilm.bin + mt7662_dlm.bin (carved from
mt7662.bin) and mt7662_rom_patch_body.bin (from mt7662_rom_patch.bin). The card is USB,
but the mainline mt76x2u driver loads the same mt7662.bin / mt7662_rom_patch.bin the
PCIe mt76x2e driver does, and WHENCE files those under driver mt76x2e:
Licence: Redistributable. See LICENCE.ralink_a_mediatek_company_firmware for details
The license (Copyright (c) 2013, Ralink, A MediaTek Company) carries terms identical to the 2007 Ralink license above: binary redistribution provided the copyright notice and disclaimer are reproduced, no reverse engineering, and the same limited patent license.
Every new firmware blob added under chips/<chip>/assets/ must be recorded in this file:
its provenance and redistribution terms from the linux-firmware WHENCE manifest, and a
byte-verification against linux-firmware (or the vendor source it was extracted from). See
docs/porting/METHODOLOGY.md → "Housekeeping — every new port" → Licensing.