NextBSD · Driver delivery · naming manifest

Kext naming manifest — the static source-of-truth list

The curated KMOD → kext mapping that drives buildextensions / buildgraphics. Naming follows build origin: base in-tree drivers take their FreeBSD name (if_iwlwifi.kext), out-of-tree ports take custom names (IntelGraphics.kext). Grounded against FreeBSD main (what the monorepo seeds from), with each driver's prior catalog name shown so you can see what changed.

Compiled 2026-07-17, verified against github.com/freebsd/freebsd-src main (exact KMOD= lines) + the project's kld-to-kext catalog/naming-plan. Provisional — sub of the firmware-kext table → driver-delivery sidebar. This is a static manifest; the match tables inside each kext are auto-generated separately. Planning only.

The rule (your decision)

Naming style tracks build origin, so a custom name only costs you where you're already paying for a custom build recipe.

OriginBuilt byNamingCount
Base / in-tree (sys/modules)buildextensionsFreeBSD-name <KMOD>.kext, id org.nextbsd.<cat>.<kmod> (strip if_) — mechanical, auto-derived~30 fw kexts + ~250 plain klds
Out-of-tree (drm-kmod, nvidia ports)buildgraphics/vendorCustom curated hand-assigned in this manifest12 names

Only 12 names are hand-curated (6 GPU/DRM + 6 nvidia branches). Everything else falls out of the KMOD mechanically. Zero driver deltas between main and releng/15.1 for this set, so the manifest is stable across the migration.

How the mechanical (base) name is derived Bundle name = the KMOD + .kext (if_iwlwifiif_iwlwifi.kext). Bundle identifier = org.nextbsd.<category>.<kmod-without-if_> (org.nextbsd.driver.iwlwifi). CFBundleExecutable = the exact KMOD (if_iwlwifi) — always, both schemes, non-negotiable. Category: driver (hardware), firmware (blob kexts), compat (LinuxKPI), kpi (shared cores). No human judgment needed — a script can emit every base row from a sys/modules walk.

1Base kexts — FreeBSD-name (auto-derived)

All in-tree sys/modules drivers. The "prior catalog name" column is what the June kld-to-kext catalog proposed; the new name is the decided mechanical one. Firmware column = the base firmware module (bundled into the kext's Resources/, or a separate org.nextbsd.firmware.* kext per open decision D4).

1a · WiFi — native (firmware in base / contrib)

KMOD (main)Prior catalog nameNew kext (FreeBSD-name)Bundle idFirmware module
if_iwmIntelIWMif_iwm.kextorg.nextbsd.driver.iwmcontrib *.fw (no iwmfw module)
if_iwnIntelIWNif_iwn.kextorg.nextbsd.driver.iwniwnfw (15 images)
if_wpiIntelWPIif_wpi.kextorg.nextbsd.driver.wpiwpifw
if_ipwIntelIPWif_ipw.kextorg.nextbsd.driver.ipwipwfw (4) · license-ack
if_iwiIntelIWIif_iwi.kextorg.nextbsd.driver.iwiiwifw (4) · license-ack
rtwn (core)Rtwnrtwn.kextorg.nextbsd.driver.rtwnrtwnfw (11)
if_rtwn_pciRtwnPciif_rtwn_pci.kextorg.nextbsd.driver.rtwn_pci
if_rtwn_usbRtwnUsbif_rtwn_usb.kextorg.nextbsd.driver.rtwn_usb
if_otusOtusif_otus.kextorg.nextbsd.driver.otusotusfw (3)
if_ralRalif_ral.kextorg.nextbsd.driver.ralralfw (6)
if_mwlMwlif_mwl.kextorg.nextbsd.driver.mwlmwlfw
if_run— (missing)if_run.kextorg.nextbsd.driver.runrunfw
if_rsu— (missing)if_rsu.kextorg.nextbsd.driver.rsursufw (3)
if_uath— (missing)if_uath.kextorg.nextbsd.driver.uathcontrib (no fw module)

1b · WiFi — LinuxKPI & restricted (firmware out-of-base, from ports/fwget)

KMOD (main)Prior catalog nameNew kext (FreeBSD-name)Bundle idFirmware
if_iwlwifiIntelIwlwifiif_iwlwifi.kextorg.nextbsd.driver.iwlwifiport wifi-firmware-iwlwifi-kmod → bake in
if_iwxIntelIWXif_iwx.kextorg.nextbsd.driver.iwxout-of-base
if_rtw88Rtw88if_rtw88.kextorg.nextbsd.driver.rtw88port wifi-firmware-rtw88-kmod
if_rtw89Rtw89if_rtw89.kextorg.nextbsd.driver.rtw89port wifi-firmware-rtw89-kmod
if_ath10kAth10kif_ath10k.kextorg.nextbsd.driver.ath10kport wifi-firmware-ath10k-kmod
if_ath11kAth11kif_ath11k.kextorg.nextbsd.driver.ath11kport wifi-firmware-ath11k-kmod
if_ath12kAth12kif_ath12k.kextorg.nextbsd.driver.ath12kport wifi-firmware-ath12k-kmod
athk_commonAthkCommonathk_common.kextorg.nextbsd.driver.athk_common— (shared lib)
mt76_core + if_mt7615/7915/7921/7925/7996Mt76 (1 → 6 KMODs)6 kexts: mt76_core.kext, if_mt7921.kext, …org.nextbsd.driver.mt76_core, …mt7921, …port wifi-firmware-mt76-kmod
if_maloMaloif_malo.kextorg.nextbsd.driver.malorestricted — no public fw
if_bwnBWnif_bwn.kextorg.nextbsd.driver.bwnrestricted — source-build only
if_bwiBWiif_bwi.kextorg.nextbsd.driver.bwirestricted — source-build only
if_upgt— (missing)if_upgt.kextorg.nextbsd.driver.upgtrestricted — no public fw

1c · LinuxKPI cores (base — shared deps, category compat/kpi)

KMOD (main)Prior catalog nameNew kextBundle id
linuxkpiLinuxKpilinuxkpi.kextorg.nextbsd.compat.linuxkpi
linuxkpi_wlanLinuxKpiWlanlinuxkpi_wlan.kextorg.nextbsd.compat.linuxkpi_wlan
linuxkpi_hdmiLinuxKpiHdmilinuxkpi_hdmi.kextorg.nextbsd.compat.linuxkpi_hdmi
linuxkpi_videoLinuxKpiVideolinuxkpi_video.kextorg.nextbsd.compat.linuxkpi_video
backlightBacklightbacklight.kextorg.nextbsd.kpi.backlight

1d · Ethernet / storage / crypto (firmware in base)

KMOD (main)Prior catalog nameNew kext (FreeBSD-name)Bundle idFirmware module(s)
if_iceIceif_ice.kextorg.nextbsd.driver.iceice_ddp
if_cxgbeCXGBEif_cxgbe.kextorg.nextbsd.driver.cxgbet4fw_cfg/t5fw_cfg/t6fw_cfg/t7fw_cfg
if_cxgbCXGBif_cxgb.kextorg.nextbsd.driver.cxgbcxgb_t3fw
if_mxgeMxgeif_mxge.kextorg.nextbsd.driver.mxgemxge_{eth,ethp,rss_eth,rss_ethp}_z8e
ispIspisp.kextorg.nextbsd.driver.ispispfw (isp_2400isp_2800)
qatQatqat.kextorg.nextbsd.driver.qatqat_{200xx,4xxx,c3xxx,c4xxx,c62x,dh895xcc}_fw
qat_c2xxxQatC2xxxqat_c2xxx.kextorg.nextbsd.driver.qat_c2xxxqat_c2xxxfw

2Out-of-tree kexts — custom curated (the 12 names)

GPU KMS drivers + shared DRM cores from the graphics/drm-kmod port, and the nvidia branches from x11/nvidia-driver. These already need bespoke build recipes (fetch/patch/branch), so custom names cost nothing extra. Built by buildgraphics/vendor, not buildextensions.

KMODPortPrior nameNew kext (custom)Bundle idExec
i915kmsdrm-kmodIntelGraphicsIntelGraphics.kextorg.nextbsd.driver.IntelGraphicsi915kms
amdgpudrm-kmodAMDGraphicsAMDGraphics.kextorg.nextbsd.driver.AMDGraphicsamdgpu
radeonkmsdrm-kmodRadeonGraphicsRadeonGraphics.kextorg.nextbsd.driver.RadeonGraphicsradeonkms
drmdrm-kmodIOGraphicsIOGraphics.kextorg.nextbsd.kpi.IOGraphicsdrm
ttmdrm-kmodTTMTTM.kextorg.nextbsd.kpi.TTMttm
dmabufdrm-kmodDMABufDMABuf.kextorg.nextbsd.kpi.DMABufdmabuf
nvidia (+-modeset,-drm)nvidia-driver (per branch)NVIDIA → per-branchNVIDIAGraphics595.kextorg.nextbsd.driver.NVIDIAGraphics595nvidia
NVIDIAGraphics580.kext…NVIDIAGraphics580nvidia
NVIDIAGraphics470.kext…NVIDIAGraphics470nvidia
NVIDIAGraphics390.kext…NVIDIAGraphics390nvidia
NVIDIAGraphics340.kext…NVIDIAGraphics340nvidia
NVIDIAGraphics304.kext…NVIDIAGraphics304nvidia

The prior catalog/naming-plan (June) proposed a single NVIDIA / org.nextbsd.driver.NVIDIA; the newer nvidia-porting-plan (July) supersedes it with per-branch bundles — used here, since coexistence needs a unique bundle name per branch. Every branch's CFBundleExecutable is literally nvidia (the EEXIST wall) — only the bundle name/id disambiguates on disk; one loads. Multi-.ko packaging (nvidia+nvidia-modeset+nvidia-drm in one bundle) is still an open ko2kext.sh gap.

3Corrections the main grounding forced

Fixes vs the June catalog — verified against main HEAD 2026-07-17

4Firmware-image kexts (if separated, category firmware)

Base firmware blobs. Per open decision D4, each is either bundled into its driver's kext (Contents/Resources/firmware/ — preferred for the self-contained base-owned model) or shipped as its own org.nextbsd.firmware.* kext the driver depends on. Under FreeBSD-name rules the separate form is mechanical too:

iwnfw.kext · wpifw.kext · ipwfw.kext · iwifw.kext · rtwnfw.kext · otusfw.kext · ralfw.kext · runfw.kext · rsufw.kext · mwlfw.kext · ice_ddp.kext · t4fw_cfg.kextt7fw_cfg.kext · cxgb_t3fw.kext · mxge_*_z8e.kext · ispfw.kext · qatfw.kext · qat_c2xxxfw.kext — all org.nextbsd.firmware.<module>.

5Optional marquee overrides (default: off)

The one taste-call left open Base is strictly FreeBSD-name by default (your decision). If you later want a handful of flagship base drivers to get a pretty name — e.g. you already ship IntelWiFi.kext wrapping iwlwifi — that's a tiny curated-override list layered on the mechanical default, not a change to the rule:
KMODMechanical defaultOptional override
if_iwlwifiif_iwlwifi.kextIntelWiFi.kext (already shipped)
Leave it empty for strict mechanical, or grow this table with a line per flagship. Recommendation: keep it empty except IntelWiFi (since the PoC already uses it) — your call.

This manifest IS the build's source of truth The rows above become the KEXTS table consumed by buildextensions (base, auto-generated rows) and buildgraphics (the 12 custom rows). Each entry supplies: KMOD, bundle name, bundle id, category, firmware, and dep list. The IOKitPersonalities match table inside each kext is not here — it's generated separately by gen-*-personalities.sh from the driver's own PCI-ID table. Static manifest = names + wiring; generated = match data.