172 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 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:
 | |
| 1. Are part of the "normal form of packaging a Major Component"
 | |
| 2. The Major Component is an OS kernel, compiler, or similar system software
 | |
| 3. Are not distributed with the application
 | |
| 4. Are not part of the application itself
 | |
| 
 | |
| ### Why Vendor Libraries Fail These Requirements
 | |
| 
 | |
| 1. **No operating system**: Bare-metal firmware has no OS to provide system libraries
 | |
| 2. **Not Major Components**: Hardware drivers and HALs aren't kernels or compilers
 | |
| 3. **Distributed together**: Vendor code becomes part of the firmware binary
 | |
| 4. **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:
 | |
| 
 | |
| 1. **License Violation**: Immediate GPL non-compliance
 | |
| 2. **Distribution Ban**: Users cannot legally share modified firmware
 | |
| 3. **Commercial Risk**: Products using the firmware face legal liability
 | |
| 4. **Contributor Tainting**: All GPL contributions become legally problematic
 | |
| 5. **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:
 | |
| 
 | |
| 1. **No proprietary libraries**: Regardless of technical workarounds
 | |
| 2. **No binary blobs**: All code must have source available
 | |
| 3. **No platform restrictions**: Must allow porting to any hardware
 | |
| 4. **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.
 |