Skip to content

Commit d575bf7

Browse files
authored
Add proprietary libraries policy page. (#25532)
1 parent 36c3f4d commit d575bf7

2 files changed

Lines changed: 179 additions & 2 deletions

File tree

docs/_sidebar.json

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,14 @@
2121
{ "text": "Debugging QMK", "link": "/faq_debug" },
2222
{ "text": "Keymap FAQ", "link": "/faq_keymap" },
2323
{ "text": "Squeezing Space from AVR", "link": "/squeezing_avr" },
24-
{ "text": "Glossary", "link": "/reference_glossary" },
25-
{ "text": "License Violations", "link": "/license_violations" }
24+
{ "text": "Glossary", "link": "/reference_glossary" }
25+
]
26+
},
27+
{
28+
"text": "Licensing",
29+
"items": [
30+
{ "text": "License Violations", "link": "/license_violations" },
31+
{ "text": "Proprietary Libraries", "link": "/proprietary_libs" }
2632
]
2733
},
2834
{

docs/proprietary_libs.md

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
# Proprietary Vendor Libraries
2+
3+
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.
4+
5+
## Architecture Constraints
6+
7+
Firmware presents unique licensing challenges:
8+
9+
- **Monolithic binary**: All code compiles into a single executable image
10+
- **No OS isolation**: No operating system provides process or memory separation
11+
- **Shared resources**: All code shares the same memory space, peripherals, and execution context
12+
- **Static linking**: Everything is statically linked at compile time
13+
14+
This monolithic nature means any proprietary code becomes inseparable from GPL code, creating immediate license violations.
15+
16+
## Common Vendor Library Restrictions
17+
18+
Proprietary vendor libraries typically impose restrictions incompatible with GPL freedoms:
19+
20+
**Hardware Lock-in:**
21+
- Library only licensed for specific vendor's chips
22+
- Cannot port firmware to alternative hardware
23+
- Examples: Nordic's and ST's chip-only clauses in their respective licenses
24+
25+
**No Source Distribution:**
26+
- Binary-only libraries without corresponding source
27+
- Precompiled static libraries (.a/.lib files)
28+
- No ability to modify or fix bugs
29+
- Examples: WCH CH582 precompiled libraries, Nordic SoftDevice
30+
31+
**Redistribution Limitations:**
32+
- Restrictions on who can distribute
33+
- Limitations on commercial use
34+
- Required permissions or fees
35+
36+
**Additional Legal Terms:**
37+
- Patent assertions beyond GPL's scope
38+
- Indemnification requirements
39+
- Jurisdiction restrictions
40+
- Explicit anti-GPL clauses
41+
42+
## Bluetooth Stack Licensing Examples
43+
44+
Both Nordic and ST provide Bluetooth stacks under restrictive licenses:
45+
46+
**Nordic SoftDevice (under Nordic 5-clause license):**
47+
- Binary-only Bluetooth/radio stack
48+
- License restricts to Nordic hardware
49+
- No source code available
50+
- Communicates via SVC interface (still not GPL-compatible)
51+
52+
**ST's Bluetooth Stack (under SLA0044 license):**
53+
- Explicitly forbids being subject to "Open Source Terms", specifically mentioning incompatibility with the GPL
54+
- Restricted to ST microcontrollers only
55+
- Similar functional role to Nordic's SoftDevice
56+
57+
Both represent the same fundamental problem: critical wireless functionality locked behind proprietary licenses.
58+
59+
## Why the System Library Exception Doesn't Apply
60+
61+
The GPL's System Library exception **cannot** rescue proprietary vendor libraries.
62+
63+
### System Library Requirements
64+
65+
The exception only covers libraries that:
66+
1. Are part of the "normal form of packaging a Major Component"
67+
2. The Major Component is an OS kernel, compiler, or similar system software
68+
3. Are not distributed with the application
69+
4. Are not part of the application itself
70+
71+
### Why Vendor Libraries Fail These Requirements
72+
73+
1. **No operating system**: Bare-metal firmware has no OS to provide system libraries
74+
2. **Not Major Components**: Hardware drivers and HALs aren't kernels or compilers
75+
3. **Distributed together**: Vendor code becomes part of the firmware binary
76+
4. **Application-level code**: Peripheral drivers are application functionality
77+
78+
The exception covers things like Windows system DLLs or Linux glibc, not microcontroller vendor libraries or Bluetooth stacks.
79+
80+
## Attempted Workarounds
81+
82+
### Architectural Separation Attempts
83+
84+
**Supervisor Call (SVC) Interfaces:**
85+
86+
Nordic's SoftDevice uses supervisor call based APIs instead of direct linking:
87+
- Fixed memory regions for proprietary code
88+
- Communication through CPU exception mechanisms
89+
- Claims of "no linking" between components
90+
91+
**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.
92+
93+
**Binary-Only Distributions:**
94+
95+
Multiple vendors provide precompiled libraries:
96+
- WCH: Precompiled BLE stack
97+
- Nordic: Binary-only SoftDevice library
98+
- ST: Same solution as Nordic
99+
100+
**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.
101+
102+
### Loader-Based Separation
103+
104+
- Write a GPL bootloader/loader
105+
- Load proprietary firmware (such as Nordic/ST Bluetooth) from external storage
106+
- Claim they're separate works
107+
108+
**Problems:**
109+
- If designed as a system, courts view as single work
110+
- Distribution patterns matter (shipped together?)
111+
- Functional interdependence suggests unity
112+
- Appears designed to circumvent GPL
113+
114+
## Real-World Examples
115+
116+
### Bluetooth/Wireless Stacks
117+
- **Nordic SoftDevice**: Binary-only, SVC-interface, hardware-locked
118+
- **ST Bluetooth**: Binary-only, license explicitly GPL-incompatible
119+
- **WCH CH582**: Precompiled Bluetooth libraries
120+
121+
### HAL and Driver Libraries
122+
- **ST HAL/LL drivers**: Source available but SLA0044 restricted
123+
- **Nordic SDK**: Source visible but 5-Clause restricted
124+
- **Various vendor HALs**: Platform-locked licenses
125+
126+
### Mixed Proprietary/Open
127+
- Open peripheral drivers with closed protocol stacks
128+
- Basic HAL with proprietary performance libraries
129+
- Partially documented systems requiring binary supplements
130+
131+
## Legal and Practical Consequences
132+
133+
Including any proprietary vendor library means:
134+
135+
1. **License Violation**: Immediate GPL non-compliance
136+
2. **Distribution Ban**: Users cannot legally share modified firmware
137+
3. **Commercial Risk**: Products using the firmware face legal liability
138+
4. **Contributor Tainting**: All GPL contributions become legally problematic
139+
5. **Update Restrictions**: Cannot fix bugs in proprietary components
140+
141+
## Evaluation Criteria for Libraries
142+
143+
Before including any library, QMK needs to verify:
144+
- Complete source code available
145+
- GPL-compatible license (GPL, LGPL, MIT, BSD, Apache)
146+
- No hardware restrictions
147+
- No redistribution limitations
148+
- No additional legal terms
149+
- No anti-GPL clauses
150+
151+
## Policy Implementation
152+
153+
QMK Firmware maintains a strict policy:
154+
155+
1. **No proprietary libraries**: Regardless of technical workarounds
156+
2. **No binary blobs**: All code must have source available
157+
3. **No platform restrictions**: Must allow porting to any hardware
158+
4. **No additional terms**: Only GPL restrictions permitted
159+
160+
## Summary
161+
162+
There is no legally safe way to include proprietary vendor libraries in GPL firmware. This applies whether they're:
163+
- Bluetooth stacks (Nordic SoftDevice, ST Bluetooth)
164+
- Precompiled static libraries
165+
- Binary blobs with SVC interfaces
166+
- Source code with restrictive licenses
167+
- Mixed open/closed systems
168+
169+
**Technical architectures cannot overcome license obligations.**
170+
171+
QMK chooses GPL compliance, ensuring users receive all freedoms the GPL promises.

0 commit comments

Comments
 (0)