Files
qmk_firmware/assets/proprietary_libs.md.BfGoY2pl.js
T

16 lines
12 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.Cauyuiy8.js";
const __pageData = JSON.parse('{"title":"Proprietary Vendor Libraries","description":"","frontmatter":{},"headers":[],"relativePath":"proprietary_libs.md","filePath":"proprietary_libs.md","lastUpdated":null}');
const _sfc_main = { name: "proprietary_libs.md" };
const _hoisted_1 = /* @__PURE__ */ createStaticVNode('<h1 id="proprietary-vendor-libraries" tabindex="-1">Proprietary Vendor Libraries <a class="header-anchor" href="#proprietary-vendor-libraries" aria-label="Permalink to &quot;Proprietary Vendor Libraries&quot;">​</a></h1><p>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.</p><h2 id="architecture-constraints" tabindex="-1">Architecture Constraints <a class="header-anchor" href="#architecture-constraints" aria-label="Permalink to &quot;Architecture Constraints&quot;">​</a></h2><p>Firmware presents unique licensing challenges:</p><ul><li><strong>Monolithic binary</strong>: All code compiles into a single executable image</li><li><strong>No OS isolation</strong>: No operating system provides process or memory separation</li><li><strong>Shared resources</strong>: All code shares the same memory space, peripherals, and execution context</li><li><strong>Static linking</strong>: Everything is statically linked at compile time</li></ul><p>This monolithic nature means any proprietary code becomes inseparable from GPL code, creating immediate license violations.</p><h2 id="common-vendor-library-restrictions" tabindex="-1">Common Vendor Library Restrictions <a class="header-anchor" href="#common-vendor-library-restrictions" aria-label="Permalink to &quot;Common Vendor Library Restrictions&quot;">​</a></h2><p>Proprietary vendor libraries typically impose restrictions incompatible with GPL freedoms:</p><p><strong>Hardware Lock-in:</strong></p><ul><li>Library only licensed for specific vendor&#39;s chips</li><li>Cannot port firmware to alternative hardware</li><li>Examples: Nordic&#39;s and ST&#39;s chip-only clauses in their respective licenses</li></ul><p><strong>No Source Distribution:</strong></p><ul><li>Binary-only libraries without corresponding source</li><li>Precompiled static libraries (.a/.lib files)</li><li>No ability to modify or fix bugs</li><li>Examples: WCH CH582 precompiled libraries, Nordic SoftDevice</li></ul><p><strong>Redistribution Limitations:</strong></p><ul><li>Restrictions on who can distribute</li><li>Limitations on commercial use</li><li>Required permissions or fees</li></ul><p><strong>Additional Legal Terms:</strong></p><ul><li>Patent assertions beyond GPL&#39;s scope</li><li>Indemnification requirements</li><li>Jurisdiction restrictions</li><li>Explicit anti-GPL clauses</li></ul><h2 id="bluetooth-stack-licensing-examples" tabindex="-1">Bluetooth Stack Licensing Examples <a class="header-anchor" href="#bluetooth-stack-licensing-examples" aria-label="Permalink to &quot;Bluetooth Stack Licensing Examples&quot;">​</a></h2><p>Both Nordic and ST provide Bluetooth stacks under restrictive licenses:</p><p><strong>Nordic SoftDevice (under Nordic 5-clause license):</strong></p><ul><li>Binary-only Bluetooth/radio stack</li><li>License restricts to Nordic hardware</li><li>No source code available</li><li>Communicates via SVC interface (still not GPL-compatible)</li></ul><p><strong>ST&#39;s Bluetooth Stack (under SLA0044 license):</strong></p><ul><li>Explicitly forbids being subject to &quot;Open Source Terms&quot;, specifically mentioning incompatibility with the GPL</li><li>Restricted to ST microcontrollers only</li><li>Similar functional role to Nordic&#39;s SoftDevice</li></ul><p>Both represent the same fundamental problem: critical wireless functionality locked behind proprietary licenses.</p><h2 id="why-the-system-library-exception-doesn-t-apply" tabindex="-1">Why the System Library Exception Doesn&#39;t Apply <a class="header-anchor" href="#why-the-system-library-exception-doesn-t-apply" aria-label="Permalink to &quot;Why the System Library Exception Doesn&#39;t Apply&quot;">​</a></h2><p>The GPL&#39;s System Library exception <strong>cannot</strong> rescue proprietary vendor libraries.</p><h3 id="system-library-requirements" tabindex="-1">System Library Requirements <a class="header-anchor" href="#system-library-requirements" aria-label="Permalink to &quot;System Library Requirements&quot;">​</a></h3><p>The exception only covers libraries that:</p><ol><li>Are part of the &quot;normal form of packaging a Major Component&quot;</li><li>The Major Component is an OS kernel, compiler, or similar system software</li><li>Are not distributed with the application</li><li>Are not part of the application itself</li></ol><h3 id="why-vendor-libraries-fail-these-requirements" tabindex="-1">Why Vendor Libraries Fail These Requirements <a class="header-anchor" href="#why-vendor-libraries-fail-these-requirements" aria-label="Permalink to &quot;Why Vendor Libraries Fail These Requirements&quot;">​</a></h3><ol><li><strong>No operating system</strong>: Bare-metal firmware has no OS to provide system libraries</li><li><strong>Not Major Components</strong>: Hardware drivers and HALs aren&#39;t kernels or compilers</li><li><strong>Distributed together</strong>: Vendor code becomes part of the firmware binary</li><li><strong>Application-level code</strong>: Peripheral drivers are application functionality</li></ol><p>The exception covers things like Windows system DLLs or Linux glibc, not microcontroller vendor libraries or Bluetooth stacks.</p><h2 id="attempted-workarounds" tabindex="-1">Attempted Workarounds <a class="header-anchor" href="#attempted-workarounds" aria-label="Permalink to &quot;Attempted Workarounds&quot;">​</a></h2><h3 id="architectural-separation-attempts" tabindex="-1">Architectural Separation Attempts <a class="header-anchor" href="#architectural-separation-attempts" aria-label="Permalink to &quot;Architectural Separation Attempts&quot;">​</a></h3><p><strong>Supervisor Call (SVC) Interfaces:</strong></p><p>Nordic&#39;s SoftDevice uses supervisor call based APIs instead of direct linking:</p><ul><li>Fixed memory regions for proprietary code</li><li>Communication through CPU exception mechanisms</li><li>Claims of &quot;no linking&quot; between components</li></ul><p><strong>Why this fails:</strong> 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&#39;s SoftDevice and any similar architecture ST provides.</p><p><strong>Binary-Only Distributions:</strong></p><p>Multiple vendors provide precompiled libraries:</p><ul><li>WCH: Precompiled BLE stack</li><li>Nordic: Binary-only SoftDevice library</li><li>ST: Same solution as Nordic</li></ul><p><strong>Why this fails:</strong> This is classic static linking of proprietary code into GPL code. The inability to modify these libraries violates GPL&#39;s fundamental requirements.</p><h3 id="loader-based-separation" tabindex="-1">Loader-Based Separation <a class="header-anchor" href="#loader-based-separation" aria-label="Permalink to &quot;Loader-Based Separation&quot;">​</a></h3><ul><li>Write a GPL bootloader/loader</li><li>Load proprietary firmware (such as Nordic/ST Bluetooth) from external storage</li><li>Claim they&#39;re separate works</li></ul><p><strong>Problems:</strong></p><ul><li>If designed as a system, courts view as single work</li><li>Distribution patterns matter (shipped together?)</li><li>Functional interdependence suggests unity</li><li>Appears designed to circumvent GPL</li></ul><h2 id="real-world-examples" tabindex="-1">Real-World Examples <a class="header-anchor" href="#real-world-examples" aria-label="Permalink to &quot;Real-World Examples&quot;">​</a></h2><h3 id="bluetooth-wireless-stacks" tabindex="-1">Bluetooth/Wireless Stacks <a class="header-anchor" href="#bluetooth-wireless-stacks" aria-label="Permalink to &quot;Bluetooth/Wireless Stacks&quot;">​</a></h3><ul><li><strong>Nordic SoftDevice</strong>: Binary-only, SVC-interface, hardware-locked</li><li><strong>ST Bluetooth</strong>: Binary-only, license explicitly GPL-incompatible</li><li><strong>WCH CH582</strong>: Precompiled Bluetooth libraries</li></ul><h3 id="hal-and-driver-libraries" tabindex="-1">HAL and Driver Libraries <a class="header-anchor" href="#hal-and-driver-libraries" aria-label="Permalink to &quot;HAL and Driver Libraries&quot;">​</a></h3><ul><li><strong>ST HAL/LL drivers</strong>: Source available but SLA0044 restricted</li><li><strong>Nordic SDK</strong>: Source visible but 5-Clause restricted</li><li><strong>Various vendor HALs</strong>: Platform-locked licenses</li></ul><h3 id="mixed-proprietary-open" tabindex="-1">Mixed Proprietary/Open <a class="header-anchor" href="#mixed-proprietary-open" aria-label="Permalink to &quot;Mixed Proprietary/Open&quot;">​</a></h3><ul><li>Open peripheral drivers with closed protocol stacks</li><li>Basic HAL with proprietary performance libraries</li><li>Partially documented systems requiring binary supplements</li></ul><h2 id="legal-and-practical-consequences" tabindex="-1">Legal and Practical Consequences <a class="header-anchor" href="#legal-and-practical-consequences" aria-label="Permalink to &quot;Legal and Practical Consequences&quot;">​</a></h2><p>Including any proprietary vendor library means:</p><ol><li><strong>License Violation</strong>: Immediate GPL non-compliance</li><li><strong>Distribution Ban</strong>: Users cannot legally share modified firmware</li><li><strong>Commercial Risk</strong>: Products using the firmware face legal liability</li><li><strong>Contributor Tainting</strong>: All GPL contributions become legally problematic</li><li><strong>Update Restrictions</strong>: Cannot fix bugs in proprietary components</li></ol><h2 id="evaluation-criteria-for-libraries" tabindex="-1">Evaluation Criteria for Libraries <a class="header-anchor" href="#evaluation-criteria-for-libraries" aria-label="Permalink to &quot;Evaluation Criteria for Libraries&quot;">​</a></h2><p>Before including any library, QMK needs to verify:</p><ul><li>Complete source code available</li><li>GPL-compatible license (GPL, LGPL, MIT, BSD, Apache)</li><li>No hardware restrictions</li><li>No redistribution limitations</li><li>No additional legal terms</li><li>No anti-GPL clauses</li></ul><h2 id="policy-implementation" tabindex="-1">Policy Implementation <a class="header-anchor" href="#policy-implementation" aria-label="Permalink to &quot;Policy Implementation&quot;">​</a></h2><p>QMK Firmware maintains a strict policy:</p><ol><li><strong>No proprietary libraries</strong>: Regardless of technical workarounds</li><li><strong>No binary blobs</strong>: All code must have source available</li><li><strong>No platform restrictions</strong>: Must allow porting to any hardware</li><li><strong>No additional terms</strong>: Only GPL restrictions permitted</li></ol><h2 id="summary" tabindex="-1">Summary <a class="header-anchor" href="#summary" aria-label="Permalink to &quot;Summary&quot;">​</a></h2><p>There is no legally safe way to include proprietary vendor libraries in GPL firmware. This applies whether they&#39;re:</p><ul><li>Bluetooth stacks (Nordic SoftDevice, ST Bluetooth)</li><li>Precompiled static libraries</li><li>Binary blobs with SVC interfaces</li><li>Source code with restrictive licenses</li><li>Mixed open/closed systems</li></ul><p><strong>Technical architectures cannot overcome license obligations.</strong></p><p>QMK chooses GPL compliance, ensuring users receive all freedoms the GPL promises.</p>', 66);
const _hoisted_67 = [
_hoisted_1
];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", null, _hoisted_67);
}
const proprietary_libs = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
__pageData,
proprietary_libs as default
};