Proprietary Vendor Libraries
QMK Firmware cannot include support for any proprietary vendor libraries that impose additional restrictions beyond those in the GPL. This includes binary-only distributions, hardware-locked libraries, and code with redistribution limitations. This document explains why such libraries are incompatible with the GPL-based QMK Firmware and addresses commonly proposed workarounds.
Architecture Constraints
Firmware presents unique licensing challenges:
- Monolithic binary: All code compiles into a single executable image
- No OS isolation: No operating system provides process or memory separation
- Shared resources: All code shares the same memory space, peripherals, and execution context
- Static linking: Everything is statically linked at compile time
This monolithic nature means any proprietary code becomes inseparable from GPL code, creating immediate license violations.
Common Vendor Library Restrictions
Proprietary vendor libraries typically impose restrictions incompatible with GPL freedoms:
Hardware Lock-in:
- Library only licensed for specific vendor's chips
- Cannot port firmware to alternative hardware
- Examples: Nordic's and ST's chip-only clauses in their respective licenses
No Source Distribution:
- Binary-only libraries without corresponding source
- Precompiled static libraries (.a/.lib files)
- No ability to modify or fix bugs
- Examples: WCH CH582 precompiled libraries, Nordic SoftDevice
Redistribution Limitations:
- Restrictions on who can distribute
- Limitations on commercial use
- Required permissions or fees
Additional Legal Terms:
- Patent assertions beyond GPL's scope
- Indemnification requirements
- Jurisdiction restrictions
- Explicit anti-GPL clauses
Bluetooth Stack Licensing Examples
Both Nordic and ST provide Bluetooth stacks under restrictive licenses:
Nordic SoftDevice (under Nordic 5-clause license):
- Binary-only Bluetooth/radio stack
- License restricts to Nordic hardware
- No source code available
- Communicates via SVC interface (still not GPL-compatible)
ST's Bluetooth Stack (under SLA0044 license):
- Explicitly forbids being subject to "Open Source Terms", specifically mentioning incompatibility with the GPL
- Restricted to ST microcontrollers only
- Similar functional role to Nordic's SoftDevice
Both represent the same fundamental problem: critical wireless functionality locked behind proprietary licenses.
Why the System Library Exception Doesn't Apply
The GPL's System Library exception cannot rescue proprietary vendor libraries.
System Library Requirements
The exception only covers libraries that:
- Are part of the "normal form of packaging a Major Component"
- The Major Component is an OS kernel, compiler, or similar system software
- Are not distributed with the application
- Are not part of the application itself
Why Vendor Libraries Fail These Requirements
- No operating system: Bare-metal firmware has no OS to provide system libraries
- Not Major Components: Hardware drivers and HALs aren't kernels or compilers
- Distributed together: Vendor code becomes part of the firmware binary
- Application-level code: Peripheral drivers are application functionality
The exception covers things like Windows system DLLs or Linux glibc, not microcontroller vendor libraries or Bluetooth stacks.
Attempted Workarounds
Architectural Separation Attempts
Supervisor Call (SVC) Interfaces:
Nordic's SoftDevice uses supervisor call based APIs instead of direct linking:
- Fixed memory regions for proprietary code
- Communication through CPU exception mechanisms
- Claims of "no linking" between components
Why this fails: The GPL considers functional integration, not just linking methods. In Bluetooth-capable boards, these would require the proprietary component to function, thus they form a single work regardless of the communication mechanism. This applies equally to Nordic's SoftDevice and any similar architecture ST provides.
Binary-Only Distributions:
Multiple vendors provide precompiled libraries:
- WCH: Precompiled BLE stack
- Nordic: Binary-only SoftDevice library
- ST: Same solution as Nordic
Why this fails: This is classic static linking of proprietary code into GPL code. The inability to modify these libraries violates GPL's fundamental requirements.
Loader-Based Separation
- Write a GPL bootloader/loader
- Load proprietary firmware (such as Nordic/ST Bluetooth) from external storage
- Claim they're separate works
Problems:
- If designed as a system, courts view as single work
- Distribution patterns matter (shipped together?)
- Functional interdependence suggests unity
- Appears designed to circumvent GPL
Real-World Examples
Bluetooth/Wireless Stacks
- Nordic SoftDevice: Binary-only, SVC-interface, hardware-locked
- ST Bluetooth: Binary-only, license explicitly GPL-incompatible
- WCH CH582: Precompiled Bluetooth libraries
HAL and Driver Libraries
- ST HAL/LL drivers: Source available but SLA0044 restricted
- Nordic SDK: Source visible but 5-Clause restricted
- Various vendor HALs: Platform-locked licenses
Mixed Proprietary/Open
- Open peripheral drivers with closed protocol stacks
- Basic HAL with proprietary performance libraries
- Partially documented systems requiring binary supplements
Legal and Practical Consequences
Including any proprietary vendor library means:
- License Violation: Immediate GPL non-compliance
- Distribution Ban: Users cannot legally share modified firmware
- Commercial Risk: Products using the firmware face legal liability
- Contributor Tainting: All GPL contributions become legally problematic
- Update Restrictions: Cannot fix bugs in proprietary components
Evaluation Criteria for Libraries
Before including any library, QMK needs to verify:
- Complete source code available
- GPL-compatible license (GPL, LGPL, MIT, BSD, Apache)
- No hardware restrictions
- No redistribution limitations
- No additional legal terms
- No anti-GPL clauses
Policy Implementation
QMK Firmware maintains a strict policy:
- No proprietary libraries: Regardless of technical workarounds
- No binary blobs: All code must have source available
- No platform restrictions: Must allow porting to any hardware
- No additional terms: Only GPL restrictions permitted
Summary
There is no legally safe way to include proprietary vendor libraries in GPL firmware. This applies whether they're:
- Bluetooth stacks (Nordic SoftDevice, ST Bluetooth)
- Precompiled static libraries
- Binary blobs with SVC interfaces
- Source code with restrictive licenses
- Mixed open/closed systems
Technical architectures cannot overcome license obligations.
QMK chooses GPL compliance, ensuring users receive all freedoms the GPL promises.