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.