# Licenses and dependency replacement Generated from canonical content. Edit the sources, not this file. Release facts are staged and do not establish final archive support. Local steps require ASPL already installed; ASPL website links are supplementary online reading. ## Console licensing ASPL Console's application, helper source, translations, desktop entry and icon are licensed under MIT OR Apache-2.0. Choose either license and retain its required notices. The original [MIT license](../resources/dependencies/share/aspl-console/LICENSE-MIT), [Apache-2.0 license](../resources/dependencies/share/aspl-console/LICENSE-APACHE) and [third-party notices](../resources/dependencies/share/aspl-console/THIRD-PARTY-NOTICES) accompany this guide. These permissions allow rebuilding with modified LGPL libraries and reverse engineering to debug those modifications. Each dependency retains its own terms. This guide describes Console 0.8.0. Verify the archive against its separate release record and checksum list before use. Staged facts and retained checkout sources alone do not establish final archive compatibility or publication. Work on a recipient-owned copy of the [complete installation](docs/install.md#layout), keeping the original tree for comparison and recovery. Library replacement is optional and is not required for a first run. ## External Qt and host dependencies Console dynamically links system Qt Core, Gui and Widgets. Qt, its platform plugins and normal transitive dependencies remain external, along with the ELF loader, glibc, libm, C++ runtimes and system fonts. No Qt library or font is redistributed in the Console archive. Qt's LGPLv3, GPL or commercial conditions depend on the selected distribution route. Keep the system Qt package's notices and matching source/replacement route. Console's MIT OR Apache-2.0 license does not replace those obligations. The [Qt licensing documentation](https://doc.qt.io/qt-6/licensing.html) is supplementary online reading; the installed system package supplies its applicable legal and source material. Current builds require `Qt 6.11` or newer; the observed host uses `Qt 6.11.2`, `glibc 2.44` and `GCC 16.2.1`. This is not a portable host guarantee. IBus still needs the selected external daemon and engine. Local Compose still needs the host locale, selected Compose table and included files. These workflows do not install or restart a daemon, change desktop input profiles or supply host Compose data. See [prerequisites](docs/install.md#prerequisites). ## Matching sources, recipes and original notices The installed `share/aspl-console/source/` contains matching Console and helper source, CMake/Python controls, the Fcitx patch, pinned Fcitx/ECM archives and the nlohmann header. Its sibling `material/` contains captured dependency archives, downstream patches, packaging recipes, generated-data provenance and full notices. The [dependency inventory](../resources/dependencies/share/aspl-console/material/dependencies.json) maps component versions to runtime artifacts, sources, recipes and notices. The retained resources beside this guide preserve that `source/` and `material/` relationship and their original language and bytes. The separate release record binds these originals to the verified archive. Checkout preparation inputs alone do not establish a published source offer. Fcitx 5.1.22, libibus 1.5.34 and GLib 2.88.3 retain LGPL-2.1-or-later terms. libsystemd 261.2 retains its LGPL and embedded-code notices. The closure also includes libuv, libxkbcommon, Expat, libxcb/xcb-proto, libXau, libXdmcp, libX11, libxkbfile, xkbcomp, util-linux libraries, libffi, PCRE2/SLJIT and zlib. Preserve per-file copyright comments, permissive licenses and exceptions, including Wraphelp and the xkbcomp Bison parser exception. nlohmann retains its MIT/CC0 and source-only Apache-2.0 fallback notices. XKB, ISO, Unicode and private Compose data retain their original notices and generator attributions. Whole source archives preserve legal material beyond the selected runtime files. Use the original [resource-generation record](../resources/dependencies/share/aspl-console/material/RESOURCE-GENERATION.md) and component recipes for exact inputs and options. Recipe entries can include build tools or optional libraries that Console never loads. Source pins do not promise bit-identical reproduction of distribution binaries. Keep the unmodified sources, preserve copyright notices and identify each modification and its date. ## Editable runtime inventories `share/aspl-console/install-manifest.json` records the actual installed files, hashes, modes, CMake options and ELF dependency edges. The Fcitx and IBus runtimes under `lib/aspl-console/` each have an editable `manifest.json`. Those runtime inventories check integrity; they have no signature or embedded trust root. A compatible intentional replacement can update its inventory. Do not rewrite hashes to conceal an unexplained missing or damaged file. Preserve the public interfaces and SONAMEs used by the helpers, the complete resource layout and relative helper runpaths. Replacement does not establish compatibility with a different host, engine, client version or Qt version. Published release hashes continue to identify the original bytes, never your modified copy. ## Replace shared libraries or runtime data Rebuild the desired library from its captured source version with the recorded packaging patches and build options. Material includes IBus's `ibus-HEAD.patch`, GLib's downstream patches and GVDB source, and systemd's packaging source. Check each component's own license and recipe before distributing modifications. Replace the corresponding file in `lib/aspl-console/fcitx/lib/`, `lib/aspl-console/ibus/lib/`, or the Compose library at `lib/aspl-console/libxkbcommon.so.0`. Fcitx's Unicode module is in `fcitx/addon/libunicode.so`. Rebuilt Core/Config/Utils are under `recipient_build/fcitx-build/core/bin`; rebuild Core separately if its source changes and rebuild the Unicode module separately if modified. Retain matching data files. After intentional Fcitx replacement, use these Linux-terminal commands with your copied installation's absolute path: Linux-terminal command ```terminal console_tree=/absolute/path/to/recipient-owned/install console_source="$console_tree/share/aspl-console/source" python3 "$console_source/tools/refresh_runtime_manifest.py" \ "$console_tree/lib/aspl-console/fcitx" ``` For IBus replacements, pass `"$console_tree/lib/aspl-console/ibus"` instead. The tool updates the existing inventory's file sizes/hashes and refuses missing files, symlinks and unsafe paths. The Compose helper checks the loaded library path and permits an interface-compatible replacement there without a Fcitx/IBus inventory update. Host locale and Compose-table requirements still apply. ## Relink the static keyboard helper Use a `C++20` compiler, `CMake 3.21` or newer, `Python 3`, `patch`, `gettext` and `pkg-config`. Prepare `Qt 6.11` or newer development files with `Core`, `Gui`, `Widgets`, `Network`, `Test` and `LinguistTools`, `libuv 1.52.1`, `Expat 2.8.4`, `libxkbcommon 1.13.2`, `libxkbcommon-x11 1.13.2`, `GLib/GIO/GObject 2.88.3`, `Wayland` and `XCB` development files. The full-source configure step checks GLib even with tests disabled. The recorded host uses `GCC 16.2.1` and `Qt 6.11.2`. An installed Fcitx development package or Fcitx Qt D-Bus client is unnecessary. Start from the copied installation's matching source and material. These Linux-terminal commands configure a fresh build and prepare patched Fcitx and generated Core headers: Linux-terminal command ```terminal console_tree=/absolute/path/to/recipient-owned/install console_source="$console_tree/share/aspl-console/source" recipient_build=/absolute/path/to/new/build cmake -S "$console_source" -B "$recipient_build" -DBUILD_TESTING=OFF \ -DASPL_CONSOLE_DEPENDENCY_MATERIAL="$console_tree/share/aspl-console/material" ``` Configure verifies pinned inputs, extracts and patches Fcitx, builds Core/Config/Utils and Unicode, then stages resources. Edit `"$recipient_build/fcitx-build/fcitx5-5.1.22/src/im/keyboard/keyboard.cpp"`, preserving notices and recording the change/date. Do not re-extract Fcitx or rerun `prepare_fcitx.py` after editing. Use the [standalone relink build](../resources/dependencies/share/aspl-console/source/tools/relink-fcitx/CMakeLists.txt) with the matching Console helper source, generated headers and copied runtime: Linux-terminal command ```terminal recipient_helper=/absolute/path/to/new/helper-build cmake -S "$console_source/tools/relink-fcitx" -B "$recipient_helper" \ -DFCITX_SOURCE="$recipient_build/fcitx-build/fcitx5-5.1.22" \ -DFCITX_BUILD="$recipient_build/fcitx-build/core" \ -DFCITX_RUNTIME="$console_tree/lib/aspl-console/fcitx" cmake --build "$recipient_helper" -j2 install -m755 "$recipient_helper/aspl-console-fcitx-worker" \ "$console_tree/libexec/aspl-console/aspl-console-fcitx-worker" ``` The standalone build links the selected static keyboard code and Console helper against the copied shared libraries. Its default `RECIPIENT_RUNPATH` is `$ORIGIN/../../lib/aspl-console/fcitx/lib`, relative to `libexec/aspl-console`. For a different layout, supply `-DRECIPIENT_RUNPATH` with the corresponding literal `$ORIGIN` path. Quote it in your terminal so the shell does not expand `$ORIGIN`. A successful link alone does not prove arbitrary modifications work. ## Check the modified copy and recover Launch the copied application with your separately installed ASPL tool. Exercise the modified input route, keyboard/Unicode behavior and a normal saved-source run with line input. If a helper or resource is missing, editing must visibly pause; correct the reported setup and use [explicit Retry](docs/guides/input-methods.md#retry). If a loader failure prevents the window opening, repair the installation or host before retrying. Keep the original tree available for recovery. The existing bounded replacement checks establish their specific modified-keyboard and libxkbcommon behavior, not arbitrary edits or universal support. After intentional replacements, regenerate the local install inventory using the copied installation, the matching CMake build and its actual directory options: Linux-terminal command ```terminal python3 "$console_source/tools/install_inventory.py" \ --install "$console_tree" --build "$recipient_build" \ --bindir bin --libdir lib \ --libexecdir libexec --datadir share ``` This needs Python 3 and `readelf`. Verify the modified tree locally with the matching package tool; retain your modification records and fresh hashes. Maintainers prepare and verify a release separately through the [Contributing](contributing.md) entry point. This recipient workflow neither publishes an archive nor completes a release source offer.