One Developer’s Quest to Bring Broadcom Wi-Fi to FreeBSD—And What It Reveals About the State of Open-Source Hardware Support

For most users of mainstream operating systems, connecting to a Wi-Fi network is a trivial affair—click a button, enter a password, and move on. But for those running FreeBSD, one of the oldest and most respected open-source operating systems, wireless networking has long been a source of frustration, particularly when it comes to Broadcom chipsets found in millions of laptops and embedded devices. A recent technical chronicle by developer Vladimir Varankin sheds light on just how difficult—and rewarding—it can be to port a Linux wireless driver to FreeBSD, offering a window into the broader challenges facing alternative operating systems in a hardware world dominated by a few silicon vendors.
Varankin’s detailed account, published on his personal blog, documents his effort to bring the brcmfmac driver—the Linux kernel’s FullMAC driver for Broadcom and Cypress Wi-Fi chips—to FreeBSD. The work is significant because Broadcom’s wireless chipsets are among the most common in consumer hardware, yet FreeBSD has historically lacked proper support for them. The existing FreeBSD driver, bwn, covers only older Broadcom SoftMAC chips and has not kept pace with the company’s newer FullMAC designs, which offload much of the 802.11 protocol handling to the firmware running on the chip itself.
Why Broadcom Wi-Fi on FreeBSD Matters
The distinction between SoftMAC and FullMAC is not merely academic. In a SoftMAC architecture, the operating system’s wireless stack handles most of the 802.11 protocol logic, giving the OS more control but requiring more complex driver code. FullMAC chips, by contrast, push that logic into proprietary firmware, simplifying the driver but making the OS more dependent on opaque binary blobs provided by the chipmaker. Broadcom’s newer chips—found in Raspberry Pi boards, Apple hardware, and countless laptops—are FullMAC devices, and without a working brcmfmac equivalent, FreeBSD users are left without wireless on a large swath of modern hardware.
Varankin’s motivation was partly personal and partly philosophical. As he explains, he wanted to use FreeBSD on hardware he already owned, and the lack of Broadcom Wi-Fi support was a hard blocker. But the project also speaks to a larger truth about open-source operating systems: driver availability is often the single biggest factor determining whether an OS can be used on real hardware, and the gap between Linux and its BSD cousins has been widening as Linux attracts more vendor support and more developer attention.
The Technical Challenge of Cross-Pollinating Kernel Drivers
Porting a driver from Linux to FreeBSD is not a matter of copying files and recompiling. The two operating systems have fundamentally different kernel architectures, different networking stacks, different bus abstraction layers, and different approaches to device configuration and firmware loading. Varankin’s write-up describes the painstaking process of adapting Linux’s brcmfmac code—which depends on Linux-specific infrastructure like cfg80211, mac80211, the Linux device model, and the firmware loading subsystem—to FreeBSD’s own conventions.
One of the most instructive aspects of Varankin’s account is his description of the shim layers required to bridge the gap. Rather than rewriting the driver from scratch, he created compatibility layers that translate between Linux kernel APIs and their FreeBSD equivalents. This approach, sometimes called a “LinuxKPI” strategy, has precedent in the FreeBSD project: the operating system already uses a LinuxKPI layer to run certain Linux GPU drivers (notably for Intel and AMD graphics), and there has been growing interest in extending this technique to other driver classes, including wireless.
Firmware, Firmware, Firmware
A recurring theme in Varankin’s work is the central role of firmware. Broadcom’s FullMAC chips require binary firmware files to be loaded at initialization time. On Linux, these files are typically distributed via the linux-firmware repository and loaded by the kernel’s firmware loading infrastructure. FreeBSD has its own firmware loading mechanism, and the firmware files themselves must be redistributed in compliance with Broadcom’s licensing terms—a legal and logistical headache that adds friction to the porting process.
Varankin notes that getting the correct firmware version matched to the correct chip revision is a nontrivial task. Broadcom’s chipset lineup is vast, with numerous revisions and variants, each potentially requiring a different firmware binary. The Linux brcmfmac driver handles this through a complex device identification and firmware selection mechanism that Varankin had to replicate or adapt for FreeBSD. Errors in firmware loading manifest as silent failures or cryptic error messages, making debugging particularly difficult.
The SDIO and PCIe Bus Problem
Another layer of complexity comes from the bus interfaces used by Broadcom Wi-Fi chips. Many embedded devices, including the Raspberry Pi, connect the Broadcom Wi-Fi chip via SDIO (Secure Digital Input Output), while laptops and desktops typically use PCIe. The Linux brcmfmac driver supports both bus types through a modular architecture, but FreeBSD’s SDIO support has historically been incomplete. Varankin’s write-up discusses the challenges of getting the SDIO path working, including issues with FreeBSD’s MMC/SD stack and the need to handle quirks specific to Broadcom’s SDIO implementation.
For the PCIe path, the situation is somewhat better, as FreeBSD has mature PCI and PCIe support. But even here, Varankin encountered issues related to interrupt handling, DMA buffer management, and the interaction between the driver and FreeBSD’s net80211 wireless stack, which differs significantly from Linux’s cfg80211/mac80211 framework. The FullMAC nature of the chip simplifies some of these interactions—since the firmware handles much of the 802.11 state machine—but the driver still must translate between the firmware’s event model and FreeBSD’s expectations.
Where FreeBSD’s Wireless Stack Stands Today
Varankin’s project does not exist in a vacuum. The FreeBSD project has been making broader efforts to improve its wireless networking support, recognizing that Wi-Fi is no longer optional for a general-purpose operating system. The FreeBSD Wiki’s Wi-Fi page tracks the status of various wireless drivers and notes ongoing work to modernize the net80211 stack and expand LinuxKPI-based driver support. Recent FreeBSD releases have included LinuxKPI-based drivers for Intel Wi-Fi chips (the iwlwifi port), and there is active discussion about extending this approach to Realtek, MediaTek, and now Broadcom chipsets.
The Intel Wi-Fi effort, led by Bjoern Zeeb and others, has been a proof of concept that the LinuxKPI approach can work for wireless drivers at scale. But each new chipset family brings its own challenges, and the Broadcom case is particularly complex due to the FullMAC architecture, the firmware dependency, and the diversity of bus interfaces. Varankin’s work builds on the foundation laid by the Intel effort but pushes into new territory.
The Broader Implications for Alternative Operating Systems
The story of Broadcom Wi-Fi on FreeBSD is a microcosm of a larger problem facing all non-Linux open-source operating systems. Hardware vendors increasingly write drivers only for Linux (and Windows), leaving BSDs, Haiku, and other projects to fend for themselves. The Linux kernel’s dominance in the server, embedded, and increasingly desktop markets means that vendor engineering resources flow disproportionately to Linux, and the APIs and conventions of the Linux kernel become de facto standards for hardware interaction.
This dynamic creates a difficult choice for projects like FreeBSD: invest enormous effort in writing native drivers from documentation (which vendors may not provide), or build compatibility layers that allow Linux drivers to run with minimal modification. The latter approach is pragmatic but introduces maintenance burdens, as changes in the upstream Linux driver must be tracked and integrated. Varankin’s work illustrates both the promise and the pain of this strategy.
What Comes Next for brcmfmac on FreeBSD
As of Varankin’s latest update, the ported driver is functional but not yet ready for inclusion in the FreeBSD base system. There are outstanding issues with stability, power management, and support for the full range of Broadcom chip variants. The work is being done in the open, and Varankin has expressed hope that it will attract additional contributors—a common pattern in open-source development, where a working prototype serves as a catalyst for broader community involvement.
For FreeBSD users who depend on Broadcom Wi-Fi hardware—including the large community of Raspberry Pi users who run FreeBSD on those boards—the progress is encouraging. A working brcmfmac driver would remove one of the most commonly cited barriers to using FreeBSD on consumer hardware, and it would demonstrate that the LinuxKPI approach can scale beyond Intel graphics and Intel Wi-Fi to cover a wider range of devices.
The technical details of Varankin’s work are dense, but the takeaway is straightforward: making hardware work on an alternative operating system remains one of the hardest problems in open-source software, and it depends on the persistence of individual developers willing to spend months wrestling with undocumented firmware interfaces, incompatible kernel APIs, and the sheer complexity of modern wireless chipsets. The fact that this work is happening at all is a testament to the enduring vitality of the FreeBSD project and the stubbornness of its community.