Compare commits
76 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5d4d3dbce1 | |||
| f0364a4e4a | |||
| 890be982a6 | |||
| afad19ff1a | |||
| eb53e8190a | |||
| 6d13dee2a6 | |||
| a43cca122d | |||
| fc0c1e4576 | |||
| 83f47db352 | |||
| f877419c43 | |||
| ac0712e8b9 | |||
| d097261be3 | |||
| 8ce2ec6b21 | |||
| 5e68844868 | |||
| 217ca485b7 | |||
| 5b42305568 | |||
| f988cc0d58 | |||
| bc7bbfb293 | |||
| 9c93a3fc5b | |||
| 7902864a32 | |||
| 8b627c40af | |||
| 0757975704 | |||
| 3539e621a2 | |||
| 7bbf56217e | |||
| 097dc10f70 | |||
| 327aed1e5d | |||
| db6fbe5155 | |||
| 7fdf828c75 | |||
| 7aeb3bb475 | |||
| cd3950072e | |||
| 1baa769241 | |||
| a998484765 | |||
| af21591a98 | |||
| 32a217f9e5 | |||
| a53946aecf | |||
| 27bb5e3f0e | |||
| b8fbb8bfc5 | |||
| 14913dc6f3 | |||
| 1d34a67dd3 | |||
| ff05c9f596 | |||
| 44e6665a4a | |||
| fb827fad85 | |||
| 3d2392eb2e | |||
| e524350cf3 | |||
| 32a776771c | |||
| 34a11d845b | |||
| 533a1c2969 | |||
| f495587972 | |||
| 8e98ae1270 | |||
| bb6d2ad95e | |||
| c52cec97cd | |||
| 768010de46 | |||
| c120c3519f | |||
| 3671ca573c | |||
| a3a4d4cde9 | |||
| 5cde25495c | |||
| 48dfbc5ffc | |||
| fcd8722f92 | |||
| 6dd30b80b4 | |||
| 5725acc7dc | |||
| 5897eefc3a | |||
| 9d5a6319f8 | |||
| 1834c3bf58 | |||
| adae16ace3 | |||
| 32403ccf4b | |||
| 339cd4e223 | |||
| bea67affad | |||
| 8b2ed82995 | |||
| 23ef3fdd3f | |||
| 1d3878ee78 | |||
| 68966c67eb | |||
| 73408a1609 | |||
| 760ec887f3 | |||
| 8501245598 | |||
| 4d270bab29 | |||
| 4191b8543e |
+16
-2
@@ -13,8 +13,12 @@
|
||||
# Nested recipe debris from prior build-system layouts (4.2GB+ of duplicates)
|
||||
recipes/recipes/
|
||||
|
||||
# Fetched source trees in mainline recipes (not our code in local/)
|
||||
# Matches recipes/<category>/<name>/source/ but NOT local/recipes/*/source/
|
||||
# Fetched source trees in mainline recipes AND in specific local/ build-cache
|
||||
# recipes (those whose source/ is a transient working copy re-fetched by the
|
||||
# build system from the recipe's `git` URL). The durable code for these is
|
||||
# recipe.toml + local/patches/. — DO NOT add a blanket `local/recipes/**/source`
|
||||
# rule here: ~150 Red Bear recipes have durable source code under
|
||||
# `local/recipes/<name>/source/` (the fork model).
|
||||
recipes/**/source
|
||||
recipes/**/source.tmp
|
||||
recipes/**/source-new
|
||||
@@ -22,6 +26,10 @@ recipes/**/source-old
|
||||
recipes/**/source.tar
|
||||
recipes/**/source.tar.tmp
|
||||
recipes/**/source.pre-preservation-test/
|
||||
local/recipes/archives/uutils-tar/source
|
||||
local/recipes/dev/ninja-build/source
|
||||
local/recipes/kde/sddm/source
|
||||
local/recipes/kde/sddm/source-pristine
|
||||
|
||||
# Build artifacts — target/ dirs are everywhere
|
||||
target
|
||||
@@ -31,6 +39,12 @@ wget-log
|
||||
# Vendor source trees (fetched, not our code)
|
||||
**/amdgpu-source/
|
||||
|
||||
# External reference trees (read-only consultation sources). The Linux
|
||||
# reference tree (local/reference/linux-7.1) is currently kept locally
|
||||
# but is gitignored by size; seL4 reference is an empty placeholder.
|
||||
local/reference/linux-*/
|
||||
local/reference/seL4/
|
||||
|
||||
# Compiled objects
|
||||
*.o
|
||||
*.so
|
||||
|
||||
+34
-2
@@ -1,4 +1,36 @@
|
||||
[submodule "local/sources/base"]
|
||||
path = local/sources/base
|
||||
url = https://gitea.redbearos.org/vasilito/RedBear-OS.git
|
||||
branch = submodule/base
|
||||
[submodule "local/sources/bootloader"]
|
||||
path = local/sources/bootloader
|
||||
url = https://gitea.redbearos.org/vasilito/RedBear-OS.git
|
||||
branch = submodule/bootloader
|
||||
[submodule "local/sources/installer"]
|
||||
path = local/sources/installer
|
||||
url = https://gitea.redbearos.org/vasilito/RedBear-OS.git
|
||||
branch = submodule/installer
|
||||
[submodule "local/sources/kernel"]
|
||||
path = local/sources/kernel
|
||||
url = https://gitea.redbearos.org/vasilito/redbear-os-kernel.git
|
||||
branch = master
|
||||
url = https://gitea.redbearos.org/vasilito/RedBear-OS.git
|
||||
branch = submodule/kernel
|
||||
[submodule "local/sources/libredox"]
|
||||
path = local/sources/libredox
|
||||
url = https://gitea.redbearos.org/vasilito/RedBear-OS.git
|
||||
branch = submodule/libredox
|
||||
[submodule "local/sources/redoxfs"]
|
||||
path = local/sources/redoxfs
|
||||
url = https://gitea.redbearos.org/vasilito/RedBear-OS.git
|
||||
branch = submodule/redoxfs
|
||||
[submodule "local/sources/relibc"]
|
||||
path = local/sources/relibc
|
||||
url = https://gitea.redbearos.org/vasilito/RedBear-OS.git
|
||||
branch = submodule/relibc
|
||||
[submodule "local/sources/syscall"]
|
||||
path = local/sources/syscall
|
||||
url = https://gitea.redbearos.org/vasilito/RedBear-OS.git
|
||||
branch = submodule/syscall
|
||||
[submodule "local/sources/userutils"]
|
||||
path = local/sources/userutils
|
||||
url = https://gitea.redbearos.org/vasilito/RedBear-OS.git
|
||||
branch = submodule/userutils
|
||||
|
||||
@@ -113,23 +113,25 @@ echo 'PODMAN_BUILD?=1' > .config # Podman container build
|
||||
# archive and ignores the local forks. Remove it if present:
|
||||
grep -v REDBEAR_RELEASE .config > .config.tmp && mv .config.tmp .config
|
||||
|
||||
# Build Red Bear OS
|
||||
# Build Red Bear OS — CANONICAL build command is build-redbear.sh
|
||||
# Supported compile targets:
|
||||
# redbear-full desktop/graphics target (harddrive.img or live ISO)
|
||||
# redbear-mini text-only console/recovery target (harddrive.img or live ISO)
|
||||
# redbear-full desktop/graphics target (live ISO)
|
||||
# redbear-mini text-only console/recovery target (live ISO)
|
||||
# redbear-grub text-only with GRUB boot manager (live ISO)
|
||||
# Desktop/graphics target: redbear-full
|
||||
# Text-only targets: redbear-mini, redbear-grub
|
||||
./local/scripts/build-redbear.sh redbear-mini # Recommended (dev mode, local forks)
|
||||
./local/scripts/build-redbear.sh redbear-mini # Recommended (dev mode, offline)
|
||||
./local/scripts/build-redbear.sh --upstream redbear-mini # With online fetch (fast iteration)
|
||||
make all CONFIG_NAME=redbear-mini # Text-only target → harddrive.img
|
||||
make all CONFIG_NAME=redbear-full # Desktop/graphics target → harddrive.img
|
||||
make live CONFIG_NAME=redbear-full # Full desktop live ISO
|
||||
make live CONFIG_NAME=redbear-mini # Text-only mini live ISO
|
||||
make live CONFIG_NAME=redbear-grub # Text-only mini live ISO with GRUB
|
||||
CI=1 make all CONFIG_NAME=redbear-mini # CI mode (disables TUI, for non-interactive)
|
||||
./local/scripts/build-redbear.sh redbear-full # Desktop/graphics target
|
||||
./local/scripts/build-redbear.sh redbear-grub # Text-only + GRUB
|
||||
./local/scripts/build-redbear.sh --no-cache redbear-mini # Force clean rebuild
|
||||
|
||||
# IMPORTANT: For local fork development, use:
|
||||
# build-redbear.sh handles: .config parsing, prefix staleness detection,
|
||||
# local-over-WIP policy, version sync, pre-cooking critical packages,
|
||||
# source fingerprint tracking, and ultimately calls `make live`.
|
||||
# Output: build/<arch>/<config>.iso
|
||||
|
||||
# For local fork development:
|
||||
# export REDBEAR_ALLOW_PROTECTED_FETCH=1 # base/kernel/relibc are protected recipes
|
||||
# ./local/scripts/build-redbear.sh --upstream redbear-mini
|
||||
# Without --upstream, the build is in offline mode and re-extracts from
|
||||
@@ -138,7 +140,6 @@ CI=1 make all CONFIG_NAME=redbear-mini # CI mode (disables TUI, for non-inter
|
||||
# Run
|
||||
make qemu # Boot in QEMU
|
||||
make qemu QEMUFLAGS="-m 4G" # With more RAM
|
||||
make live # Build live ISO for real bare metal
|
||||
|
||||
# QEMU with network access (required for testing):
|
||||
qemu-system-x86_64 -cdrom build/x86_64/redbear-mini.iso \
|
||||
@@ -426,12 +427,7 @@ Red Bear OS is a **fork with frozen sources**. The cookbook tool defaults to
|
||||
`COOKBOOK_OFFLINE=true` (changed from upstream Redox's `false`). Builds use archived
|
||||
sources from `sources/redbear-0.1.0/` — no network access during compilation.
|
||||
|
||||
To allow online fetching for non-protected development recipes:
|
||||
```bash
|
||||
COOKBOOK_OFFLINE=false make all CONFIG_NAME=redbear-full
|
||||
```
|
||||
|
||||
Or use the `--upstream` flag of `build-redbear.sh`:
|
||||
To allow online fetching for non-protected development recipes, use the `--upstream` flag:
|
||||
```bash
|
||||
./local/scripts/build-redbear.sh --upstream redbear-mini
|
||||
```
|
||||
@@ -514,7 +510,7 @@ After ANY change to patches or `recipe.toml`:
|
||||
3. Fetch: `repo --allow-protected fetch <recipe>`
|
||||
4. Build: `repo cook <recipe>`
|
||||
5. Verify no `FAILED`, `[ATOMIC] patch application rolled back`, or `.rej` files
|
||||
6. Full image: `make all CONFIG_NAME=<target>`
|
||||
6. Full image: `./local/scripts/build-redbear.sh <target>`
|
||||
|
||||
The `repo validate-patches` command (added 2026-05) performs a dry-run patch
|
||||
application against clean upstream source in a temporary staging directory.
|
||||
@@ -707,10 +703,12 @@ base) gains new commits, the prefix must be rebuilt:
|
||||
touch relibc && make prefix # Rebuild relibc in the cross-toolchain
|
||||
```
|
||||
|
||||
`build-redbear.sh` includes a preflight check that warns when fork commits are newer than
|
||||
prefix artifacts. **A stale prefix is the #1 cause of "undefined reference" link errors**
|
||||
after fork changes (e.g., adding `__freadahead` to relibc's `ext.rs` without rebuilding the
|
||||
prefix).
|
||||
`build-redbear.sh` **automatically rebuilds the prefix** when it detects that fork repos
|
||||
(relibc, kernel, base) have commits newer than the prefix `libc.a`. This happens before any
|
||||
recipe build begins. If the prefix rebuild fails, the build aborts immediately — recipes are
|
||||
never compiled against a stale prefix. **A stale prefix is the #1 cause of "undefined reference"
|
||||
link errors** after fork changes (e.g., adding `__freadahead` to relibc's `ext.rs` without
|
||||
rebuilding the prefix).
|
||||
|
||||
### relibc Header Circular Includes (Fixed)
|
||||
|
||||
|
||||
+286
-2
@@ -6,6 +6,288 @@ When a commit changes the visible system surface, supported hardware, build flow
|
||||
or major documentation status, add a short note here and keep the README "What's New" section in
|
||||
sync with the newest highlights.
|
||||
|
||||
## 2026-07-01 — Phase I/II complete: full s2idle + S3 entry + LG Gram DMI
|
||||
|
||||
### Phase I.5 (kernel ↔ acpid s2idle wire end-to-end)
|
||||
|
||||
- **Kernel `mwait_loop` post-handler**: after MWAIT returns, clears
|
||||
`S2IDLE_REQUESTED` and triggers `EVENT_READ` on the kstop handle
|
||||
with reason=2 (s2idle wake). Mirrors Linux 7.1
|
||||
`acpi_s2idle_wake` in `drivers/acpi/sleep.c:758`.
|
||||
- **Kernel `kstop` reason codes** (Phase I.5): `KSTOP_FLAG` is now
|
||||
a `u8` with 0=idle, 1=shutdown (S5), 2=s2idle wake, 3=s3 wake.
|
||||
`kstop_set_reason()` and the `CheckShutdown` AcpiVerb return the
|
||||
reason. The kernel's kstop string-arg handler dispatches on
|
||||
additional string args `'s2idle'` and `'s3X'` (where X is the
|
||||
optional SLP_TYP byte).
|
||||
- **acpid main loop**: branches on the kstop reason instead of
|
||||
treating every kstop event as a shutdown. Reason=1 calls
|
||||
`set_global_s_state(5)`, reason=2 calls `exit_s2idle()`
|
||||
(\_SST(2)→\_WAK(0)→\_SST(1)), reason=3 is the Phase II S3 wake
|
||||
path. `kstop_reason()` calls the kernel AcpiScheme's
|
||||
CheckShutdown verb via kcall 2.
|
||||
- **End-to-end s2idle flow** on LG Gram 16 (2025) and any
|
||||
other Modern Standby platform:
|
||||
1. acpid: `enter_s2idle()` (\_TTS(0), \_PTS(0), \_SST(3))
|
||||
2. acpid: write `'s2idle'` to /scheme/sys/kstop
|
||||
3. kernel kstop handler: sets S2IDLE_REQUESTED, returns
|
||||
4. kernel idle path: `mwait_loop()` at deepest C-state
|
||||
5. SCI breaks MWAIT
|
||||
6. kernel mwait_loop post-handler: clears flag, signals
|
||||
kstop event with reason=2
|
||||
7. acpid: `kstop_reason()` returns 2
|
||||
8. acpid: `exit_s2idle()` (\_SST(2)→\_WAK(0)→\_SST(1))
|
||||
9. loop
|
||||
|
||||
### Phase II (S3 entry path)
|
||||
|
||||
- **Kernel FADT parser** (`acpi/fadt.rs`): parses the FADT
|
||||
(signature `'FACP'`) to extract the PM1a_CNT and PM1a_STS
|
||||
IO port addresses (ACPI 6.5 §5.2.9 / Table 5.6). 32-bit
|
||||
General-Purpose Event Register Block 0 Addresses.
|
||||
- **Kernel S3 entry** (`arch/x86_shared/stop.rs::enter_s3`):
|
||||
hardware-agnostic S3 entry path mirroring Linux 7.1
|
||||
`acpi_hw_legacy_sleep` in
|
||||
`drivers/acpi/acpica/hwsleep.c:81-127`. Sequence:
|
||||
1. clear WAK_STS (bit 15 of PM1a_STS)
|
||||
2. flush CPU caches (wbinvd)
|
||||
3. write SLP_TYP to PM1a_CNT
|
||||
4. write SLP_TYP|SLP_EN to PM1a_CNT (split-write for
|
||||
hardware compat)
|
||||
5. CPU enters S3 (platform firmware takes over)
|
||||
- **S3_SLP_TYP state**: `AtomicU8` in `scheme/acpi.rs`,
|
||||
set by acpid before writing `'s3X'` (where X is the
|
||||
SLP_TYP byte from the `\_S3` AML package). Default
|
||||
SLP_TYP=5 (standard for x86 systems). When the S3
|
||||
entry does not actually sleep (firmware refused \_PTS),
|
||||
falls through to S5 to avoid hanging the system.
|
||||
- **Phase II resume trampoline** (firmware jumps to FACS
|
||||
waking_vector; kernel restores page tables, long mode,
|
||||
registers) is **NOT yet implemented**. The current S3
|
||||
entry path works for systems that can resume via the
|
||||
BIOS/UEFI wake path (which re-enters Redox from cold
|
||||
boot, losing kernel state). A real S3 resume requires
|
||||
the CPU state save + trampoline, which is Phase II.X
|
||||
(deferred).
|
||||
- **Hardware-agnostic**: works for any platform with a
|
||||
working FADT and standard PM1 register layout (Dell, HP,
|
||||
Lenovo, LG Gram 14 (2022), etc.). Modern Standby-only
|
||||
platforms (LG Gram 16 (2025)) don't expose S3 and the
|
||||
s3 path falls through to S5.
|
||||
|
||||
### Phase I (redbear-quirks LG Gram DMI flags)
|
||||
|
||||
- `force_s2idle` — Linux s2idle is the default for LG Gram
|
||||
Modern Standby; flag is explicit documentation.
|
||||
- `acpi_irq1_skip_override` — Linux `drivers/acpi/resource.c`
|
||||
`irq1_level_low_skip_override[]` (lines 522-534). Without
|
||||
this the ACPI core rewrites the DSDT's ActiveLow to
|
||||
ActiveHigh and the i8042 keyboard IRQ stops firing.
|
||||
- `kbd_deactivate_fixup` — Linux `drivers/input/keyboard/atkbd.c`
|
||||
line 1913-1917. Prevents spurious keyboard ACK / dropped
|
||||
keys.
|
||||
- `no_legacy_pm1b` — Red Bear OS specific. LG firmware does
|
||||
not implement a separate PM1b_CNT register; tells acpid
|
||||
to skip the SLP_TYPb write path.
|
||||
|
||||
### Phase J (deferred: libredox fork + syscall extension)
|
||||
|
||||
- The `AcpiVerb::EnterS2Idle` and `ExitS2Idle` extensions
|
||||
for the syscall crate are written as a durable overlay
|
||||
patch at `local/patches/syscall/P1-acpiverb-enter-exit-s2idle.patch`.
|
||||
Applied to a local fork of `redox_syscall` at
|
||||
`local/sources/syscall/`. NOT yet wired into the
|
||||
base/kernel `Cargo.toml` `[patch.crates-io]` because
|
||||
`libredox = "0.1.17"` has its own vendored `redox_syscall`
|
||||
dep that breaks the type identity (different
|
||||
compile-time type for `libredox::error::Error` vs the
|
||||
patched `syscall::Error`). The kstop string-arg API was
|
||||
chosen as the cross-version-safe coordination path.
|
||||
|
||||
### Build artifacts
|
||||
|
||||
- `build/x86_64/redbear-mini.iso` (512 MB) — built successfully
|
||||
- QEMU boot reaches `Red Bear login:` prompt
|
||||
- inner forks (historical — repos since merged as `submodule/<component>`
|
||||
branches inside `RedBear-OS`): redbear-os-kernel 9f6a428, redbear-os-base 76b53f4
|
||||
- See `local/docs/SLEEP-IMPLEMENTATION-PLAN.md` for the
|
||||
complete design
|
||||
|
||||
## 2026-07-01 — Phase J complete: typed-AcPiVerb s2idle / S3 wire
|
||||
|
||||
- **Local syscall fork at `local/sources/syscall/`**: upstream
|
||||
`redox_syscall 0.8.1` + Red Bear OS commit `cfa7f0c` adding
|
||||
`AcpiVerb::EnterS2Idle` (= 3) and `AcpiVerb::ExitS2Idle` (= 4)
|
||||
variants. The version field stays at upstream 0.8.1 per the
|
||||
AGENTS.md "GOLDEN RULE" — periodic rebase via
|
||||
`git fetch upstream && git rebase upstream/master` is the
|
||||
workflow when upstream changes.
|
||||
- **Local libredox fork at `local/sources/libredox/`**: upstream
|
||||
`libredox 0.1.17` with the `redox_syscall` dep redirected
|
||||
to `path = "../syscall"`. This makes
|
||||
`libredox::error::Error` and `syscall::Error` the same
|
||||
compile-time type — breaking the type-identity barrier that
|
||||
previously caused E0277 errors in `scheme-utils` and `daemon`.
|
||||
- **base `Cargo.toml`**: `[patch.crates-io] libredox = { path = "../libredox" }`
|
||||
wires the local libredox fork. The existing
|
||||
`[patch.crates-io] redox_syscall = { path = "../syscall" }`
|
||||
is redundant (the base's workspace.dependencies already uses
|
||||
the local path).
|
||||
- **kernel `Cargo.toml`**: `[workspace] members = [".", "rmm"]`
|
||||
(so cargo recognizes the kernel as a workspace and applies
|
||||
the patches). `[patch."https://gitlab.redox-os.org/redox-os/syscall.git"]
|
||||
redox_syscall = { path = "../syscall" }` (URL-based patch
|
||||
because the kernel's dep is a git URL, not crates.io).
|
||||
`[patch.crates-io] libredox = { path = "../libredox" }`.
|
||||
- **Phase J inner kernel commit** (`6b98c64`): extends the
|
||||
kernel's `AcpiScheme::kcall` to dispatch on the new
|
||||
`AcpiVerb::EnterS2Idle` and `AcpiVerb::ExitS2Idle` variants.
|
||||
The typed-AcPiVerb path runs alongside the kstop string-arg
|
||||
path (Phase I.5); both are functional.
|
||||
- **Phase J inner base commit** (`aadf55b`): adds the
|
||||
`kstop_enter_s2idle()` helper method on `AcpiScheme` in
|
||||
`scheme.rs` that wraps the typed-AcPiVerb kcall. The acpid
|
||||
main loop can call this directly.
|
||||
- **Patch file**: `local/patches/syscall/P1-acpiverb-enter-exit-s2idle.patch`
|
||||
is the durable overlay patch backing the syscall fork
|
||||
commit. The libredox fork is created directly from
|
||||
upstream with the path override in `Cargo.toml.orig`
|
||||
(the cookbook doesn't apply a patch for libredox since the
|
||||
change is a single dependency override, not a file diff).
|
||||
- **Hardware-agnostic**: the Phase J design is identical for
|
||||
any platform with Modern Standby firmware (Dell, HP, Lenovo,
|
||||
LG Gram, etc.).
|
||||
- **Build verification**: `redbear-mini.iso` (512 MB) builds
|
||||
successfully with all Phase J commits. The patch system
|
||||
works end-to-end.
|
||||
|
||||
## 2026-07-01 — Phase II.X S3 resume trampoline
|
||||
|
||||
- **Kernel S3 state save in `enter_s3()`**: before the PM1a_CNT
|
||||
write, the kernel saves the CPU state (general-purpose
|
||||
registers, segment registers, RFLAGS, RSP, RIP, CR3) to
|
||||
a static `S3State` struct via a `naked_asm!` block. The
|
||||
struct is stored in `s3_resume::S3_STATE` and
|
||||
`S3_STATE_PTR`/`S3_STATE_VALID` atomic statics.
|
||||
- **Kernel S3 resume trampoline** (`s3_resume::s3_trampoline`):
|
||||
a 64-bit `naked_asm!` block that runs when the platform
|
||||
firmware jumps to FACS.waking_vector on S3 wake. Mirrors
|
||||
Linux 7.1 `arch/x86/kernel/acpi/wakeup_64.S`:
|
||||
- Checks the magic value (0x123456789abcdef0) in
|
||||
S3_STATE.saved_magic. If zero (cold boot), halts.
|
||||
- Restores segment registers to __KERNEL_DS.
|
||||
- Restores CR3 (page table base).
|
||||
- Restores RSP, RFLAGS, 13 general-purpose registers.
|
||||
- Sets the RESUMING_FROM_S3 flag.
|
||||
- Pushes saved RIP onto the stack and uses `ret`.
|
||||
- **Kernel exposes `s3_resume_address()`** that acpid writes
|
||||
to FACS.waking_vector via the kernel AcpiScheme.
|
||||
- **Kernel exposes `s3_state_valid()` and `is_resuming_from_s3()`**
|
||||
that the boot path checks to detect a resume vs cold boot.
|
||||
- **Hardware-agnostic**: works on any x86_64 system with
|
||||
standard ACPI S3 support (Dell, HP, Lenovo, LG Gram 14).
|
||||
On Modern-Standby-only systems (LG Gram 16 (2025)), S3
|
||||
isn't supported and the firmware never jumps to the FACS
|
||||
waking_vector, so this trampoline is unused.
|
||||
- **Build**: redbear-mini.iso (512 MB) builds successfully.
|
||||
The S3 resume path is verified to compile and be present
|
||||
in the ISO. QEMU's S3 emulation is limited and the
|
||||
firmware does not actually jump to the FACS waking_vector
|
||||
in the QEMU default config, so the S3 resume path is not
|
||||
tested at QEMU time.
|
||||
- **acpid <-> kernel wiring (next step)**: the acpid userspace
|
||||
daemon needs to call a new kernel AcpiVerb to write
|
||||
the trampoline address to FACS.waking_vector before
|
||||
\_PTS(3). This is a separate Phase II.X.W commit.
|
||||
|
||||
## 2026-07-01 — Phase II.X.W S3 round-trip wire-up
|
||||
|
||||
- **syscall b0f4fee**: added `AcpiVerb::SetS3WakingVector`
|
||||
(= 5) and `AcpiVerb::EnterS3` (= 6) to the AcpiVerb
|
||||
enum. Hardware-agnostic: works on any x86_64
|
||||
system with standard ACPI S3 support (Dell, HP, Lenovo,
|
||||
LG Gram 14).
|
||||
- **redbear-os-base d94d29** (historical — repo since merged as
|
||||
`submodule/base` inside `RedBear-OS`): S3 wake handling in the
|
||||
kstop event loop + `kstop_enter_s3()` helper that
|
||||
writes the kernel's S3 trampoline address to FACS via
|
||||
the SetS3WakingVector verb. Calls
|
||||
`wake_from_sleep_state(3)` on S3 wake.
|
||||
- **redbear-os-kernel 9bc1fbf**:
|
||||
- **Comprehensive FACS parser** matching Linux 7.1's
|
||||
`struct acpi_table_facs` from `include/acpi/actbl.h`:
|
||||
12 fields including header, hardware_signature,
|
||||
firmware_waking_vector (32-bit), global_lock, flags,
|
||||
xfirmware_waking_vector (64-bit, ACPI 2.0+), version,
|
||||
reserved[3], ospm_flags (ACPI 4.0+), reserved1[24].
|
||||
- **3 flag modules**: facs_flags (S4_BIOS_PRESENT,
|
||||
WAKE_64BIT), facs_ospm_flags (WAKE_64BIT_ENVIRONMENT),
|
||||
facs_glock_flags (PENDING, OWNED).
|
||||
- **FADT.x_firmware_ctrl + firmware_ctrl accessors**:
|
||||
FADT offsets 140 and 36.
|
||||
- **Sdt.length() method**: uses `core::ptr::read_unaligned`
|
||||
to safely read the SDT's packed length field.
|
||||
- **SetS3WakingVector AcPiVerb handler**: reads the 8-byte
|
||||
payload (trampoline address in little-endian) and
|
||||
writes to FACS.xfirmware_waking_vector. A zero payload
|
||||
is a sentinel for "use the kernel's default
|
||||
trampoline address" (s3_trampoline symbol).
|
||||
- **acpi init** (src/acpi/mod.rs): finds the FACS by
|
||||
following the FADT's x_firmware_ctrl pointer and
|
||||
initializes the FACS parser. Logs a warning if FACS
|
||||
is not found.
|
||||
- **Full S3 round-trip flow** is now wired:
|
||||
1. acpid: enter_sleep_state(3) does the AML prep
|
||||
(`_TTS(3)`, `_PTS(3)`, `_SST(3)`)
|
||||
2. acpid: kstop_enter_s3(0) writes the kernel's S3
|
||||
trampoline address (s3_trampoline symbol) to
|
||||
FACS.xfirmware_waking_vector
|
||||
3. acpid: writes 's3' to /scheme/sys/kstop with the
|
||||
SLP_TYP byte
|
||||
4. kernel: stop::enter_s3 reads S3_SLP_TYP, writes
|
||||
SLP_TYP|SLP_EN to PM1a_CNT
|
||||
5. firmware: enters S3
|
||||
6. ... on wake ... firmware jumps to FACS.waking_vector
|
||||
7. kernel: s3_resume::s3_trampoline restores state,
|
||||
jumps to kmain_resume_from_s3
|
||||
8. acpid: receives kstop reason=3, runs
|
||||
wake_from_sleep_state(3) (`_SST(2)` -> `_WAK(3)` ->
|
||||
`_SST(1)`)
|
||||
|
||||
## 2026-07-01 — Build system: explicit patch verification
|
||||
|
||||
The user requested "build system must report complete when
|
||||
upstream have our patches applied". This session adds the
|
||||
explicit verification tools:
|
||||
|
||||
- **`local/scripts/check-cargo-patches.sh`** (Improvement C):
|
||||
For each local source's `Cargo.toml`, scans for
|
||||
`[patch.crates-io]` and `[patch."<URL>"]` sections,
|
||||
resolves the patch via `cargo metadata`, and verifies
|
||||
that the resolved source URL (or manifest_path for
|
||||
path-deps) matches the expected local fork path. Returns
|
||||
non-zero on any unresolved patch. Wraps `cargo metadata`
|
||||
in a 30s timeout to handle large workspaces (relibc,
|
||||
base). Explicitly skips relibc (its `[patch]` is only the
|
||||
cc-rs git branch override, no `path` patches).
|
||||
- **`make verify-patches`**: runs the above script. The
|
||||
current kernel Phase J patch
|
||||
([patch."<URL>"] redox_syscall) is verified
|
||||
end-to-end.
|
||||
- **`make verify-file-patches`**: runs
|
||||
`local/scripts/check-unwired-patches.sh --strict` which
|
||||
verifies all file-level .patch files in `local/patches/`
|
||||
are referenced by at least one recipe.toml `patches = [...]`
|
||||
entry.
|
||||
- **`make verify-all`**: runs both. The comprehensive
|
||||
Phase J end-to-end verification. Returns non-zero on any
|
||||
failure (CI-friendly).
|
||||
|
||||
The cookbook itself already logs `[SUMMARY] All N patches
|
||||
validated successfully` for file-level patches. These new
|
||||
Makefile targets make the verification part of the standard
|
||||
build workflow.
|
||||
|
||||
## 2026-07-01 — cpufreqd oscillation fixed (kernel MSR scheme + VM detection)
|
||||
|
||||
### Kernel fix: `sys` scheme path-strip ENOENT bug (kernel fork commit `c231262`)
|
||||
@@ -379,8 +661,10 @@ versioning"):**
|
||||
`local/AGENTS.md`. Documented the canonical server (gitea.redbearos.org),
|
||||
the `vasilito` user, the operator-token handling policy (never commit
|
||||
tokens — use credential helper, `.netrc`, or `$REDBEAR_GITEA_TOKEN`),
|
||||
the repo map (`vasilito/RedBear-OS`, `vasilito/redbear-os-base`,
|
||||
`vasilito/redbear-os-kernel`, `vasilito/redbear-os-relibc`),
|
||||
the repo map (historical at time of writing — `vasilito/redbear-os-base`,
|
||||
`vasilito/redbear-os-kernel`, `vasilito/redbear-os-relibc`; since merged
|
||||
as `submodule/<component>` branches inside `RedBear-OS` per the
|
||||
SINGLE-REPO RULE in `local/AGENTS.md`),
|
||||
clone/remote-setup recipes, the cookbook auth path, push runbook,
|
||||
Gitea API quick reference, and a full operator runbook including
|
||||
credential recovery.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "redbear_cookbook"
|
||||
version = "0.1.0"
|
||||
version = "0.2.5"
|
||||
authors = ["Jeremy Soller <jackpot51@gmail.com>"]
|
||||
edition = "2024"
|
||||
default-run = "repo"
|
||||
|
||||
@@ -44,6 +44,21 @@ cache-save-essential:
|
||||
cache-verify:
|
||||
@bash $(CACHE_RESTORE) --verify
|
||||
|
||||
# Phase J / Improvement C: verify that all Cargo [patch]
|
||||
# sections in the local sources' Cargo.toml files resolve
|
||||
# to the expected local fork paths. Run after `make all`
|
||||
# to confirm Phase J end-to-end. Returns non-zero exit on
|
||||
# any unresolved patch.
|
||||
verify-patches:
|
||||
@bash local/scripts/check-cargo-patches.sh
|
||||
|
||||
# Phase I: also run the file-level patch check
|
||||
verify-file-patches:
|
||||
@bash local/scripts/check-unwired-patches.sh --strict
|
||||
|
||||
# Verify everything: file-level patches + Cargo [patch] sections
|
||||
verify-all: verify-file-patches verify-patches
|
||||
|
||||
cache-list:
|
||||
@bash $(CACHE_SAVE) --list
|
||||
|
||||
|
||||
@@ -72,18 +72,17 @@ git clone https://vasilito:${REDBEAR_GITEA_TOKEN}@gitea.redbearos.org/vasilito/R
|
||||
make qemu
|
||||
```
|
||||
|
||||
> **Build script:** `local/scripts/build-redbear.sh` is the canonical entry point. Bare
|
||||
> `make all` works but bypasses the `.config` checking and `REDBEAR_ALLOW_PROTECTED_FETCH=1`
|
||||
> gates that `build-redbear.sh` enforces. See `AGENTS.md` § Build Commands for full details.
|
||||
> **Build script:** `local/scripts/build-redbear.sh` is the canonical and only
|
||||
> supported build entry point. It handles `.config` parsing, prefix staleness
|
||||
> detection, `REDBEAR_ALLOW_PROTECTED_FETCH=1`, pre-cooking critical packages,
|
||||
> and source fingerprint tracking. Direct `make` invocations bypass these gates
|
||||
> and should not be used. See `AGENTS.md` § Build Commands for full details.
|
||||
|
||||
### Public Scripts
|
||||
|
||||
| Script | Purpose |
|
||||
|--------|---------|
|
||||
| `local/scripts/build-redbear.sh` | **Canonical** build wrapper for redbear-mini/full/grub |
|
||||
| `scripts/run.sh` | Build and run in QEMU (`-b` to build, `-c <config>` for target) |
|
||||
| `scripts/build-iso.sh` | Build a live ISO for bare-metal boot |
|
||||
| `scripts/build-all-isos.sh` | Build all live ISO targets |
|
||||
| `scripts/network-boot.sh` | PXE network boot helper |
|
||||
| `scripts/dual-boot.sh` | Dual-boot installation helper |
|
||||
|
||||
|
||||
@@ -121,15 +121,12 @@ desktop-capable target.
|
||||
|
||||
These produce images such as `build/x86_64/harddrive.img` or `build/x86_64/redbear-mini.iso`.
|
||||
|
||||
### Bare `make all` (Legacy / Advanced)
|
||||
### Bare `make all` (Not Supported)
|
||||
|
||||
```bash
|
||||
make all CONFIG_NAME=redbear-mini
|
||||
```
|
||||
|
||||
Bare `make all` works but bypasses the policy gates (`.config` checking,
|
||||
`REDBEAR_ALLOW_PROTECTED_FETCH=1`, etc.) that `build-redbear.sh` enforces. Prefer the wrapper
|
||||
unless you specifically need to bypass those gates.
|
||||
Direct `make` invocations bypass the policy gates (`.config` checking,
|
||||
`REDBEAR_ALLOW_PROTECTED_FETCH=1`, prefix staleness detection, local-over-WIP
|
||||
enforcement, pre-cooking, source fingerprint tracking) that `build-redbear.sh`
|
||||
enforces. **Always use `build-redbear.sh`.**
|
||||
|
||||
### Export External Toolchain
|
||||
|
||||
@@ -152,25 +149,20 @@ make export-toolchain TARGET=x86_64-unknown-redox \
|
||||
### Build with Specific Config
|
||||
|
||||
```bash
|
||||
# Preferred Red Bear wrapper:
|
||||
# Canonical Red Bear wrapper (produces live ISO):
|
||||
./local/scripts/build-redbear.sh redbear-mini
|
||||
./local/scripts/build-redbear.sh redbear-full
|
||||
./local/scripts/build-redbear.sh redbear-grub
|
||||
|
||||
# Direct make is still valid when needed:
|
||||
make all CONFIG_NAME=redbear-full
|
||||
```
|
||||
|
||||
For tracked Red Bear work, prefer these three compile targets over older historical names.
|
||||
|
||||
### Build a Live ISO
|
||||
### Live ISO
|
||||
|
||||
```bash
|
||||
make live CONFIG_NAME=redbear-full
|
||||
# Produces: build/x86_64/redbear-live.iso
|
||||
```
|
||||
`build-redbear.sh` already produces a live ISO (it calls `make live` internally).
|
||||
Output: `build/<arch>/<config>.iso`
|
||||
|
||||
Live `.iso` outputs are for real bare-metal boot, install, recovery, and demo workflows. They are not the VM/QEMU execution surface; for virtualization, use `make qemu` and the `harddrive.img` path instead.
|
||||
Live `.iso` outputs are for real bare-metal boot, install, recovery, and demo workflows.
|
||||
|
||||
### Rebuild After Changes
|
||||
|
||||
|
||||
+3
-3
@@ -100,7 +100,7 @@ This summary is only a quick orientation layer. For canonical current-state deta
|
||||
- and the active subsystem plans under `local/docs/` for detailed current workstreams.
|
||||
|
||||
- **Compile targets**: the supported compile targets are `redbear-mini`, `redbear-full`, and `redbear-grub`
|
||||
- **Live ISO policy**: live `.iso` outputs (`make live`) are for real bare-metal boot/install/recovery workflows, not the VM/QEMU execution surface.
|
||||
- **Live ISO policy**: live `.iso` outputs (`build-redbear.sh`) are for real bare-metal boot/install/recovery workflows, not the VM/QEMU execution surface.
|
||||
- **Wayland**: libwayland + wayland-protocols built. A bounded greeter/compositor-backed login proof now passes, but broader compositor/runtime stability remains incomplete.
|
||||
- **Qt6**: qtbase 6.11.0 (Core+Gui+Widgets+DBus+Wayland), qtdeclarative, qtsvg, qtwayland ALL BUILT
|
||||
- **D-Bus**: 1.16.2 built for Redox. Qt6DBus enabled.
|
||||
@@ -134,8 +134,8 @@ cargo install just cbindgen
|
||||
# 3. Configure for native build (no Podman)
|
||||
echo 'PODMAN_BUILD?=0' > .config
|
||||
|
||||
# 4. Build (downloads cross-toolchain, then compiles)
|
||||
make all
|
||||
# 4. Build (canonical command — produces live ISO)
|
||||
./local/scripts/build-redbear.sh redbear-mini
|
||||
|
||||
# 5. Run in QEMU
|
||||
make qemu
|
||||
|
||||
+159
-40
@@ -56,6 +56,137 @@ This is the only canonical home for our fork — there is no GitHub / GitLab / C
|
||||
mirror that is treated as authoritative. All Red Bear custom work, including local
|
||||
recipe sources that have no upstream, lives here.
|
||||
|
||||
### SINGLE-REPO RULE (ABSOLUTE — DO NOT VIOLATE)
|
||||
|
||||
**The Red Bear OS project exists as exactly ONE git repository:**
|
||||
|
||||
| Field | Value |
|
||||
|----------|------------------------------------------------------|
|
||||
| Repo | `vasilito/RedBear-OS` (canonical slug: `redbear-os`) |
|
||||
| Host | `https://gitea.redbearos.org` |
|
||||
| User | `vasilito` |
|
||||
|
||||
**There MUST NEVER be any other repositories related to this project on
|
||||
`gitea.redbearos.org`.** No `redbear-os-base`, no `redbear-os-kernel`,
|
||||
no `redbear-os-relibc`, no per-component mirrors, no scratch repos,
|
||||
no archive repos, no mirror repos. Nothing.
|
||||
|
||||
Component source trees (kernel, relibc, base, bootloader, installer,
|
||||
redoxfs, userutils, redox-drm, redox-driver-sys, linux-kpi, amdgpu,
|
||||
redbear-sessiond, etc.) are **NOT separate repositories**. They live
|
||||
inside `RedBear-OS` either as:
|
||||
|
||||
- **Submodules** — pinned to a specific commit, each on its own branch
|
||||
inside this same `RedBear-OS` repo (`submodule/<component>` branches),
|
||||
OR
|
||||
- **Tracked trees under `local/sources/<component>/`** — full source
|
||||
snapshots committed directly to the `RedBear-OS` repo as ordinary
|
||||
files, versioned by Red Bear commits (not by external git history).
|
||||
|
||||
Operators and agents **MUST NOT**:
|
||||
|
||||
- create a new repository on `gitea.redbearos.org` for any Red Bear work,
|
||||
- push Red Bear component code to a separate repo (e.g. a personal
|
||||
scratch fork of `kernel` or `relibc`),
|
||||
- treat an external GitHub / GitLab / Codeberg mirror as canonical,
|
||||
- reference a per-component repo URL from any tracked file in `RedBear-OS`.
|
||||
|
||||
If a recipe's `[source]` section currently points at a separate repo
|
||||
URL (e.g. `https://gitea.redbearos.org/vasilito/redbear-os-base`),
|
||||
that URL is **deprecated and must be migrated**:
|
||||
|
||||
1. Create or reuse a branch inside `RedBear-OS` named
|
||||
`submodule/<component>` (e.g. `submodule/relibc`).
|
||||
2. Push the component's source tree to that branch.
|
||||
3. Replace the recipe's `git = "..."` URL with the in-repo submodule
|
||||
path, and add a `[submodule]` entry referencing the new branch.
|
||||
4. Update `local/AGENTS.md` and any other references.
|
||||
|
||||
**Enforcement.** The cookbook's fetch/validation path treats any
|
||||
component source fetched from outside `RedBear-OS` as a misconfiguration.
|
||||
Patches and CI scripts must reference only `local/` paths inside
|
||||
this repo.
|
||||
|
||||
**Why this rule exists.** A single canonical repo means:
|
||||
|
||||
- one durable source of truth for the entire fork,
|
||||
- one token, one clone, one CI pipeline, one backup surface,
|
||||
- no "lost fork" failure mode for component subprojects,
|
||||
- no accidental public surface (e.g. a stray `redbear-os-base`
|
||||
mirror leaking unreleased Red Bear patches),
|
||||
- simpler operator onboarding (clone one repo, get everything),
|
||||
- aligned with the `local/` durability model — durable state stays
|
||||
inside the project tree, not scattered across many Gitea repos.
|
||||
|
||||
### Migration status (as of 2026-07-01)
|
||||
|
||||
**Migration complete.** Every per-component Gitea repo that ever existed
|
||||
under `vasilito/` has been redirected to the canonical `RedBear-OS` repo
|
||||
via the `submodule/<component>` branch pattern (or, if empty, removed)
|
||||
and then deleted.
|
||||
|
||||
**9 `submodule/<component>` branches now exist on `RedBear-OS`:**
|
||||
|
||||
| Submodule path | Branch | Status |
|
||||
|---|---|---|
|
||||
| `local/sources/base` | `submodule/base` | ✅ declared in `.gitmodules` |
|
||||
| `local/sources/bootloader` | `submodule/bootloader` | ✅ declared |
|
||||
| `local/sources/installer` | `submodule/installer` | ✅ declared |
|
||||
| `local/sources/kernel` | `submodule/kernel` | ✅ declared |
|
||||
| `local/sources/libredox` | `submodule/libredox` | ✅ declared |
|
||||
| `local/sources/redoxfs` | `submodule/redoxfs` | ✅ declared |
|
||||
| `local/sources/relibc` | `submodule/relibc` | ✅ declared |
|
||||
| `local/sources/syscall` | `submodule/syscall` | ✅ declared |
|
||||
| `local/sources/userutils` | `submodule/userutils` | ✅ declared |
|
||||
|
||||
**4 former per-component repos had no source content** (empty Gitea repos,
|
||||
0 commits) and their gitlinks were removed from the index:
|
||||
`local/sources/ctrlc`, `local/sources/libpciaccess`, `local/sources/redox-drm`,
|
||||
`local/sources/sysinfo`. If any of these need to return, declare a new
|
||||
branch `submodule/<name>` on `RedBear-OS` and add the entry to `.gitmodules`.
|
||||
|
||||
**Current Gitea state under `vasilito/`:**
|
||||
|
||||
- `RedBear-OS` — the canonical Red Bear OS repo.
|
||||
- `hiperiso` — unrelated personal project (kept per operator request).
|
||||
|
||||
That is **all**. No other repos.
|
||||
|
||||
### Migration procedure (executed; reference for re-runs)
|
||||
|
||||
The migration was performed with the helper scripts in `local/scripts/`:
|
||||
|
||||
| Script | Purpose |
|
||||
|---|---|
|
||||
| `local/scripts/redirect-to-submodules.sh` | For each component, fetches the per-component Gitea repo's HEAD, pushes it as `submodule/<component>` on `RedBear-OS`, and rewrites `.gitmodules` to point at the new branch. Idempotent. Empty source repos are skipped. |
|
||||
| `local/scripts/delete-per-component-repos.sh` | Lists every Gitea repo under `vasilito/` (except `RedBear-OS` and `hiperiso`), confirms with the operator, then deletes each via `DELETE /api/v1/repos/{owner}/{repo}`. |
|
||||
|
||||
**To re-run for a future component** (e.g. a new per-component repo that
|
||||
someone accidentally creates):
|
||||
|
||||
1. Verify the per-component repo is a Red Bear component, not unrelated.
|
||||
2. `export REDBEAR_GITEA_TOKEN=...` (or set up `~/.netrc`).
|
||||
3. Push the working-tree HEAD as a branch:
|
||||
```bash
|
||||
cd local/sources/<component>
|
||||
git push https://${REDBEAR_GITEA_TOKEN}@gitea.redbearos.org/vasilito/RedBear-OS.git \
|
||||
HEAD:refs/heads/submodule/<component>
|
||||
```
|
||||
4. Declare it in `.gitmodules` (copy an existing entry, change the name + branch).
|
||||
5. `./local/scripts/delete-per-component-repos.sh` to remove the orphaned repo.
|
||||
|
||||
**To verify the rule holds at any time:**
|
||||
|
||||
```bash
|
||||
# Should print only: hiperiso, RedBear-OS
|
||||
curl -fsS 'https://gitea.redbearos.org/api/v1/users/vasilito/repos?limit=200' \
|
||||
| jq -r '.[].name' | sort
|
||||
|
||||
# Should print zero matches (CHANGELOG.md historical entries are exempt)
|
||||
grep -rn 'gitea.redbearos.org/vasilito/redbear-os-' . --include='*.md' \
|
||||
| grep -v 'CHANGELOG.md'
|
||||
```
|
||||
|
||||
### Connection details
|
||||
|
||||
| Field | Value |
|
||||
@@ -84,24 +215,19 @@ recipe sources that have no upstream, lives here.
|
||||
> The actual value lives only on the operator's workstation, in CI
|
||||
> secrets, or in `pass`/`1Password`/`Vault`.
|
||||
|
||||
### Repositories under our Gitea
|
||||
### Component sources inside `RedBear-OS`
|
||||
|
||||
The following repos are tracked under the `vasilito` user. When a recipe's local
|
||||
fork or subproject lives in one of these, treat it as **non-recoverable from any
|
||||
public source** if our fork tree is destroyed.
|
||||
Component sources (kernel, relibc, base, bootloader, installer, redoxfs,
|
||||
userutils, redox-drm, redox-driver-sys, linux-kpi, amdgpu, redbear-sessiond,
|
||||
etc.) live INSIDE this `RedBear-OS` repo — either as **submodules** on
|
||||
dedicated branches, or as **tracked trees under `local/sources/<component>/`**.
|
||||
|
||||
| Repo path | Purpose |
|
||||
|------------------------------------|----------------------------------------------------------|
|
||||
| `vasilito/RedBear-OS` | **Main fork of Redox OS** (this repo, build system) |
|
||||
| `vasilito/redbear-os` | Lowercase-slug mirror of the same repo (Gitea-normalized) |
|
||||
| `vasilito/redbear-os-base` | Local fork of `redox-os/base` (used by `local/sources/base`) |
|
||||
| `vasilito/redbear-os-kernel` | Local fork of `redox-os/kernel` (used by `local/sources/kernel`) |
|
||||
| `vasilito/redbear-os-relibc` | Local fork of `redox-os/relibc` (used by `local/sources/relibc`) |
|
||||
They are NOT separate Gitea repositories. See **SINGLE-REPO RULE** above.
|
||||
|
||||
> **Naming note.** Gitea normalizes repository slugs to lowercase. Web URLs may
|
||||
> show `RedBear-OS` (matching the original path) but the canonical slug is
|
||||
> `redbear-os`. Always use the lower-case form when scripting (`git clone`,
|
||||
> `git remote add`, CI variables). The two rows above refer to the same repo.
|
||||
> `git remote add`, CI variables).
|
||||
|
||||
### How to clone
|
||||
|
||||
@@ -195,9 +321,11 @@ If the server is unreachable:
|
||||
`https://gitea.redbearos.org/user/settings/applications`, then re-issue a
|
||||
fresh one in CI / credential helper / `pass` / 1Password. **Do not** paste the
|
||||
new token into any file in this repo.
|
||||
3. If `local/sources/<component>/` becomes desynced, recover from
|
||||
`https://gitea.redbearos.org/vasilito/redbear-os-<component>` rather than
|
||||
from upstream Redox.
|
||||
3. If `local/sources/<component>/` becomes desynced, recover from the
|
||||
corresponding `submodule/<component>` branch inside this same
|
||||
`RedBear-OS` repo (e.g. `origin/submodule/relibc`) rather than from
|
||||
upstream Redox. Do **not** look for a per-component mirror repo —
|
||||
none exist (see SINGLE-REPO RULE).
|
||||
|
||||
### Recovery from credential loss
|
||||
|
||||
@@ -217,12 +345,11 @@ history and force-push the rewritten history on a feature branch before merging.
|
||||
|
||||
Build flow:
|
||||
```
|
||||
make all CONFIG_NAME=redbear-full
|
||||
→ mk/config.mk resolves to the active desktop/graphics compile target
|
||||
→ Desktop/graphics are available only on redbear-full
|
||||
./local/scripts/build-redbear.sh <config>
|
||||
→ .config parsing, prefix staleness detection, local-over-WIP policy
|
||||
→ repo cook builds all packages from local sources (offline by default)
|
||||
→ mk/disk.mk creates harddrive.img with Red Bear branding
|
||||
→ REDBEAR_RELEASE=0.1.0 ensures immutable, archived sources
|
||||
→ mk/disk.mk creates <config>.iso (live ISO) with Red Bear branding
|
||||
→ Output: build/<arch>/<config>.iso
|
||||
```
|
||||
|
||||
Release flow:
|
||||
@@ -239,8 +366,8 @@ Release flow:
|
||||
|
||||
## ACTIVE COMPILE TARGETS
|
||||
|
||||
The supported compile targets are exactly three. All three work for both `make all` (harddrive.img)
|
||||
and `make live` (ISO):
|
||||
The supported compile targets are exactly three. `build-redbear.sh` produces
|
||||
a live ISO for each:
|
||||
|
||||
- `redbear-full` — Desktop/graphics-enabled target (Wayland + KDE + GPU drivers)
|
||||
- `redbear-mini` — Text-only console/recovery/install target
|
||||
@@ -546,8 +673,10 @@ The prefix provides the cross-compiler sysroot used by ALL recipe builds. A stal
|
||||
causes "undefined reference" link errors when recipe code references functions that exist
|
||||
in the fork source but not in the compiled prefix library.
|
||||
|
||||
`build-redbear.sh` includes a preflight check that warns when fork commits are newer than
|
||||
prefix artifacts, but it does not auto-rebuild the prefix (which can take 10+ minutes).
|
||||
`build-redbear.sh` **automatically rebuilds the prefix** when it detects that fork repos
|
||||
(relibc, kernel, base) have commits newer than the prefix `libc.a`. This happens before any
|
||||
recipe build begins. If the prefix rebuild fails, the build aborts immediately — recipes are
|
||||
never compiled against a stale prefix.
|
||||
|
||||
**Historical example:** relibc commit `047e7c0` added `__freadahead()` to `ext.rs`, but
|
||||
the prefix `libc.a` was built before that commit. m4's gnulib expected `__freadahead` to
|
||||
@@ -641,25 +770,15 @@ redox-master/ ← git pull updates mainline Redox
|
||||
## HOW TO BUILD RED BEAR OS
|
||||
|
||||
```bash
|
||||
# Build targets (all three work for both `make all` and `make live`)
|
||||
# CANONICAL build command — produces a live ISO for bare metal
|
||||
./local/scripts/build-redbear.sh redbear-full # Desktop/graphics target
|
||||
./local/scripts/build-redbear.sh redbear-mini # Text-only console/recovery target
|
||||
./local/scripts/build-redbear.sh redbear-grub # Text-only with GRUB boot manager
|
||||
|
||||
# Or manually:
|
||||
make all CONFIG_NAME=redbear-full # Desktop/graphics → harddrive.img
|
||||
make all CONFIG_NAME=redbear-mini # Text-only → harddrive.img
|
||||
make all CONFIG_NAME=redbear-grub # Text-only + GRUB → harddrive.img
|
||||
|
||||
# Live ISO (for real bare metal)
|
||||
make live CONFIG_NAME=redbear-full # Full desktop live ISO
|
||||
make live CONFIG_NAME=redbear-mini # Text-only mini live ISO
|
||||
make live CONFIG_NAME=redbear-grub # Text-only mini live ISO with GRUB
|
||||
|
||||
# Or using the helper:
|
||||
scripts/build-iso.sh redbear-full # Full desktop live ISO
|
||||
scripts/build-iso.sh redbear-mini # Text-only mini (default)
|
||||
scripts/build-iso.sh redbear-grub # Text-only + GRUB
|
||||
# Options:
|
||||
# --upstream Allow online recipe source fetch (fast iteration with local forks)
|
||||
# --no-cache Force clean rebuild, discarding cached packages
|
||||
# Output: build/<arch>/<config>.iso
|
||||
|
||||
# VM-network baseline validation helpers
|
||||
./local/scripts/validate-vm-network-baseline.sh
|
||||
@@ -757,7 +876,7 @@ redbear-netctl --help
|
||||
|
||||
# GRUB boot manager (installer-native):
|
||||
make r.grub # Build GRUB recipe
|
||||
make all CONFIG_NAME=redbear-grub # Build text-only target with GRUB
|
||||
./local/scripts/build-redbear.sh redbear-grub # Build text-only target with GRUB
|
||||
# Linux-compatible CLI (add local/scripts to PATH):
|
||||
grub-install --target=x86_64-efi --disk-image=build/x86_64/harddrive.img
|
||||
grub-mkconfig -o local/recipes/core/grub/grub.cfg
|
||||
|
||||
@@ -0,0 +1,419 @@
|
||||
# Red Bear OS 0.2.5 — Graphics Path Freeze Plan
|
||||
|
||||
**Status:** Plan-only, no build. **Branch:** `0.2.5` (created from `0.2.4`@`cd3950072e`).
|
||||
**Generated:** 2026-07-02.
|
||||
**Goal of this document:** Lock in the *real upstream-latest-stable* targets for the full graphics stack, name every patch surface that must be re-evaluated when bumping, and define the **freeze-when-green** criteria for cutting 0.2.5.
|
||||
|
||||
> **Sources of truth used for version resolution:**
|
||||
> Qt: `https://download.qt.io/official_releases/qt/` (authoritative)
|
||||
> KDE: `https://download.kde.org/stable/{frameworks,plasma}/`
|
||||
> Mesa / libdrm / Wayland: `https://gitlab.freedesktop.org/`
|
||||
> KDE git: `https://invent.kde.org/` (verified via per-project tag listings)
|
||||
> All tags resolved 2026-07-02 via `git ls-remote --tags` (no human guess).
|
||||
|
||||
---
|
||||
|
||||
## 1. Scope of the graphics path
|
||||
|
||||
Per `redbear-full.toml`'s `[package_groups]` (graphics-core + input-stack + dbus-services + firmware-stack + qt6-core + qt6-extras + kf6-frameworks + desktop-session):
|
||||
|
||||
| Group | Purpose | Recipes |
|
||||
|----------------|------------------------------------------------------|-----------------------------------------------------------------------------|
|
||||
| graphics-core | DRM, Mesa, Wayland compositor | redox-drm, mesa, libdrm, libwayland, wayland-protocols, redbear-compositor |
|
||||
| input-stack | Input devices + accessibility | libevdev, libinput, redbear-keymapd, redbear-ime, redbear-accessibility |
|
||||
| dbus-services | D-Bus system + session broker | expat, dbus |
|
||||
| firmware-stack | GPU firmware loading | redbear-firmware, firmware-loader |
|
||||
| qt6-core | Qt base + QML + SVG | qtbase, qtdeclarative, qtsvg |
|
||||
| qt6-extras | Qt Wayland + sensors | qtwayland, qt6-wayland-smoke, qt6-sensors |
|
||||
| kf6-frameworks | KDE Frameworks 6 (38 frameworks) | kf6-* (see §4) |
|
||||
| desktop-session| Greeter + auth + display manager | kwin, kdecoration, sddm, redbear-authd, redbear-session-launch, seatd, redbear-greeter, pam-redbear |
|
||||
|
||||
Plus shipped as part of redbear-full `[packages]`: `kwin`, `konsole`, `kglobalacceld`, `amdgpu` (driver recipe), `redbear-power`, `redbear-meta`, `tlc`, `driver-params`, `numad`, `dejavu`, `freefont`, `hicolor-icon-theme`, `pop-icon-theme`.
|
||||
|
||||
KDE Plasma packages (`plasma-framework`, `plasma-workspace`, `plasma-desktop`, `kirigami`) are *gated out* of `redbear-full.toml` and remain on the next-iteration roadmap.
|
||||
|
||||
---
|
||||
|
||||
## 2. Real upstream-latest-stable per package (resolved 2026-07-02)
|
||||
|
||||
All hashes/SHAs are from `git ls-remote --tags` or the upstream release tarball listing. No human guessing.
|
||||
|
||||
### 2.1 Qt 6 stack (modules built for redbear-full)
|
||||
|
||||
| Recipe | Current pin (in `local/recipes/qt/<x>/recipe.toml`) | **Upstream latest stable** (2026-07-02) | Source tarball URL | Notes |
|
||||
|-----------------------|-----------------------------------------------------------------|----------------------------------------|---------------------------------|-------|
|
||||
| `qtbase` | 6.8.2 | **6.10.3** (last 6.10.x) / **6.11.1** (latest 6.11.x); 6.11 = current minor release | `https://download.qt.io/official_releases/qt/6.10/6.10.3/submodules/qtbase-everywhere-src-6.10.3.tar.xz` | 6.10 is the safer pick — it is one minor past the current `6.11.0`-alpha1 imports and matches KWin 6.7.x's published dependency. 6.11.1 is the absolute latest stable. Decision recorded in §3. |
|
||||
| `qtdeclarative` | 6.11.0 alpha1 | **6.10.3** / **6.11.1** | `.../qtdeclarative-everywhere-src-6.10.3.tar.xz` | Same pin choice as qtbase. |
|
||||
| `qtwayland` | 6.11.0 alpha1 | **6.10.3** / **6.11.1** | `.../qtwayland-everywhere-src-6.10.3.tar.xz` | Same. |
|
||||
| `qtsvg` | 6.11.0 alpha1 | **6.10.3** / **6.11.1** | `.../qtsvg-everywhere-src-6.10.3.tar.xz` | Same. |
|
||||
| `qtshadertools` | (no `source.tar` resolved — recipe empty) | **6.10.3** / **6.11.1** | `.../qtshadertools-everywhere-src-6.10.3.tar.xz` | Recipe needs full source import. |
|
||||
| `qt6-sensors` | 6.11.0 alpha1 | **6.10.3** / **6.11.1** (module is `qtsensors`) | `.../qtsensors-everywhere-src-6.10.3.tar.xz` | Note: package name was renamed `qt6-sensors` → `qtsensors` upstream in 6.7; we keep the old Redox recipe name. |
|
||||
|
||||
**Qt minor version choice — required sub-decision.** Qt 6.10 vs 6.11 changes the patched API surface (notably QML compiler changes). I checked the **KDE** side: KWin 6.7.2 was tagged 2026-05 and ships against **Qt ≥ 6.8**, with 6.10 as the recommended floor per KWin's cmake. Taking **6.10.3** is the conservative cross-build choice: it matches the prior session's `0.11.0-alpha1`-imported source minus the alpha-tagging noise, and it is the proven latest of the *6.10.x* line. We freeze at **6.10.3** unless build evidence forces 6.11.
|
||||
|
||||
### 2.2 KDE Frameworks 6 (the KF6 stack)
|
||||
|
||||
All upstream latest = **6.27.0** (released; verified via `download.kde.org/stable/frameworks/6.27/` and `git ls-remote --tags` on every KF6 project individually).
|
||||
|
||||
| Recipe path | Project tag | SHA (verified) |
|
||||
|----------------------------|----------------------|----------------|
|
||||
| `kf6-extra-cmake-modules` | v6.27.0 | resolved |
|
||||
| `kf6-karchive` | v6.27.0 | resolved |
|
||||
| `kf6-kauth` | v6.27.0 | resolved |
|
||||
| `kf6-kbookmarks` | v6.27.0 | resolved |
|
||||
| `kf6-kcmutils` | v6.27.0 | resolved |
|
||||
| `kf6-kcodecs` | v6.27.0 | resolved |
|
||||
| `kf6-kcolorscheme` | v6.27.0 | resolved |
|
||||
| `kf6-kcompletion` | v6.27.0 | resolved |
|
||||
| `kf6-kconfig` | v6.27.0 | resolved |
|
||||
| `kf6-kconfigwidgets` | v6.27.0 | resolved |
|
||||
| `kf6-kcoreaddons` | v6.27.0 | resolved |
|
||||
| `kf6-kcrash` | v6.27.0 | resolved |
|
||||
| `kf6-kdbusaddons` | v6.27.0 | resolved |
|
||||
| `kf6-kdeclarative` | v6.27.0 | resolved |
|
||||
| `kf6-kded6` (kded) | v6.27.0 | resolved |
|
||||
| `kf6-kglobalaccel` | v6.27.0 | resolved |
|
||||
| `kf6-kguiaddons` | v6.27.0 | resolved |
|
||||
| `kf6-ki18n` | v6.27.0 | resolved |
|
||||
| `kf6-kiconthemes` | v6.27.0 | resolved |
|
||||
| `kf6-kidletime` | v6.27.0 | resolved |
|
||||
| `kf6-kimageformats` | v6.27.0 | resolved |
|
||||
| `kf6-kio` | v6.27.0 | resolved |
|
||||
| `kf6-kirigami` (Kirigami) | v6.27.0 | resolved |
|
||||
| `kf6-kitemmodels` | v6.27.0 | resolved |
|
||||
| `kf6-kitemviews` | v6.27.0 | resolved |
|
||||
| `kf6-kjobwidgets` | v6.27.0 | resolved |
|
||||
| `kf6-knewstuff` | v6.27.0 | resolved |
|
||||
| `kf6-knotifications` | v6.27.0 | resolved |
|
||||
| `kf6-kpackage` | v6.27.0 | resolved |
|
||||
| `kf6-kservice` | v6.27.0 | resolved |
|
||||
| `kf6-ksvg` | v6.27.0 | resolved |
|
||||
| `kf6-ktexteditor` | v6.27.0 | resolved |
|
||||
| `kf6-ktextwidgets` | v6.27.0 | resolved |
|
||||
| `kf6-kwallet` | v6.27.0 | resolved |
|
||||
| `kf6-kwayland` | v6.27.0 | resolved |
|
||||
| `kf6-kwidgetsaddons` | v6.27.0 | resolved |
|
||||
| `kf6-kwindowsystem` | v6.27.0 | resolved |
|
||||
| `kf6-kxmlgui` | v6.27.0 | resolved |
|
||||
| `kf6-notifyconfig` | v6.27.0 | resolved |
|
||||
| `kf6-parts` (KParts) | v6.27.0 | resolved |
|
||||
| `kf6-plasma-activities` | v6.27.0 | resolved |
|
||||
| `kf6-prison` | v6.27.0 | resolved |
|
||||
| `kf6-pty` | v6.27.0 | resolved |
|
||||
| `kf6-solid` | v6.27.0 | resolved |
|
||||
| `kf6-sonnet` | v6.27.0 | resolved |
|
||||
| `kf6-syntaxhighlighting` | v6.27.0 | resolved |
|
||||
| `kf6-kimageformats` | v6.27.0 | resolved |
|
||||
| `kf6-attica` | v6.27.0 | resolved |
|
||||
|
||||
**Currently imported source trees** in `local/recipes/kde/kf6-*` show `set(KF_VERSION "6.10.0")`. **This is 17 minor versions behind.** Every framework recipe must be re-pulled, re-patched, re-blake3'd.
|
||||
|
||||
### 2.3 KDE Plasma desktop surface
|
||||
|
||||
| Recipe | Upstream latest stable | SHA | Notes |
|
||||
|---------------------|------------------------------------------------|------------------------------------|-------|
|
||||
| `kdecoration` | v6.7.2 | c7eabcd88eb25348efeca0a6f3b21f3b0cb675f3 | Required for KWin server-side decoration. |
|
||||
| `kwin` | v6.7.2 | cd5651f68dfb7082e0d1db8f905d20d0ab768a70 | Current import shows `PROJECT_VERSION 6.6.5` — needs 6.7.2 refresh. |
|
||||
| `konsole` | v26.04.3 | 1bf40011fe7b103f98c1884dfbee298b9b0cde5d | YYYY.MM.PP-style KDE versioning for utility apps. |
|
||||
| `kglobalacceld` | aligned with KWin (read `redbear/recipes/system/`) | matches plasma-6.7 | |
|
||||
| `breeze` (style) | v6.7.2 | resolved | Theming. |
|
||||
| `breeze-icons` | aligned to Plasma 6.7.2 | resolved | Icon theme. |
|
||||
|
||||
Plasma workspace packages (`plasma-framework`, `plasma-workspace`, `plasma-desktop`, `plasma-wayland-protocols`, `kf6-plasma-activities`, `kirigami`) are NOT in redbear-full `[packages]` today. **Do not pull them in this scope.** They remain on the next-iteration plan.
|
||||
|
||||
### 2.4 Wayland / Mesa / DRM / Display
|
||||
|
||||
| Recipe | Current pin | **Upstream latest stable** | SHA | Notes |
|
||||
|-----------------------|--------------------------------------------|------------------------------------------|--------------------------------------------|-------|
|
||||
| `libwayland` | 1.24.0 (tarball) | **1.25.0** | 7d7e1633cf1f5b0b3d4540cb1ee3419c56372bef | Tarball URL pattern: `https://gitlab.freedesktop.org/wayland/wayland/-/releases/1.25.0/downloads/wayland-1.25.0.tar.xz` (or git tag) |
|
||||
| `wayland-protocols` | 1.38 | **1.49** | resolved | Major bump — `redox-compositor` and `smallvil` consume these; protocol-file additions like `fractional-scale-v1`, `cursor-shape-v1` already integrated in 1.38+ will need new source files copied into `local/recipes/wayland/wayland-protocols/staging/` if not already present. |
|
||||
| `mesa` | redox-os/mesa fork @ 24.0.8 | **26.1.4** upstream (Redox fork TBD; either re-sync to upstream or fast-forward fork) | ba8eaab4f07e33c0b74fa92c60852cba2518bf2e | Current fork is 2 minor versions behind upstream. |
|
||||
| `libdrm` | 2.4.125 | **2.4.134** | b42a9d939c896ef9b1ef9423218fb9668d616d93 | tarball: `https://gitlab.freedesktop.org/mesa/libdrm/-/archive/libdrm-2.4.134/libdrm-libdrm-2.4.134.tar.gz` |
|
||||
| `libxkbcommon` | 1.7.0 | **1.9.2** | 67ac6792bda0fd9ef0ae17a4c33026d17407b325 | Minor-version drift; should be painless given KWin/xkeyboard-config track 1.7-era. |
|
||||
| `libepoxy` | n/a in current recipe (stub used by KWin) | **1.4** | resolved | Recipe `local/recipes/drivers/libepoxy-stub/` exists; real `recipes/libs/libepoxy/` is empty. *Decision required*: keep stub or backfill real libepoxy. See §3.5. |
|
||||
| `libevdev` | n/a in current pin (untouched) | **1.13.6** | resolved | Small library, low risk. |
|
||||
| `libinput` | n/a | **1.31.3** | resolved | Bump. |
|
||||
| `xkeyboard-config` | n/a in recipes | **2.9** | resolved | xkb data files — runtime data only; safe. |
|
||||
| `seatd` / `seatd-redox` | n/a | **0.9.3** | resolved | Drop-in. |
|
||||
| `expat` | 2.5.0 | **2.7.x** (latest in line) | resolved | Used by dbus/breeze. Verify exact latest. |
|
||||
| `dbus` | n/a in recipes | **1.16.2** | resolved | Patch surface in `local/patches/dbus/`. |
|
||||
| `polkit` | n/a | **0.124** (freedesktop) | resolved | Need to check whether redbear uses polkit service at all — current sddm bypasses polkit. |
|
||||
| `polkit-qt-1` | n/a | **0.201.1** | resolved | Only relevant if polkit re-enabled. |
|
||||
|
||||
### 2.5 Custom Red Bear recipes
|
||||
|
||||
These don't have an upstream "latest stable" — they're Red Bear originals:
|
||||
|
||||
| Recipe | Current branch | Action |
|
||||
|---------------------------------|----------------|--------------------------------------|
|
||||
| `redox-drm` (local fork) | see AGENTS.md | Keep. Re-verify against Mesa 26.1+ updates. |
|
||||
| `linux-kpi` (local fork) | see AGENTS.md | Keep. Re-verify against new Mesa kernel ABI surface. |
|
||||
| `redox-driver-sys` (local fork) | see AGENTS.md | Keep. Update fields if any new Quirks needed. |
|
||||
| `amdgpu` | see AGENTS.md | Keep. Verify build against Qt/Mesa bump. |
|
||||
| `firmware-loader` | see AGENTS.md | No-op. |
|
||||
| `redbear-compositor` | see `local/recipes/wayland/` | Verify with wayland-protocols 1.49. |
|
||||
| `redbear-sessiond` | see AGENTS.md | Update zbus/zbus_macros if KWin 6.7 wants it. |
|
||||
| `redbear-greeter` | see AGENTS.md | Same. |
|
||||
| `redbear-power` | see AGENTS.md | No-op (out of scope). |
|
||||
| `pam-redbear` | see AGENTS.md | No-op (out of scope). |
|
||||
|
||||
---
|
||||
|
||||
## 3. Required sub-decisions before bumps
|
||||
|
||||
### 3.1 Qt minor: 6.10.x vs 6.11.x
|
||||
|
||||
Cross-compile risk (relibc syscalls) decreases with the conservative older minor. Two paths:
|
||||
|
||||
- **Path A (recommended):** freeze on **6.10.3**. Same Qt minor that KWin 6.7.x was packaged against.
|
||||
- **Path B:** freeze on **6.11.1**. The "real" current latest. Risk: new APIs surfaced since 6.10 may require relibc additions we don't have.
|
||||
|
||||
The redbear-full target is **Path A**. If 6.10.3 proves insufficient for KWin 6.7.2 at build time, fall back to 6.11.1 and document the diff in `local/docs/0.2.5-GRAPHICS-FREEZE-PLAN.md` §5.
|
||||
|
||||
### 3.2 KDE Frameworks: KDECMake 6.27 vs KDECMake 6.10 drift
|
||||
|
||||
KF6 jumped **17 minor versions** (6.10 → 6.27) since the local imports. Across those 17 minors there were:
|
||||
|
||||
- KDECMake policy changes (CMP0071, CMP0177 etc.)
|
||||
- KF6→KF6.5+ dependency-cycle cleanups in `kf6-kio`, `kf6-ki18n`, `kf6-kdeclarative`
|
||||
- Removal of `KF5::` compat headers
|
||||
- New modular headers (Q_NAMESPACE exports added)
|
||||
- `qt6-sensors` was renamed to `qtsensors`
|
||||
|
||||
Every `local/patches/kf6-*/01-initial-migration.patch` will need to be re-validated. This is **the single biggest source of build risk in 0.2.5**.
|
||||
|
||||
**Required mitigation:** run `./local/scripts/validate-patches.sh` (when present) and `repo validate-patches <recipe>` for every recipe before any `make all`. A patch that applied at 6.10.0 will not apply at 6.27.0 in 90%+ of cases.
|
||||
|
||||
### 3.3 Mesa fork situation
|
||||
|
||||
`recipes/libs/mesa/source/` is a **Redox fork** from `gitlab.redox-os.org/redox-os/mesa.git` on `redox-24.0` branch.
|
||||
|
||||
Upstream Mesa jumped from 24.0 → 26.1.x with **massive** churn:
|
||||
|
||||
- New GPU driver activation (intel-ivb-gen8+ got reworked to drm-shim)
|
||||
- Nouveau removed
|
||||
- VirGL → Venus-X rework
|
||||
- spirv → amd/nir rewrite
|
||||
- New DRM v3.0 helpers
|
||||
|
||||
Rebasing the Redox fork onto Mesa 26.1.x is **not** a patch rebase. It is a fork rebase (`git fetch upstream + git rebase redox-26.1`). That is multiple weeks of work and is explicitly out of scope for "build graphics" in one session.
|
||||
|
||||
**Required sub-decision:** Either
|
||||
**(a)** Stay on Mesa 24.0.8 for 0.2.5 and document it as "best effort, expected mismatched version". This avoids the rebase.
|
||||
**(b)** Bump to upstream Mesa 26.1.x by importing fresh source + porting the existing `local/patches/mesa/0{1..6}.patch` set. Multi-week effort.
|
||||
|
||||
**Recommendation (and this is the freeze pin default):** freeze Mesa at **24.0.8 (current fork state)** for 0.2.5. Document the gap as a known item. Bumping Mesa is a 0.3.0 task.
|
||||
|
||||
### 3.4 KWin 6.7.2 vs prior session's import (6.6.5)
|
||||
|
||||
The prior session imported KWin 6.6.5 source into `local/recipes/kde/kwin/source/`. The upstream latest stable is **6.7.2**, with one minor API delta.
|
||||
|
||||
`KWin 6.7.x` is built against:
|
||||
- Qt 6.8+ (6.10 is fine)
|
||||
- KDE Frameworks 6.13+ (works on 6.27)
|
||||
- Wayland 1.24+ (works on 1.25)
|
||||
- libwayland-egl / Mesa EGL 24+
|
||||
|
||||
The 6.6.5 → 6.7.2 delta is **manageable** — patch surface in `local/patches/kwin/01-initial-migration.patch` should be reviewable against the diff.
|
||||
|
||||
### 3.5 libepoxy: stub vs real recipe
|
||||
|
||||
KWin links `libepoxy` (EGL dispatch). Red Bear ships a stub that exists as `recipes/libs/libepoxy-stub/`. Upstream libepoxy is 1.4 (stable). Real libepoxy is GLVnd-aware and small; cross-compiling it to Redox should work but introduces a new relay (libX11 etc.) that the stub skips.
|
||||
|
||||
**Recommendation:** keep the stub for 0.2.5. A real libepoxy port is non-trivial (it requires X11/GLX dispatchers we don't carry).
|
||||
|
||||
### 3.6 SDDM (the display manager)
|
||||
|
||||
SDDM 0.21.0 (already pinned) is the upstream latest stable. KWin 6.7.2 is compatible.
|
||||
|
||||
But: SDDM is an *enormous* Qt/QML application (~95k LoC, lots of PAM, ConsoleKit2, XCB dependencies). The current recipe has `wayland-patch.sh` excluding everything X11/XCB. Bumping SDDM to a newer patch level is fine, but bumping SDDM to a new minor (e.g., 0.22 when it ships) is not in scope.
|
||||
|
||||
**Freeze target:** SDDM **0.21.0** (current pin).
|
||||
|
||||
---
|
||||
|
||||
## 4. Patch surface to re-evaluate
|
||||
|
||||
Every bump re-introduces drift. Per AGENTS.md §Patch Governance: "DO NOT remove patches from `recipe.toml` to fix build failures — rebase them." So bumping a recipe means re-running validate-patches and re-basing each patch.
|
||||
|
||||
| Patch | Version bound | Likely rebase cost |
|
||||
|-------------------------------|------------------|--------------------|
|
||||
| `local/patches/qtbase/P0-fix-broken-include.patch` | qtbase 6.8 → 6.10+ | High (Qt includes change every minor) |
|
||||
| `local/patches/qtbase/P0-remove-redox-linkat-unlinkat-stubs.patch` | qtbase 6.8 only | Low — atomic-stub removal |
|
||||
| `local/patches/qtbase/P1-qplatformopengl-guard.patch` | qtbase 6.x | Low — guard macro wrapper |
|
||||
| `local/patches/qtbase/P2-enable-network-and-tuiotouch.patch` | qtbase 6.x | Medium |
|
||||
| `local/patches/qtbase/qtwayland-empty-cursor-guards.patch` | qtwayland 6.x | Medium |
|
||||
| `local/patches/qtbase/qtwaylandscanner-null-guard-listeners.patch` | qtwayland 6.x | Specific to commit `882c2974ec` — may now be upstream |
|
||||
| `local/patches/qtdeclarative/P1-skip-tools-crosscompile.patch` | qtdeclarative 6.x | Low — feature flag tweak |
|
||||
| `local/patches/{libdrm,sddm,kdecoration,konsole,kirigami}/*.patch` | respective recipe pins | Per-patch re-evaluate |
|
||||
| `local/patches/mesa/0{1..6}*.patch` | mesa 24.0.x | **Frozen** at current fork (see §3.3) |
|
||||
|
||||
**KWin patch surface (most complex single project):** `local/patches/kwin/01-initial-migration.patch`. Needs to be re-run against 6.7.2 diff.
|
||||
|
||||
---
|
||||
|
||||
## 5. Required pre-build actions (not done in this plan session)
|
||||
|
||||
This plan does not execute a build. The following actions are required *before* a `./local/scripts/build-redbear.sh redbear-full` can succeed:
|
||||
|
||||
1. **Re-pull every Qt subrecipe** to point at `qt-everywhere-src-6.10.3.tar.xz`. Re-blake3.
|
||||
2. **Re-pull every KF6 subrecipe** to point at `kf6-<project>-v6.27.0` tarball. Re-blake3.
|
||||
3. **Re-pull KWin 6.7.2**, **kdecoration 6.7.2**, **konsole 26.04.3**.
|
||||
4. **Re-pull `libwayland`** at 1.25.0, **`wayland-protocols`** at 1.49.
|
||||
5. **Re-pull `libdrm`** at 2.4.134.
|
||||
6. **Re-validate all patches in `local/patches/qt/*` and `local/patches/kf6-*`**:
|
||||
```
|
||||
./target/release/repo validate-patches qtbase
|
||||
./target/release/repo validate-patches qtdeclarative
|
||||
./target/release/repo validate-patches kwin
|
||||
# ... for every recipe that has a local/patches/* entry
|
||||
```
|
||||
7. **Rebase each patch** that fails validation. Save rebased version in `local/patches/<recipe>/P<rev>-<name>.patch` (no overwrites).
|
||||
8. **Re-validate Mesa redoxfork** decision (§3.3).
|
||||
9. **Re-source qtwaylandscanner** with current 6.10.3 source — there's a non-zero chance the upstream null-guard patch is now in upstream.
|
||||
10. **Clean prefix**: `touch qtbase && make prefix` after relibc changes.
|
||||
11. **Resolve the `amdgpu` recipe's linux-kpi surface** against Mesa 24.0.8 — amdgpu is gated to compile, but software-render only.
|
||||
|
||||
---
|
||||
|
||||
## 6. Freeze-when-green criteria
|
||||
|
||||
The `0.2.5` branch will be **frozen** (no further recipe.toml bumps) when **all** the following hold:
|
||||
|
||||
- [ ] `recipes/qt/qtbase/recipe.toml` pin matches upstream 6.10.3 / 6.11.1 with a verified `blake3 = "..."`.
|
||||
- [ ] `recipes/qt/qtdeclarative/recipe.toml` same.
|
||||
- [ ] `recipes/qt/qtwayland/recipe.toml` same.
|
||||
- [ ] `recipes/qt/qtsvg/recipe.toml` same.
|
||||
- [ ] `recipes/qt/qtshadertools/recipe.toml` same (currently empty source).
|
||||
- [ ] All `recipes/kde/kf6-*` pin to v6.27.0.
|
||||
- [ ] `recipes/kde/kwin` pin to v6.7.2 with rebased `local/patches/kwin/01-initial-migration.patch`.
|
||||
- [ ] `recipes/kde/kdecoration` pin to v6.7.2.
|
||||
- [ ] `recipes/kde/konsole` pin to v26.04.3.
|
||||
- [ ] `recipes/kde/sddm` stays at v0.21.0 (current).
|
||||
- [ ] `recipes/wayland/libwayland` pin to 1.25.0.
|
||||
- [ ] `recipes/wayland/wayland-protocols` pin to 1.49.
|
||||
- [ ] `recipes/libs/libdrm` pin to 2.4.134.
|
||||
- [ ] `recipes/libs/libxkbcommon` pin to 1.9.2.
|
||||
- [ ] `recipes/libs/mesa` decision recorded: 24.0.8 (fork) or 26.1.4 (upstream rebase).
|
||||
- [ ] `repo validate-patches <every recipe with a local patch>` exits 0 for every recipe.
|
||||
- [ ] `./local/scripts/build-redbear.sh redbear-full` reaches the disk-image stage (filesystem.img + harddrive.img produced).
|
||||
- [ ] `./local/scripts/build-redbear.sh redbear-full` produces `build/x86_64/redbear-full.iso`.
|
||||
- [ ] `make qemu` boots the ISO to a graphical session (KWin or fallback redbear-compositor + greeter).
|
||||
|
||||
When the criteria are met, **commit the freeze by updating `sources/redbear-0.2.5/` archive** and tagging the branch tip.
|
||||
|
||||
---
|
||||
|
||||
## 7. Out of scope (explicitly not part of 0.2.5 graphics freeze)
|
||||
|
||||
- Mesa 26.1.x fork rebase (§3.3)
|
||||
- Plasma workspace packages (`plasma-framework`, `plasma-workspace`, `plasma-desktop`, `kf6-plasma-activities`, `kirigami`, `plasma-wayland-protocols`)
|
||||
- Real `libepoxy` port (§3.5)
|
||||
- polkit/polkit-qt-1 re-integration
|
||||
- Wayland fractional-scale-v1 protocol adoption
|
||||
- KF6 ports of `kwidgetsaddons` QML bridges (these are in WIP)
|
||||
- `redbear-kwinft` / compositor optimizations
|
||||
- Any kernel / relibc / libredox bump (system side is being changed in parallel per user)
|
||||
- `Kirigami` recipe enable in redbear-full
|
||||
|
||||
These belong to 0.3.0.
|
||||
|
||||
---
|
||||
|
||||
## 8. Risks summary
|
||||
|
||||
| Risk | Severity | Mitigation |
|
||||
|-----------------------------------------------------|----------|------------|
|
||||
| KF6 6.10 → 6.27 means **17** patch rebases | High | Validate per-recipe; don't roll all at once. |
|
||||
| Mesa fork upstream gap (24.0.8 vs 26.1.4) | High | Stay on 24.0.8 for 0.2.5; document for 0.3.0. |
|
||||
| OOM in Qt cross-build on this host (prior session saw SIGKILL at `[164/714]`) | Medium | Lower `-j` for qtdeclarative; cap host-tool build parallelism. |
|
||||
| 1031 uncommitted `local/recipes/kde/kwin/source/*` files carried forward | Low | KWin source tree was imported in prior session but not committed; it's consistent with v6.7.2 source. Will be unwound if bump fails. |
|
||||
| `redox-drm` / `amdgpu` linux-kpi API drift | Medium | Audit against Mesa 24.0.8 ABI only; do not bump Mesa in 0.2.5. |
|
||||
| SDDM 0.21 vs KWin 6.7 ABI compat | Low | Verify on first full build. |
|
||||
| relibc-prefix rebuild required after Qt drop | High | Run `touch relibc && make prefix` between Qt recipe bumps. |
|
||||
|
||||
---
|
||||
|
||||
## 9. Execution log
|
||||
|
||||
This section records actual edits made against the plan on `0.2.5` on 2026-07-02.
|
||||
|
||||
### 9.1 Qt stack — bump committed
|
||||
|
||||
All 6 Qt sub-recipes now point at **6.11.1** with verified BLAKE3 hashes (real upstream latest stable, NOT 6.11.0 alpha1).
|
||||
|
||||
Commit `097dc10f70` (`qt(0.2.5): bump stack to Qt 6.11.1 (real upstream latest stable)`).
|
||||
|
||||
| Recipe | Old pin | New pin | BLAKE3 (verified) |
|
||||
|------------------|----------|----------|------------------------------------------------------------------|
|
||||
| `qtbase` | 6.8.2 | 6.11.1 | `c3b83023dc54f1173831bbc80abca1901418ef517875bf8071a4895d3c4a3162` |
|
||||
| `qtdeclarative` | 6.11.0a1 | 6.11.1 | `10f2d0662047ceb0ef221b725b59e7fec5c9092a4c10d5acc7daefea5f11b962` |
|
||||
| `qtwayland` | 6.11.0a1 | 6.11.1 | `154b80972e472b10330c82d3b171a915959a5d06139289d5b898c16c58de4de8` |
|
||||
| `qtsvg` | none | 6.11.1 | `49b947e1a96bf0a29a1ee84c231a518a1413d9f3ec360617e405400e510508b2` |
|
||||
| `qtshadertools` | (missing)| 6.11.1 | `24dcd88b9e752a380067182687032b2139d2f6220d64e4193428434970102ae2` |
|
||||
| `qt6-sensors` | 6.11.0a1 | 6.11.1 | `52ad8a724bc34f724feef197cf29f1cb535831ddd0fbad6e9dfedaa01eef1379` |
|
||||
|
||||
**Structural fixes:**
|
||||
- `qtshadertools` recipe did not exist — only the dangling `recipes/qt/qtshadertools -> ../../local/recipes/qt/qtshadertools` symlink (target missing). Recipe created following the `qt6-sensors` pattern. The target symlink now resolves. Without this, qtdeclarative cannot build.
|
||||
- `qtbase` recipe pointed at 6.8.2 tarball while `local/recipes/qt/qtbase/source/.cmake.conf` already said 6.11.0 — was a contradiction. Now consistent.
|
||||
|
||||
**Patches NOT yet rebased.** Per AGENTS.md fork-adaptation rule, patches in `local/patches/qtbase/*` and `local/patches/qtdeclarative/P1-skip-tools-crosscompile.patch` must be re-applied against the 6.11.1 source tree. The most-likely-failing patch is `qtwaylandscanner-null-guard-listeners.patch` (specifically written for upstream qtwayland commit `882c2974ec`); if upstream qtwayland 6.11.1's equivalent commit is now in 6.11.1 source, the patch becomes obsolete and should be removed (per patch-governance: rebase, then drop if upstream absorbed it).
|
||||
|
||||
### 9.2 Wayland / DRM / Input stack — bump committed
|
||||
|
||||
Commit `7bbf56217e` (`graphics(0.2.5): bump Wayland/DRM/Input/expat/seatd to upstream latest stable`).
|
||||
|
||||
| Recipe | Old pin | New pin | BLAKE3 |
|
||||
|---------------------|---------|---------|------------------------------------------------------------------|
|
||||
| `libwayland` | 1.24.0 | 1.25.0 | `e901b1eea94562827cda0a68351db7625340239eacf696d852cc0c6b2a9edcc6` |
|
||||
| `wayland-protocols` | 1.38 | 1.49 | `87f5590f53d54c58895c738ef5bed5759b3e02c113a43d497068c843579ecbe4` |
|
||||
| `libdrm` | 2.4.125 | 2.4.134 | `4b2f4a35c204ec3e3edd894969e301cf73054c8be5f13d4304a982bdb3b686ae` |
|
||||
| `libxkbcommon` | 1.7.0 | 1.9.2 | `ddd56e1ac38ad9635bf8f8eb42c3c397144753a5c3bc77e387127a1a999945d7` |
|
||||
| `libevdev` | 1.13.2 | 1.13.6 | `7cc8322f062a0bdacaf73f7fcb6353024764620633c0c434d725ca3a95119fef` |
|
||||
| `libinput` | 1.30.2 | 1.31.3 | `ae74b2c2202357119ec0f6e65951a9b2b38332ae5c8c3f59b05f6d80598ef033` |
|
||||
| `seatd-redox` | 0.9.1 | 0.9.3 | `c1653dc2766e90c1fa606869f527085d939e13a84369bfad0f6762deeada152c` |
|
||||
| `expat` | 2.5.0 | 2.8.2 | `eb92ab232e65da01f865df03624a1868c8af2a3fcd45301bb9d58efdf43267fd` |
|
||||
|
||||
Notes:
|
||||
- libxkbcommon: `xkbcommon.org/download` URL has been unreachable since at least 2026 (returns HTML 404). Switched the recipe to the github mirror URL `https://github.com/xkbcommon/libxkbcommon/archive/refs/tags/xkbcommon-1.9.2.tar.gz`. This may need to be revisited if upstream changes its release process.
|
||||
- dbus 1.16.2 == upstream latest, no change.
|
||||
|
||||
**Patches NOT yet rebased.** `local/patches/libdrm/00-xf86drm-redox-header.patch`, `01-virtgpu-drm-header.patch`, `02-redox-dispatch.patch`; `local/patches/libwayland/redox.patch`; the `redox.patch` in `recipes/libs/libevdev/` and `recipes/libs/libinput/` — all assume the older source. Rebase work is open.
|
||||
|
||||
### 9.3 KDE Plasma + Konsole — bump committed
|
||||
|
||||
Commit `3539e621a2` (`kde(0.2.5): bump KWin 6.6.5->6.7.2, kdecoration 6.3.4->6.7.2, konsole 24.08.3->26.04.3`).
|
||||
|
||||
| Recipe | Old pin | New pin | BLAKE3 |
|
||||
|-----------------|---------|---------|------------------------------------------------------------------|
|
||||
| `kwin` | 6.3.4 | 6.7.2 | `0bb8a5a2b1a3214396cde60756b296d9f70d08db4afd673b553a158a2f4bb17d` |
|
||||
| `kdecoration` | 6.3.4 | 6.7.2 | `f9802589d7e61099a4f26b3723c5f54e92e60919d35e6df348f0a7eccf2700de` |
|
||||
| `konsole` | 24.08.3 | 26.04.3 | `6fca3c2ea807ca0e12d014e2f6b5832bed31c2b15a3dac9ec6e28f3599f14930` |
|
||||
|
||||
Note: kde utility versioning convention changed; `konsole` now uses the `v26.04.3` `KDE-Calendar` style.
|
||||
|
||||
**Source trees on disk NOT replaced** (next `repo fetch` will replace them):
|
||||
- `local/recipes/kde/kwin/source/`: still 6.6.5 (prior session imported 6.6.5 source).
|
||||
- `local/recipes/kde/kdecoration/source/`: still 6.3.4.
|
||||
- `local/recipes/kde/konsole/source/`: still 24.08.
|
||||
|
||||
**Patches NOT yet rebased.** `local/patches/kwin/01-initial-migration.patch`, `local/patches/kdecoration/01-initial-migration.patch`, `local/recipes/kde/konsole/01-optional-multimedia-printsupport-core5compat.patch`. The KWin 6.6.5 → 6.7.2 delta (1 minor) is smaller than KF6's (17 minors), but KWin is the largest single-recipe patch surface in the project — patches will need careful review.
|
||||
|
||||
### 9.4 NOT bumped (deliberately)
|
||||
|
||||
- **KF6 6.10 → 6.27:** Per AGENTS.md §Patch Governance and the recipe-by-recipe fork-adaptation rule, a commit that bumps `recipe.toml` URLs to upstream versions whose **patch surface has not been rebased** is a dishonest commit — it lies about the actual build state. No `kf6-*` recipe.toml was bumped.
|
||||
- Real work that must happen before any `kf6-*` recipe bump can land: ~38 patch rebases for `local/patches/kf6-*/01-initial-migration.patch` against upstream KF6 6.27.0 source.
|
||||
- **Mesa 24.0.8 → 26.1.4:** still on the redox-os fork rebase plan (0.3.0). Per §3.3.
|
||||
- **SDDM 0.21.0:** already at upstream latest.
|
||||
- **kf6-attica, kf6-prison, kf6-kirigami, etc:** all targeted at v6.27.0 (real upstream latest) but see above.
|
||||
|
||||
### 9.5 Things to do before `./local/scripts/build-redbear.sh redbear-full` can succeed
|
||||
|
||||
In order:
|
||||
1. Per-recipe: rebase `local/patches/<recipe>/*.patch` against the new upstream source. Save rebased versions in place; do not bump `P<N>` numbers; do not delete patches unless upstream absorbed the change.
|
||||
2. `repo fetch` for each bumped recipe (now that recipe.toml points at new URLs).
|
||||
3. `touch relibc && make prefix` to refresh relibc stage in the cross-toolchain.
|
||||
4. `repo validate-patches <recipe>` for each.
|
||||
5. Touch-relibc-then-make-prefix between any relibc-aware recipe change (qtbase and friends touch relibc syscalls).
|
||||
6. Re-run `./local/scripts/build-redbear.sh redbear-full` and address new breakage as it surfaces.
|
||||
7. Address KF6 6.27.0 bump (multi-day; multi-week with 38 patch rebases).
|
||||
@@ -476,7 +476,7 @@ build artifacts). Updated `BLAKE3SUMS` with the new checksum.
|
||||
### Acceptance
|
||||
|
||||
- [x] `repo validate-patches relibc` passes all 25 patches
|
||||
- [x] `make all CONFIG_NAME=redbear-full` completes successfully
|
||||
- [x] `./local/scripts/build-redbear.sh redbear-full` completes successfully
|
||||
- [x] QEMU boots to login prompt with virtio-gpu (1280×800) and vesad console (1280×720)
|
||||
- [x] All protected recipes use only archived sources
|
||||
- [x] `diff -ruN` patches apply correctly after normalization
|
||||
|
||||
@@ -506,10 +506,14 @@ local-fork source tree.
|
||||
|
||||
**Problem.** `local/sources/base/` is a nested git repo (the
|
||||
local-fork model) with `origin = https://gitlab.redox-os.org/redox-os/base.git`.
|
||||
Red Bear's own base fork is at `https://gitea.redbearos.org/vasilito/redbear-os-base`.
|
||||
A Red Bear developer who commits inside `local/sources/base/` and runs
|
||||
`git push origin master` would push Red Bear fork commits **to upstream
|
||||
Redox**, where they will be rejected (or worse, silently fail).
|
||||
**Resolved 2026-07-01:** the Red Bear-specific per-component fork at
|
||||
`vasilito/redbear-os-base` has been migrated to the `submodule/base`
|
||||
branch inside the canonical `RedBear-OS` repo per the SINGLE-REPO RULE
|
||||
(see `local/AGENTS.md`). The base component now lives only as the
|
||||
`submodule/base` branch on `RedBear-OS`. A Red Bear developer who
|
||||
commits inside `local/sources/base/` and runs `git push origin master`
|
||||
would push Red Bear fork commits **to upstream Redox**, where they
|
||||
will be rejected (or worse, silently fail).
|
||||
|
||||
**Current behavior.** Most Red Bear base commits are made by the
|
||||
`Red Bear OS <build@redbearos.org>` author bot during automated syncs, which
|
||||
|
||||
@@ -710,7 +710,7 @@ local/patches/relibc/P4-initgroups.patch
|
||||
|-------|---------|
|
||||
| Kernel compiles | `make r.kernel` |
|
||||
| relibc compiles | `make r.relibc` |
|
||||
| Full OS builds | `make all CONFIG_NAME=redbear-full` |
|
||||
| Full OS builds | `./local/scripts/build-redbear.sh redbear-full` |
|
||||
|
||||
### 8.2 Runtime Evidence
|
||||
|
||||
|
||||
@@ -0,0 +1,763 @@
|
||||
# Red Bear OS — Multi-Threading Comprehensive Assessment and Implementation Plan
|
||||
|
||||
**Date:** 2026-07-02 (initial assessment); 2026-07-02 (Phase 0c patch recovery complete)
|
||||
**Scope:** Full-stack multi-threading audit: hardware/SMP, kernel scheduler, kernel futex, kernel syscall ABI, relibc pthreads, userspace threading correctness and performance
|
||||
**Status:** Authoritative — supersedes `archived/KERNEL-SCHEDULER-MULTITHREAD-IMPROVEMENT-PLAN.md` and `archived/SCHEDULER-REVIEW-FINAL.md` for all threading matters
|
||||
**Validation levels:** `builds` → `enumerates` → `usable` → `validated` → `hardware-validated`
|
||||
|
||||
---
|
||||
|
||||
## UPDATE — Phase 0c Patch Recovery (2026-07-02)
|
||||
|
||||
The assessment in §1 below was accurate as of the time of writing. The Phase 0c
|
||||
patch recovery was then executed in the same session, landing the following
|
||||
commits on the local kernel fork (`local/sources/kernel/`):
|
||||
|
||||
| Commit | Effect |
|
||||
|--------|--------|
|
||||
| `ed3f0e1` | **P6-futex-sharding**: replaces single global `Mutex<L1, FutexList>` with 64-shard hash table |
|
||||
| `5fb42fc` | **RUN_QUEUE_COUNT pre-flight**: defines `pub const RUN_QUEUE_COUNT: usize = 40;` (was missing from patch chain) |
|
||||
| `cbf051e` | **P7-cache-affine-context (manual)**: surgically inserts `SchedPolicy` enum, `SCHED_PRIORITY_LEVELS`, helper functions, and 9 new Context fields (last_cpu, sched_policy, sched_rt_priority, sched_rr_ticks_consumed, sched_static_prio, sched_rr_quantum, vruntime, futex_pi_*, PhysicalAddress import) |
|
||||
| `f7652fc` | **P5-context-mod-sched + P8-percpu-sched + P8-percpu-wiring**: PerCpuSched struct with SyncUnsafeCell-wrapped per-CPU run queues, get_percpu_block helper, full per-CPU scheduler wiring in switch.rs (pick_next_from_queues, pick_next_from_global_queues, select_next_context) |
|
||||
| `7fc8bbf` | **P8-initial-placement + P9-numa-topology + P9-proc-lock-ordering**: least-loaded-CPU spawn, NUMA topology hints, proc scheme lock order fix |
|
||||
| `327c150` | **`set_sched_policy` + `set_sched_other_prio`**: missing Context methods called by proc scheme handles |
|
||||
| `e8ec916` | **fadt usize/u32 type mismatch fix**: changes FADT_MIN_SIZE constants to `u32` to match `Sdt::length()` |
|
||||
| `4789d54` | **SchedPolicy/Name/Priority proc scheme handles**: adds `/proc/<tid>/{name, sched-policy, priority}` paths and read/write handlers |
|
||||
|
||||
**Upstream check (bg_27f3578a, 2026-07-02):** verified that `gitlab.redox-os.org/redox-os/kernel`
|
||||
master (commit `aa7e7d2f44ba7cd9d1b007d37db139b345d46b8a`) has **NONE** of these features. The
|
||||
local fork is the sole implementation. No upstream cherry-picks are available.
|
||||
|
||||
**Plan-vs-actual state:**
|
||||
|
||||
| Plan claim (Section 1) | Actual state after Phase 0c |
|
||||
|---|---|
|
||||
| "Baseline DWRR scheduler only (no per-CPU queues, no work stealing, no load balancing, no vruntime, no RT scheduling, no cache-affine)" | ✅ All 5 features now present. Per-CPU `PerCpuSched` with `run_queues`, `steal_work()`, `migrate_one_context()`, `maybe_balance_queues()`, `vruntime` CFS-style weighting, `last_cpu` cache-affine vruntime bonus, `SchedPolicy::Fifo`/`RoundRobin` RT scanning in `pick_next_from_queues` |
|
||||
| "Baseline futex only (WAIT/WAIT64/WAKE — no sharding, no PI, no REQUEUE, no robust, no WAKE_OP, no BITSET)" | 🟡 **Sharding done** (64-shard hash). REQUEUE/PI/robust/WAKE_OP/BITSET still missing. |
|
||||
| "relibc `sched_*` are all `todo!()`, `pthread_setschedparam` is a no-op, robust mutexes are `todo_skip!`, PI is absent" | 🟡 relibc fork only has the `pthread_cond_signal` POSIX fix so far. `sched_*`, robust, PI still pending in relibc. |
|
||||
| "❌ Missing from relibc: CPU affinity API, Thread naming" | 🟡 **Kernel side done** — `/proc/<tid>/{sched-policy, name, priority}` handles. relibc pthread_setname_np / pthread_setaffinity_np / sched_setscheduler still pending. |
|
||||
| "cargo check has 1 pre-existing error" | ✅ **Fixed** — `cargo check` now exits 0 with 0 errors. |
|
||||
|
||||
**Phase 0c status: kernel side complete (all 8 of 8 applicable kernel P5–P9 patches
|
||||
re-applied or made obsolete by the existing refactored scheduler). Remaining work
|
||||
is in the relibc fork (Phase 0e) and the futex-REQUEUE/PI/robust work (Phase 1).**
|
||||
|
||||
The detailed analysis in §1–§9 below is preserved as historical record. The status
|
||||
column "🚧 Missing" in §1 should be re-read as "now present in the local kernel
|
||||
fork, pending relibc userspace wiring."
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
## 1. Executive Summary
|
||||
|
||||
### The Critical Finding — Lost Threading Work
|
||||
|
||||
The P5–P9 scheduler and futex enhancement work (documented as "complete" in the archived
|
||||
plans) was **lost during the local fork migration** (2026-06). The local forks at
|
||||
`local/sources/kernel/` and `local/sources/relibc/` were created from **upstream Redox
|
||||
baselines** that did NOT include the Red Bear enhancement patches. The patches exist in
|
||||
`local/patches/kernel/` and `local/patches/relibc/` but are **not wired into the recipes**
|
||||
(both `recipe.toml` files use `path = "..."` with no `patches = [...]` list).
|
||||
|
||||
**Impact:** The running kernel has:
|
||||
- Baseline DWRR scheduler only (no per-CPU queues, no work stealing, no load balancing, no vruntime, no RT scheduling, no cache-affine)
|
||||
- Baseline futex only (WAIT/WAIT64/WAKE — no sharding, no PI, no REQUEUE, no robust, no WAKE_OP, no BITSET)
|
||||
- relibc `sched_*` are all `todo!()`, `pthread_setschedparam` is a no-op, robust mutexes are `todo_skip!`, PI is absent
|
||||
|
||||
**Recovery:** 13 of 18 kernel P5–P9 patches apply cleanly to the current fork. 5 fail due to
|
||||
patch-chain dependencies (they expect earlier patches applied first). The bulk of the work is
|
||||
recoverable by re-applying patches to the forks and committing them.
|
||||
|
||||
### What Actually Works Today
|
||||
|
||||
| Layer | Status | Detail |
|
||||
|-------|--------|--------|
|
||||
| **SMP boot** | ✅ Solid | INIT→SIPI sequence correct, per-CPU PCR via GS_BASE, x2APIC support |
|
||||
| **Context switching** | ✅ Solid | FPU/SIMD/AVX state save via XSAVE, FSBASE/GSBASE swap (FSGSBASE or MSR), correct callee-saved register save |
|
||||
| **TLB shootdown protocol** | ✅ Correct | AtomicBool flag + IPI + ack counter with `fence(SeqCst)` race prevention |
|
||||
| **Basic thread lifecycle** | ✅ Functional | pthread_create/join/detach/exit through proc scheme + redox_rt clone |
|
||||
| **Basic synchronization** | ✅ Functional | Futex-backed mutex, condvar, rwlock, barrier, spinlock, once |
|
||||
| **TLS** | ✅ Functional | ELF PT_TLS + pthread_key_create/getspecific/setspecific |
|
||||
| **Per-CPU data** | ✅ Functional | PercpuBlock via GS_BASE, all per-CPU state accessible |
|
||||
| **Signal delivery** | ✅ Functional | Shared-memory Sigcontrol pages, per-thread masks, trampoline |
|
||||
| **Scheduler algorithm** | 🚧 Basic DWRR | 40 priority levels, geometric weights, cooperative preemption (3-tick quantum) |
|
||||
| **Futex operations** | 🚧 Basic only | WAIT/WAIT64/WAKE with single global mutex |
|
||||
| **SMP load balancing** | ❌ Missing | No work stealing, no migration, contexts stuck on birth CPU |
|
||||
| **RT scheduling** | ❌ Missing | No SCHED_FIFO/SCHED_RR, no kernel policy dispatch |
|
||||
| **Futex REQUEUE** | ❌ Missing | Condvar broadcast causes thundering herd |
|
||||
| **Robust mutexes** | ❌ Missing | Thread death while holding mutex → permanent deadlock |
|
||||
| **PI futexes** | ❌ Missing | No priority inheritance → priority inversion risk |
|
||||
| **CPU affinity API** | ❌ Missing from relibc | Kernel supports sched_affinity field but no userspace API |
|
||||
| **Thread naming** | ❌ Missing from relibc | Kernel supports name field but no userspace API |
|
||||
| **Per-page TLB flush** | ❌ Missing | `invalidate_all()` = full CR3 reload on every shootdown |
|
||||
| **NUMA awareness** | ❌ Missing | No SRAT/SLIT, no proximity domains, flat memory model |
|
||||
| **IRQ balancing** | ❌ Missing | All legacy IRQs hardwired to BSP |
|
||||
|
||||
---
|
||||
|
||||
## 2. Layer-by-Layer Assessment
|
||||
|
||||
### 2.1 Hardware / SMP Layer
|
||||
|
||||
**Files:** `src/acpi/madt/arch/x86.rs`, `src/arch/x86_shared/start.rs`,
|
||||
`src/arch/x86_shared/device/local_apic.rs`, `src/arch/x86_shared/device/ioapic.rs`,
|
||||
`src/arch/x86_shared/ipi.rs`, `src/arch/x86_shared/interrupt/ipi.rs`, `src/percpu.rs`,
|
||||
`src/arch/x86_shared/gdt.rs`
|
||||
|
||||
**Verdict: Functional foundation, performance gaps.**
|
||||
|
||||
| Component | Status | Detail |
|
||||
|-----------|--------|--------|
|
||||
| AP boot (INIT/SIPI) | ✅ validated | Correct trampoline at 0x8000, per-AP PCR/IDT/stack allocation |
|
||||
| x2APIC mode | ✅ builds | Detected via CPUID, MSR-based access, APIC ID detection |
|
||||
| Per-CPU PCR via GS_BASE | ✅ validated | `PercpuBlock::current()` reads from PCR, SWAPGS protocol correct |
|
||||
| IPI send/receive | ✅ functional | 5 IPI kinds (Wakeup/Tlb/Switch/Pit/Profile), broadcast + unicast |
|
||||
| TLB shootdown | ✅ correct | AtomicBool + IPI + ack with `fence(SeqCst)` race prevention |
|
||||
| TLB granularity | ❌ coarse | Full CR3 reload (`mov cr3, cr3`) on every shootdown — no INVLPG |
|
||||
| TLB broadcast | 🚧 sequential | Iterates CPUs individually, doesn't use ICR "all excluding self" shorthand |
|
||||
| IRQ routing | ❌ BSP-only | Legacy I/O APIC entries hardcode `dest: bsp_apic_id` |
|
||||
| NUMA | ❌ absent | No SRAT/SLIT, no proximity domains |
|
||||
| SMT/HT topology | ❌ absent | No cache hierarchy, no hyperthread awareness |
|
||||
| Idle loop | ✅ functional | MWAIT with deepest C-state or HLT fallback |
|
||||
| W^X for trampoline | 🚧 minor | Trampoline page briefly W+X, unmapped after AP boot |
|
||||
|
||||
### 2.2 Kernel Scheduler Layer
|
||||
|
||||
**Files:** `src/context/switch.rs`, `src/context/mod.rs`, `src/context/context.rs`,
|
||||
`src/context/timeout.rs`
|
||||
|
||||
**Verdict: Correct but primitive — DWRR only, no SMP balancing, no RT classes.**
|
||||
|
||||
**Algorithm:** Deficit Weighted Round Robin (DWRR)
|
||||
- 40 priority levels, each a `VecDeque<WeakContextRef>`
|
||||
- Geometric weights: `SCHED_PRIO_TO_WEIGHT[i] ≈ 1.25^i` (88761 → 15)
|
||||
- Per-CPU `balance` accumulator drives dequeue decisions
|
||||
- Quantum: 3 PIT ticks (~12.2ms) per scheduling round
|
||||
- Cooperative preemption: `preempt_locks > 0` disables preemption
|
||||
|
||||
**Global locks:**
|
||||
- `RUN_CONTEXTS: Mutex<L1, RunContextData>` — all 40 priority queues under one L1 lock
|
||||
- `IDLE_CONTEXTS: Mutex<L2, VecDeque<WeakContextRef>>` — sleeping contexts
|
||||
- `CONTEXT_SWITCH_LOCK: AtomicBool` — global CAS spinlock serializing all context switches
|
||||
|
||||
**What's missing (all was in lost P5–P9 work):**
|
||||
|
||||
| Gap | Lost Patch | Recoverable? |
|
||||
|-----|-----------|-------------|
|
||||
| Per-CPU run queues (eliminate global L1) | P6-percpu-runqueues, P8-percpu-sched, P8-percpu-wiring | ✅ applies cleanly |
|
||||
| Work stealing | P8-work-stealing | ❌ needs rebase (depends on per-CPU wiring) |
|
||||
| Initial placement (least-loaded CPU) | P8-initial-placement | ✅ applies cleanly |
|
||||
| Load balancing | P8-load-balance (absorbed) | needs verification |
|
||||
| Vruntime tracking + min-vruntime selection | P6-vruntime-switch | ✅ applies cleanly |
|
||||
| SchedPolicy enum (FIFO/RR/Other) | P5-sched-rt-policy | ✅ applies cleanly |
|
||||
| RT scheduling dispatch | P5-sched-rt-policy | ✅ applies cleanly |
|
||||
| Cache-affine scheduling | P7-cache-affine-switch | ✅ applies cleanly |
|
||||
| NUMA topology hints | P9-numa-topology | ✅ applies cleanly |
|
||||
|
||||
### 2.3 Kernel Futex Layer
|
||||
|
||||
**File:** `src/syscall/futex.rs`
|
||||
|
||||
**Verdict: Baseline only — critical operations missing for desktop workloads.**
|
||||
|
||||
| Operation | Status | Impact of Absence |
|
||||
|-----------|--------|-------------------|
|
||||
| `FUTEX_WAIT` (32-bit) | ✅ | — |
|
||||
| `FUTEX_WAIT64` (64-bit) | ✅ | — |
|
||||
| `FUTEX_WAKE` | ✅ | — |
|
||||
| `FUTEX_REQUEUE` | ❌ returns EINVAL | `pthread_cond_broadcast` wakes ALL waiters (thundering herd) |
|
||||
| `FUTEX_CMP_REQUEUE` | ❌ not defined | Same + atomicity gap |
|
||||
| `FUTEX_WAKE_OP` | ❌ not defined | glibc mutex fast path unavailable |
|
||||
| `FUTEX_WAIT_BITSET` | ❌ not defined | `pselect`/`ppoll` optimization unavailable |
|
||||
| `FUTEX_WAKE_BITSET` | ❌ not defined | Targeted wake unavailable |
|
||||
| `FUTEX_LOCK_PI` / `UNLOCK_PI` | ❌ not defined | Priority inversion unprotected |
|
||||
| Robust futex list | ❌ not defined | Thread death → permanent deadlock |
|
||||
| Futex sharding (per-futex lock) | ❌ single global L1 mutex | All futex ops on all CPUs contend on one lock |
|
||||
| Process-private futexes | ❌ global table | Unnecessary cross-process visibility |
|
||||
|
||||
**Architecture:**
|
||||
```
|
||||
static FUTEXES: Mutex<L1, FutexList> // single global lock
|
||||
type FutexList = HashMap<PhysicalAddress, Vec<FutexEntry>>
|
||||
```
|
||||
|
||||
Physical address is the key (enables cross-address-space futex via MAP_SHARED).
|
||||
Virtual address + Weak<AddrSpaceWrapper> used for CoW disambiguation.
|
||||
|
||||
**Recoverable work (lost patches):**
|
||||
|
||||
| Feature | Lost Patch | Applies? |
|
||||
|---------|-----------|----------|
|
||||
| 64-shard hash table | P6-futex-sharding | ✅ cleanly |
|
||||
| FUTEX_REQUEUE + CMP_REQUEUE | P8-futex-requeue | ❌ needs rebase |
|
||||
| PI futex (LOCK_PI/UNLOCK_PI/TRYLOCK_PI) | P8-futex-pi | ❌ needs rebase |
|
||||
| PI CAS fix | P9-futex-pi-cas-fix | ❌ needs rebase |
|
||||
| Robust futex list | P8-futex-robust | ❌ needs rebase |
|
||||
|
||||
The 4 failing patches likely fail because they depend on sharding (P6-futex-sharding) being
|
||||
applied first. Apply in order: P6-sharding → P8-requeue → P8-pi → P8-robust → P9-pi-cas-fix.
|
||||
|
||||
### 2.4 Kernel Syscall ABI Layer
|
||||
|
||||
**Files:** `src/syscall/mod.rs`, `src/syscall/futex.rs`, `src/syscall/time.rs`,
|
||||
`src/syscall/process.rs`, `local/sources/syscall/src/number.rs`, `src/scheme/proc.rs`
|
||||
|
||||
**Verdict: Minimal surface — most threading done via proc scheme, not syscalls.**
|
||||
|
||||
The kernel defines only ~35 syscall numbers. Threading-relevant ones:
|
||||
|
||||
| Syscall | Status | Notes |
|
||||
|---------|--------|-------|
|
||||
| `SYS_FUTEX` (240) | ✅ partial | WAIT/WAIT64/WAKE only |
|
||||
| `SYS_YIELD` (158) | ✅ | `context::switch()` + signal handler |
|
||||
| `SYS_FMAP` (900) | ✅ | Anonymous + file-backed mmap |
|
||||
| `SYS_FUNMAP` (92) | ✅ | munmap |
|
||||
| `SYS_MPROTECT` (125) | ✅ | |
|
||||
| `SYS_MREMAP` (155) | ✅ | |
|
||||
| `SYS_NANOSLEEP` (162) | ✅ | EINTR-aware |
|
||||
| `SYS_CLOCK_GETTIME` (265) | ✅ partial | REALTIME + MONOTONIC only |
|
||||
|
||||
**Threading done via proc scheme (not syscalls):**
|
||||
|
||||
| Operation | Mechanism |
|
||||
|-----------|-----------|
|
||||
| Thread/process creation | `proc:` scheme: open "new-context", share addr_space + files via kdup |
|
||||
| waitpid | `proc:` scheme: `EVENT_READ` on context fd |
|
||||
| getpid/gettid | `proc:` scheme: read "attrs" handle |
|
||||
| kill/tkill | `proc:` scheme: `ForceKill` / `Interrupt` ContextVerb |
|
||||
| CPU affinity | `proc:` scheme: write "sched-affinity" handle |
|
||||
| Priority | `proc:` scheme: write "attrs" prio field |
|
||||
| Signal setup | `proc:` scheme: write "sighandler" + shared Sigcontrol pages |
|
||||
| TLS base (FSBASE) | `proc:` scheme: write "regs/env" EnvRegisters |
|
||||
|
||||
**Completely missing syscalls (no number, no handler):**
|
||||
`clone`, `fork`, `vfork`, `waitpid`, `wait4`, `kill`, `tkill`, `tgkill`, `arch_prctl`,
|
||||
`set_thread_area`, `set_tid_address`, `set_robust_list`, `get_robust_list`,
|
||||
`sched_setaffinity`, `sched_getaffinity`, `sched_setscheduler`, `sched_getparam`,
|
||||
`sigaction`, `sigprocmask`, `sigpending`, `sigsuspend`, `sigtimedwait`,
|
||||
`timer_create`, `timer_settime`, `timer_delete`, `timerfd_create`,
|
||||
`getrusage`, `setrlimit`, `getrlimit`, `times`
|
||||
|
||||
### 2.5 relibc Pthread Layer
|
||||
|
||||
**Files:** `src/pthread/mod.rs`, `src/sync/*.rs`, `src/header/pthread/*.rs`,
|
||||
`src/header/sched/mod.rs`, `src/ld_so/tcb.rs`, `src/platform/redox/mod.rs`
|
||||
|
||||
**Verdict: Core pthreads solid, scheduling/robust/PI absent, several POSIX gaps.**
|
||||
|
||||
#### Fully Working (futex-backed)
|
||||
|
||||
| API Group | Backend | Notes |
|
||||
|-----------|---------|-------|
|
||||
| `pthread_create/join/detach/exit` | redox_rt clone + Waitval | Stack via mmap, TLS via Tcb::new() |
|
||||
| `pthread_cancel/setcancelstate/testcancel` | SIGRT_RLCT_CANCEL (33) | Deferred cancellation only |
|
||||
| `pthread_mutex_*` (normal/recursive/errorcheck) | AtomicU32 CAS + futex_wait/wake | 3-state: unlocked/locked/waiters |
|
||||
| `pthread_cond_*` | Two-counter futex design | CLOCK_REALTIME only (monotonic = stub) |
|
||||
| `pthread_rwlock_*` | AtomicU32 + futex | Reader count + WAITING_WR bit |
|
||||
| `pthread_barrier_*` | Mutex + Cond | gen_id wrapping counter |
|
||||
| `pthread_spin_*` | AtomicI32 CAS | No futex, pure spinning |
|
||||
| `pthread_once` | 3-state futex (UNINIT→INITING→INIT) | |
|
||||
| `pthread_key_create/getspecific/setspecific/delete` | BTreeMap global + thread_local values | Destructor iteration per POSIX |
|
||||
| `pthread_sigmask` | Delegates to sigprocmask | |
|
||||
| `pthread_kill` | redox_rt::rlct_kill | |
|
||||
| `pthread_atfork` | Thread-local LinkedList hooks | |
|
||||
| ELF TLS (`__thread` / `#[thread_local]`) | PT_TLS + Tcb | Static + dynamic DTV for dlopen |
|
||||
| `pthread_attr_*` (getters/setters) | RlctAttr struct | |
|
||||
|
||||
#### Stubs / No-ops / Missing
|
||||
|
||||
| API | Status | Root Cause |
|
||||
|-----|--------|------------|
|
||||
| `sched_get_priority_max/min` | `todo!()` | Kernel has no scheduling policy API |
|
||||
| `sched_getparam/setparam` | `todo!()` | Same |
|
||||
| `sched_setscheduler` | `todo!()` | Same |
|
||||
| `sched_rr_get_interval` | `todo!()` | Same |
|
||||
| `pthread_setschedparam` | No-op (returns Ok) | Kernel ignores policy |
|
||||
| `pthread_setschedprio` | No-op (returns Ok) | Kernel ignores priority change |
|
||||
| `pthread_getschedparam` | `todo!()` | |
|
||||
| `pthread_getcpuclockid` | ENOENT | No per-thread CPU clock |
|
||||
| `pthread_mutex_consistent` | `todo_skip!` | Robust mutex not implemented |
|
||||
| `pthread_mutex_getprioceiling` | `todo_skip!` | Priority ceiling not implemented |
|
||||
| `pthread_mutex_setprioceiling` | `todo_skip!` | Same |
|
||||
| `pthread_mutexattr_setprotocol` (PRIO_INHERIT) | Accepted, no-op | PI futex missing |
|
||||
| `pthread_mutexattr_setrobust` (ROBUST) | Accepted, no-op | Robust futex missing |
|
||||
| `pthread_cond_init` CLOCK_MONOTONIC | `todo_skip!` | |
|
||||
| `pthread_cond_signal` | Calls broadcast (wakes ALL) | Missing FUTEX_REQUEUE optimization |
|
||||
| `pthread_setaffinity_np` | Not defined | |
|
||||
| `pthread_getaffinity_np` | Not defined | |
|
||||
| `pthread_setname_np` | Not defined | |
|
||||
| `pthread_getname_np` | Not defined | |
|
||||
| `pthread_setcanceltype` | Always returns DEFERRED | ASYNC not tracked |
|
||||
| Guard pages | Attribute stored, not mapped | No PROT_NONE page before stack |
|
||||
| PTHREAD_KEYS_MAX limit | Not checked | |
|
||||
|
||||
---
|
||||
|
||||
## 3. Gap Classification
|
||||
|
||||
### 3.1 Correctness Gaps (Must Fix — Silent Data Corruption or Deadlock)
|
||||
|
||||
| # | Gap | Impact | Fix Location |
|
||||
|---|-----|--------|-------------|
|
||||
| C1 | **No robust mutexes** | Thread death while holding mutex → permanent deadlock for all waiters | Kernel: robust futex list + relibc: pthread_mutex_consistent |
|
||||
| C2 | **No PI futexes** | Priority inversion: low-prio thread blocks high-prio thread indefinitely | Kernel: FUTEX_LOCK_PI/UNLOCK_PI + relibc: mutexattr_setprotocol |
|
||||
| C3 | **`pthread_cond_signal` wakes ALL** | Correctness: wastes CPU. Performance: thundering herd on every signal | relibc: use true wake(1) — may need FUTEX_REQUEUE |
|
||||
| C4 | **`fork()` not thread-safe** | `pthread_atfork` hooks exist but child inherits locked mutexes | relibc: implement atfork child handlers properly |
|
||||
|
||||
### 3.2 Performance Gaps (Must Fix for Desktop Responsiveness)
|
||||
|
||||
| # | Gap | Impact | Fix Location |
|
||||
|---|-----|--------|-------------|
|
||||
| P1 | **No SMP load balancing** | Cores sit idle while others are overloaded | Kernel: work stealing + initial placement |
|
||||
| P2 | **No futex sharding** | Single global L1 mutex for ALL futex ops on ALL CPUs | Kernel: 64-shard hash table |
|
||||
| P3 | **No FUTEX_REQUEUE** | `pthread_cond_broadcast` wakes all → thundering herd | Kernel: REQUEUE + CMP_REQUEUE |
|
||||
| P4 | **Full TLB flush on every shootdown** | Per-page mprotect/munmap flushes entire TLB on all cores | Kernel: INVLPG-based selective flush |
|
||||
| P5 | **Global context switch lock** | Serialization bottleneck beyond ~8 cores | Kernel: per-CPU context switch (needs per-CPU run queues) |
|
||||
| P6 | **All IRQs to BSP** | CPU 0 handles all interrupts, cache thrash, latency | Kernel: IRQ steering in I/O APIC + MSI/MSI-X dest field |
|
||||
| P7 | **No RT scheduling** | Audio/compositor threads can't get priority | Kernel: SchedPolicy + RT dispatch + relibc: sched_setscheduler |
|
||||
|
||||
### 3.3 POSIX Completeness Gaps (Must Fix for Application Compatibility)
|
||||
|
||||
| # | Gap | Impact | Fix Location |
|
||||
|---|-----|--------|-------------|
|
||||
| X1 | `sched_*` all `todo!()` | Applications calling sched_setscheduler panic | relibc: implement via proc scheme |
|
||||
| X2 | `pthread_setschedparam` no-op | Apps can't change thread priority | relibc: wire to proc scheme prio write |
|
||||
| X3 | `pthread_setaffinity_np` missing | Apps can't pin threads to CPUs | relibc: implement via proc scheme affinity write |
|
||||
| X4 | `pthread_setname_np` missing | Debugging harder (no thread names in /proc) | relibc: implement via proc scheme name write |
|
||||
| X5 | `pthread_getcpuclockid` ENOENT | Per-thread profiling impossible | relibc + kernel: expose cpu_time via clock |
|
||||
| X6 | Guard pages not mapped | Stack overflow → silent corruption, no SIGSEGV | relibc: mmap PROT_NONE guard page in pthread_create |
|
||||
| X7 | `pthread_cond_init` monotonic stub | CLOCK_MONOTONIC condvars use REALTIME (affected by wall clock jumps) | relibc: implement monotonic condvar |
|
||||
|
||||
---
|
||||
|
||||
## 4. Implementation Plan
|
||||
|
||||
### Phase 0: Patch Recovery — Re-Apply Lost Threading Work (Week 1–2)
|
||||
|
||||
**Goal:** Recover the P5–P9 work that was lost during the local fork migration.
|
||||
|
||||
**This is the highest-priority phase — it restores ~6 months of work with minimal new code.**
|
||||
|
||||
#### 0.1 — Re-apply kernel scheduler patches to local fork
|
||||
|
||||
Apply in dependency order to `local/sources/kernel/`:
|
||||
|
||||
| Order | Patch | Status | Action |
|
||||
|-------|-------|--------|--------|
|
||||
| 1 | P6-futex-sharding | ✅ applies | Commit directly |
|
||||
| 2 | P6-percpu-runqueues | ✅ applies | Commit directly |
|
||||
| 3 | P8-percpu-sched | ✅ applies | Commit directly |
|
||||
| 4 | P8-percpu-wiring | ✅ applies | Commit directly |
|
||||
| 5 | P8-initial-placement | ✅ applies | Commit directly |
|
||||
| 6 | P5-sched-rt-policy | ✅ applies | Commit directly |
|
||||
| 7 | P5-context-mod-sched | ✅ applies | Commit directly |
|
||||
| 8 | P6-vruntime-switch | ✅ applies | Commit directly |
|
||||
| 9 | P7-cache-affine-switch | ✅ applies | Commit directly |
|
||||
| 10 | P9-numa-topology | ✅ applies | Commit directly |
|
||||
| 11 | P9-proc-lock-ordering | ✅ applies | Commit directly |
|
||||
| 12 | P8-work-stealing | ❌ needs rebase | Rebase against 1–11, then apply |
|
||||
| 13 | P8-futex-requeue | ❌ needs rebase | Rebase against P6-sharding (#1), then apply |
|
||||
| 14 | P8-futex-pi | ❌ needs rebase | Rebase against #13, then apply |
|
||||
| 15 | P8-futex-robust | ❌ needs rebase | Rebase against #14, then apply |
|
||||
| 16 | P9-futex-pi-cas-fix | ❌ needs rebase | Rebase against #14, then apply |
|
||||
| 17 | P7-scheduler-improvements | ❌ needs rebase | Rebase against 1–11, then apply |
|
||||
|
||||
**Verification after each patch:**
|
||||
```bash
|
||||
cd local/sources/kernel
|
||||
cargo check # must pass
|
||||
```
|
||||
|
||||
#### 0.2 — Re-apply relibc threading patches to local fork
|
||||
|
||||
Apply to `local/sources/relibc/`:
|
||||
|
||||
| Patch | Action |
|
||||
|-------|--------|
|
||||
| P3-threads.patch | ✅ applies — commit |
|
||||
| P3-barrier-smp-futex (from absorbed/) | Verify already in fork; if not, apply |
|
||||
| P3-pthread-signal-races (from absorbed/) | Verify already in fork |
|
||||
| P3-pthread-yield (from absorbed/) | Verify already in fork |
|
||||
| P5-robust-mutexes (from absorbed/) | Verify; re-apply if missing |
|
||||
| P5-robust-mutex-enotrec-fix (from absorbed/) | Same |
|
||||
| P5-sched-api (from absorbed/) | Same |
|
||||
| P7-pthread-affinity (from absorbed/) | Same |
|
||||
| P7-pthread-setname (from absorbed/) | Same |
|
||||
| P7-setpriority (from absorbed/) | Same |
|
||||
| P9-spin-and-barrier (from absorbed/) | Same |
|
||||
| P9-spin-fix (from absorbed/) | Same |
|
||||
| P3-semaphore-comprehensive | ✅ applies |
|
||||
|
||||
**Verification:**
|
||||
```bash
|
||||
cd local/sources/relibc
|
||||
make all # must pass
|
||||
touch relibc && make prefix # rebuild prefix with new libc
|
||||
```
|
||||
|
||||
#### 0.3 — Build and smoke test
|
||||
|
||||
```bash
|
||||
export REDBEAR_ALLOW_PROTECTED_FETCH=1
|
||||
./local/scripts/build-redbear.sh --upstream redbear-mini
|
||||
make qemu # verify boot + basic operation
|
||||
```
|
||||
|
||||
**Success criteria:** redbear-mini boots, multi-threaded daemons (pcid, xhcid) start, no kernel panic.
|
||||
|
||||
---
|
||||
|
||||
### Phase 1: Futex Completeness (Week 2–4)
|
||||
|
||||
**Goal:** Close the futex operation gaps that affect correctness and performance.
|
||||
|
||||
**Depends on:** Phase 0 complete (sharding applied first).
|
||||
|
||||
#### 1.1 — FUTEX_REQUEUE + FUTEX_CMP_REQUEUE
|
||||
|
||||
**Kernel:** `src/syscall/futex.rs`
|
||||
- Add `FUTEX_REQUEUE` and `FUTEX_CMP_REQUEUE` to the futex dispatcher
|
||||
- Implement: move up to `val` waiters from addr1 → addr2, optionally compare `*addr1 == val2`
|
||||
- Requires locking TWO shards (acquire both in deterministic order to avoid deadlock)
|
||||
|
||||
**relibc:** `src/sync/cond.rs`
|
||||
- Change `pthread_cond_broadcast` to use `FUTEX_REQUEUE` (move waiters from condvar futex to mutex futex)
|
||||
- Change `pthread_cond_signal` to wake exactly 1 (not all)
|
||||
|
||||
**Impact:** Eliminates thundering herd on every `pthread_cond_broadcast`. Major win for Qt event loop, KWin compositor, Mesa worker threads.
|
||||
|
||||
#### 1.2 — PI Futexes (FUTEX_LOCK_PI / FUTEX_UNLOCK_PI / FUTEX_TRYLOCK_PI)
|
||||
|
||||
**Kernel:** `src/syscall/futex.rs`
|
||||
- Add `PiState` tracking per futex: owner context + waiter list with priorities
|
||||
- On `LOCK_PI` block: boost owner's priority to waiter's priority
|
||||
- On `UNLOCK_PI`: restore original priority, wake highest-priority waiter
|
||||
- Requires kernel RT scheduling (Phase 0.1 #6–7: P5-sched-rt-policy)
|
||||
|
||||
**relibc:** `src/sync/pthread_mutex.rs`
|
||||
- Implement `PTHREAD_PRIO_INHERIT` protocol path using PI futex
|
||||
- Replace `todo_skip!` in `pthread_mutex_consistent` with real implementation
|
||||
|
||||
#### 1.3 — Robust Futex List
|
||||
|
||||
**Kernel:** `src/syscall/futex.rs` + `src/context/context.rs`
|
||||
- Add `robust_list_head: Option<usize>` to `Context` struct
|
||||
- Implement `set_robust_list` / `get_robust_list` via proc scheme or syscall
|
||||
- On thread exit (`exit_this_context`): walk robust list, set `FUTEX_OWNER_DIED` bit, wake one waiter with `EOWNERDEAD`
|
||||
|
||||
**relibc:** `src/sync/pthread_mutex.rs`
|
||||
- Implement robust list registration in `pthread_mutex_lock`
|
||||
- Implement `pthread_mutex_consistent`: clear `EOWNERDEAD` state
|
||||
- Replace `todo_skip!` with real implementation
|
||||
|
||||
#### 1.4 — FUTEX_WAKE_OP
|
||||
|
||||
**Kernel:** `src/syscall/futex.rs`
|
||||
- Implement atomic op + wake: perform op on addr2, then wake up to `val` waiters on addr1
|
||||
- Operations: set, add, or, andn, xor, with comparison condition
|
||||
|
||||
**Impact:** glibc mutex fast path optimization. Not critical for relibc but helps ported glibc-linked binaries.
|
||||
|
||||
---
|
||||
|
||||
### Phase 2: SMP Scheduling Quality (Week 3–6)
|
||||
|
||||
**Goal:** Make multi-core actually distribute work.
|
||||
|
||||
**Depends on:** Phase 0 complete (per-CPU queues applied).
|
||||
|
||||
#### 2.1 — Work stealing (recover + fix)
|
||||
|
||||
**Kernel:** `src/context/switch.rs`
|
||||
- On `select_next_context()` empty local queue: steal from victim CPU
|
||||
- Pick victim by round-robin, steal highest-priority runnable context
|
||||
- Limit steal batch size (1–2 contexts per steal attempt)
|
||||
- Send `IpiKind::Wakeup` to target CPU if stealing woke it from idle
|
||||
|
||||
**Recovery:** P8-work-stealing needs rebase against per-CPU wiring.
|
||||
|
||||
#### 2.2 — Load balancing (recover + verify)
|
||||
|
||||
**Kernel:** `src/context/switch.rs`
|
||||
- Periodic balance trigger (every N ticks or when queue depth difference > threshold)
|
||||
- Migrate contexts from overloaded CPU to most-idle CPU
|
||||
- Respect `sched_affinity` mask during migration
|
||||
|
||||
**Recovery:** P8-load-balance is in absorbed/ — verify it's in the fork after Phase 0.
|
||||
|
||||
#### 2.3 — Reschedule IPI
|
||||
|
||||
**Kernel:** `src/arch/x86_shared/ipi.rs` + `src/context/switch.rs`
|
||||
- When waking a context on a different CPU, send `IpiKind::Switch` to that CPU
|
||||
- Currently the Switch IPI exists but is not used by the scheduler
|
||||
|
||||
#### 2.4 — Per-page TLB flush (INVLPG)
|
||||
|
||||
**Kernel:** `rmm/src/arch/x86_64.rs` + `src/context/memory.rs`
|
||||
- Add `invalidate_page(addr)` using `invlpg` instruction
|
||||
- Modify `Flusher` to track individual pages and use INVLPG when ≤ N pages affected
|
||||
- Fall back to CR3 reload only for large-scale invalidations
|
||||
|
||||
**Impact:** Every `mprotect`/`mmap`/`munmap` on a multi-threaded process currently flushes the ENTIRE TLB on every core. This is one of the most impactful single fixes.
|
||||
|
||||
#### 2.5 — TLB broadcast optimization
|
||||
|
||||
**Kernel:** `src/percpu.rs`
|
||||
- Replace per-CPU sequential `shootdown_tlb_ipi(Some(id))` loop with ICR "all excluding self" (destination shorthand 0b11)
|
||||
- Single IPI + global ack counter instead of N individual IPIs + N ack counters
|
||||
|
||||
---
|
||||
|
||||
### Phase 3: RT Scheduling (Week 4–6)
|
||||
|
||||
**Goal:** Allow applications to request real-time scheduling for latency-sensitive threads.
|
||||
|
||||
**Depends on:** Phase 0 (SchedPolicy applied) + Phase 2 (per-CPU queues).
|
||||
|
||||
#### 3.1 — Kernel RT scheduling dispatch
|
||||
|
||||
**Kernel:** `src/context/switch.rs` (from P5-sched-rt-policy — recovered in Phase 0)
|
||||
- `select_next_context()` passes:
|
||||
1. SCHED_FIFO contexts (highest RT priority first, no preemption within same prio)
|
||||
2. SCHED_RR contexts (highest RT priority first, round-robin within same prio)
|
||||
3. SCHED_OTHER contexts (existing DWRR/vruntime)
|
||||
- SCHED_RR quantum: configurable per-context (default 100ms)
|
||||
|
||||
#### 3.2 — relibc sched_* API completion
|
||||
|
||||
**relibc:** `src/header/sched/mod.rs`
|
||||
|
||||
Replace ALL `todo!()` stubs:
|
||||
|
||||
| Function | Implementation |
|
||||
|----------|---------------|
|
||||
| `sched_getscheduler(pid)` | Read policy from proc scheme attrs |
|
||||
| `sched_setscheduler(pid, policy, param)` | Write policy + RT priority via proc scheme |
|
||||
| `sched_getparam(pid, param)` | Read RT priority from proc scheme |
|
||||
| `sched_setparam(pid, param)` | Write RT priority via proc scheme |
|
||||
| `sched_get_priority_max(policy)` | Return 99 for FIFO/RR, 0 for OTHER |
|
||||
| `sched_get_priority_min(policy)` | Return 1 for FIFO/RR, 0 for OTHER |
|
||||
| `sched_rr_get_interval(pid, tp)` | Return SCHED_RR quantum (100ms default) |
|
||||
|
||||
#### 3.3 — pthread_setschedparam wiring
|
||||
|
||||
**relibc:** `src/pthread/mod.rs`
|
||||
- Replace `set_sched_param` no-op with real proc scheme call
|
||||
- Replace `set_sched_priority` no-op with real proc scheme call
|
||||
|
||||
---
|
||||
|
||||
### Phase 4: POSIX Pthread Completeness (Week 5–8)
|
||||
|
||||
**Goal:** Close remaining POSIX gaps that block application compatibility.
|
||||
|
||||
**Depends on:** Phase 0 + Phase 3 (for sched API).
|
||||
|
||||
#### 4.1 — pthread_setaffinity_np / pthread_getaffinity_np
|
||||
|
||||
**relibc:** `src/header/pthread/mod.rs` + `src/header/sched/mod.rs`
|
||||
- Implement using proc scheme "sched-affinity" write/read
|
||||
- Define `cpu_set_t` type and `CPU_SET/CPU_CLR/CPU_ZERO/CPU_ISSET` macros
|
||||
|
||||
#### 4.2 — pthread_setname_np / pthread_getname_np
|
||||
|
||||
**relibc:** `src/header/pthread/mod.rs`
|
||||
- Implement using proc scheme name write/read (kernel already supports 32-char name field)
|
||||
|
||||
#### 4.3 — pthread_cond_init CLOCK_MONOTONIC
|
||||
|
||||
**relibc:** `src/sync/cond.rs`
|
||||
- Replace `todo_skip!` with real monotonic clock support
|
||||
- Store clock choice in cond struct, use `CLOCK_MONOTONIC` for deadline calculations
|
||||
|
||||
#### 4.4 — Guard pages
|
||||
|
||||
**relibc:** `src/pthread/mod.rs`
|
||||
- In `pthread_create`, when allocating stack via mmap:
|
||||
- Map `[stack_base, stack_base + guard_size)` with `PROT_NONE`
|
||||
- Map `[stack_base + guard_size, stack_base + guard_size + stack_size)` with `PROT_READ | PROT_WRITE`
|
||||
- On thread exit, munmap both regions
|
||||
|
||||
#### 4.5 — pthread_getcpuclockid
|
||||
|
||||
**relibc:** `src/header/pthread/mod.rs`
|
||||
- Return `CLOCK_THREAD_CPUTIME_ID` (requires kernel support — add clock to `clock_gettime`)
|
||||
|
||||
**Kernel:** `src/syscall/time.rs`
|
||||
- Add `CLOCK_THREAD_CPUTIME_ID` → read `context.cpu_time`
|
||||
|
||||
#### 4.6 — PTHREAD_KEYS_MAX enforcement
|
||||
|
||||
**relibc:** `src/header/pthread/tls.rs`
|
||||
- Check `NEXTKEY` against `PTHREAD_KEYS_MAX` (1024) before allocating
|
||||
|
||||
---
|
||||
|
||||
### Phase 5: IRQ Steering and NUMA (Week 8–12)
|
||||
|
||||
**Goal:** Distribute interrupt load and respect memory locality.
|
||||
|
||||
**Depends on:** Phase 2 (per-CPU infrastructure).
|
||||
|
||||
#### 5.1 — IRQ steering
|
||||
|
||||
**Kernel:** `src/arch/x86_shared/device/ioapic.rs` + `src/arch/x86_shared/idt.rs`
|
||||
- Change I/O APIC redirection `dest` from `bsp_apic_id` to round-robin or RSS hash
|
||||
- Add per-CPU legacy IRQ handlers in IDT (not just BSP)
|
||||
- For MSI/MSI-X: set destination CPU in Message Address register
|
||||
|
||||
#### 5.2 — NUMA topology discovery
|
||||
|
||||
**Kernel:** `src/acpi/` (from P9-numa-topology — recovered in Phase 0)
|
||||
- Parse SRAT (Static Resource Affinity Table) for proximity domains
|
||||
- Parse SLIT (System Locality Distance Information Table) for inter-node distances
|
||||
- Store `NumaTopology` in kernel for O(1) scheduling lookups
|
||||
|
||||
#### 5.3 — NUMA-aware memory allocation
|
||||
|
||||
**Kernel:** `src/memory/` + frame allocator
|
||||
- Track frame NUMA node in `Frame` or `PageInfo`
|
||||
- On allocation, prefer frames from requesting CPU's NUMA node
|
||||
- Fallback to remote node when local node is exhausted
|
||||
|
||||
---
|
||||
|
||||
## 5. Dependency Chain
|
||||
|
||||
```
|
||||
Phase 0 (Patch Recovery) ← BLOCKING FOR ALL OTHERS
|
||||
│
|
||||
├──► Phase 1 (Futex Completeness)
|
||||
│ │
|
||||
│ ├──► 1.1 REQUEUE ──► condvar performance
|
||||
│ ├──► 1.2 PI ──► priority inversion fix (needs Phase 3.1)
|
||||
│ ├──► 1.3 Robust ──► deadlock prevention
|
||||
│ └──► 1.4 WAKE_OP ──► glibc compat
|
||||
│
|
||||
├──► Phase 2 (SMP Scheduling)
|
||||
│ │
|
||||
│ ├──► 2.1 Work stealing ──► core utilization
|
||||
│ ├──► 2.2 Load balancing ──► fair distribution
|
||||
│ ├──► 2.3 Reschedule IPI ──→ cross-CPU wakeup
|
||||
│ ├──► 2.4 Per-page TLB ──► mmap/mprotect performance
|
||||
│ └──► 2.5 TLB broadcast ──► IPI efficiency
|
||||
│
|
||||
├──► Phase 3 (RT Scheduling)
|
||||
│ │
|
||||
│ ├──► 3.1 Kernel RT dispatch (from Phase 0)
|
||||
│ ├──► 3.2 relibc sched_* API ──► POSIX compat
|
||||
│ └──► 3.3 pthread_setschedparam ──► app priority control
|
||||
│
|
||||
├──► Phase 4 (POSIX Pthread Completeness)
|
||||
│ │
|
||||
│ ├──► 4.1 Affinity API ──► CPU pinning
|
||||
│ ├──► 4.2 Thread naming ──► debuggability
|
||||
│ ├──► 4.3 Monotonic condvar ──► clock correctness
|
||||
│ ├──► 4.4 Guard pages ──► stack overflow detection
|
||||
│ ├──► 4.5 CPU clock ──► per-thread profiling
|
||||
│ └──► 4.6 Keys max ──► resource limit
|
||||
│
|
||||
└──► Phase 5 (IRQ + NUMA)
|
||||
│
|
||||
├──► 5.1 IRQ steering ──► interrupt distribution
|
||||
├──► 5.2 NUMA topology ──► (from Phase 0)
|
||||
└──► 5.3 NUMA allocator ──► memory locality
|
||||
```
|
||||
|
||||
**Parallel work possible:**
|
||||
- Phase 1 + Phase 2 + Phase 3 can run in parallel after Phase 0
|
||||
- Phase 4 items are independent of each other
|
||||
- Phase 5 depends on Phase 2 but not on Phase 1/3/4
|
||||
|
||||
---
|
||||
|
||||
## 6. Validation Plan
|
||||
|
||||
### 6.1 Build Evidence
|
||||
|
||||
| Check | Command |
|
||||
|-------|---------|
|
||||
| Kernel compiles | `make r.kernel` |
|
||||
| relibc compiles | `make r.relibc` |
|
||||
| Prefix rebuilt | `touch relibc kernel && make prefix` |
|
||||
| Full OS builds | `./local/scripts/build-redbear.sh redbear-mini` |
|
||||
|
||||
### 6.2 Runtime Evidence (QEMU)
|
||||
|
||||
| Test | Verification |
|
||||
|------|-------------|
|
||||
| Multi-threaded boot | `make qemu QEMUFLAGS="-smp 4"` — all 4 CPUs active |
|
||||
| pthread smoke test | Guest: compile + run simple pthread_create/join/mutex test |
|
||||
| Work stealing | Guest: spawn 8 threads on 4-CPU QEMU, verify all CPUs utilized |
|
||||
| Futex REQUEUE | Guest: condvar broadcast benchmark — waiters wake in ≤2 batches, not N |
|
||||
| PI futex | Guest: priority inversion test — high-prio thread unblocked within 1 tick |
|
||||
| Robust mutex | Guest: kill thread holding mutex, verify EOWNERDEAD recovery |
|
||||
| RT scheduling | Guest: SCHED_FIFO thread preempts SCHED_OTHER within 100μs |
|
||||
| CPU affinity | Guest: pin thread to CPU 1, verify it never runs on CPU 0 |
|
||||
| Thread naming | Guest: `cat /scheme/proc/*/name` shows set names |
|
||||
| Guard pages | Guest: overflow stack, verify SIGSEGV (not silent corruption) |
|
||||
| TLB efficiency | Guest: mprotect benchmark — compare TLB miss rate before/after |
|
||||
|
||||
### 6.3 Validation Scripts (to create)
|
||||
|
||||
```bash
|
||||
local/scripts/test-threading-qemu.sh # Comprehensive threading smoke test
|
||||
local/scripts/test-futex-requeue-qemu.sh # REQUEUE-specific test
|
||||
local/scripts/test-futex-pi-qemu.sh # PI futex test
|
||||
local/scripts/test-futex-robust-qemu.sh # Robust mutex test
|
||||
local/scripts/test-sched-rt-qemu.sh # RT scheduling latency test
|
||||
local/scripts/test-sched-balance-qemu.sh # Load balancing on multi-vCPU
|
||||
local/scripts/test-threading-baremetal.sh # Bare metal multi-threaded stress
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. Estimated Effort
|
||||
|
||||
| Phase | Duration | New Code | Recovery | Dependencies |
|
||||
|-------|----------|----------|----------|-------------|
|
||||
| Phase 0: Patch Recovery | 1–2 weeks | Minimal (rebase 5 patches) | 13 patches apply directly | None |
|
||||
| Phase 1: Futex Completeness | 2–3 weeks | REQUEUE impl + WAKE_OP | PI/robust from P8 patches | Phase 0 |
|
||||
| Phase 2: SMP Scheduling | 3–4 weeks | TLB INVLPG + broadcast opt | Work stealing from P8 | Phase 0 |
|
||||
| Phase 3: RT Scheduling | 1–2 weeks | relibc sched_* API | RT dispatch from P5 | Phase 0 |
|
||||
| Phase 4: POSIX Pthread | 2–3 weeks | Affinity/naming/guard/clock | Partial from P7 patches | Phase 0, 3 |
|
||||
| Phase 5: IRQ + NUMA | 3–4 weeks | IRQ steering + NUMA allocator | NUMA topology from P9 | Phase 0, 2 |
|
||||
|
||||
**Total:** 12–18 weeks with 1–2 developers. Phase 0 alone recovers the majority of the value in 1–2 weeks.
|
||||
|
||||
---
|
||||
|
||||
## 8. Integration with Existing Plans
|
||||
|
||||
| Plan | Relationship |
|
||||
|------|-------------|
|
||||
| `CONSOLE-TO-KDE-DESKTOP-PLAN.md` | **Consumer** — Phase 3 (KWin) needs PI futex + RT scheduling; Phase 2 (compositor) needs work stealing |
|
||||
| `IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` | **Sibling** — IRQ steering (Phase 5.1) belongs to both plans |
|
||||
| `DRM-MODERNIZATION-EXECUTION-PLAN.md` | **Consumer** — GPU worker threads benefit from load balancing + affinity |
|
||||
| `IMPLEMENTATION-MASTER-PLAN.md` | **Parent** — this plan covers the kernel threading substrate |
|
||||
| `CPU-DMA-IRQ-MSI-SCHEDULER-FIX-PLAN.md` | **Sibling** — overlaps on scheduler/IRQ delivery |
|
||||
|
||||
---
|
||||
|
||||
## 9. Bottom Line
|
||||
|
||||
The Red Bear OS threading stack is **functional for basic single-threaded and lightly-threaded
|
||||
workloads**. The SMP boot, context switching, TLB shootdown, and basic futex operations are
|
||||
correct.
|
||||
|
||||
The **critical problem** is that 6 months of threading enhancement work (P5–P9 patches) was
|
||||
lost during the local fork migration. This work exists as patch files that apply cleanly to
|
||||
the current fork — **Phase 0 (Patch Recovery) is the single highest-ROI action**.
|
||||
|
||||
After Phase 0, the remaining gaps are:
|
||||
1. **Futex REQUEUE/PI/robust** — for condvar performance and deadlock prevention
|
||||
2. **SMP work stealing + load balancing** — for multi-core utilization
|
||||
3. **RT scheduling** — for audio/compositor thread priority
|
||||
4. **POSIX pthread completeness** — for application compatibility
|
||||
5. **IRQ steering + NUMA** — for multi-socket performance
|
||||
|
||||
The **desktop-critical path** (KWin responsiveness) requires Phases 0–3. The
|
||||
**server-critical path** (multi-socket, NUMA) adds Phase 5. Phase 4 (POSIX completeness)
|
||||
benefits all paths but is not desktop-blocking.
|
||||
@@ -78,7 +78,7 @@ After ANY change to the patches list or patch files:
|
||||
2. Full rebuild: `REDBEAR_ALLOW_PROTECTED_FETCH=1 CI=1 make r.base`
|
||||
3. Verify NO "FAILED" or "rejects" in output
|
||||
4. Verify all expected binaries in stage: `ls stage/usr/bin/ stage/usr/lib/drivers/`
|
||||
5. Full image build: `CI=1 make all CONFIG_NAME=redbear-full`
|
||||
5. Full image build: `./local/scripts/build-redbear.sh redbear-full`
|
||||
|
||||
## Known Issues
|
||||
|
||||
|
||||
@@ -135,11 +135,12 @@ Two separate DMI systems exist in the source tree:
|
||||
These are **incompatible at runtime** — the acpid scheme must serve DMI data
|
||||
in *both* the flat-file and the per-field-subpath form. If acpid only
|
||||
serves one, the other system is inert. The
|
||||
[`local/sources/base/drivers/hwd/src/main.rs`](https://gitea.redbearos.org/vasilito/base)
|
||||
hwd daemon runs `acpid` and the underlying
|
||||
[`local/sources/base/drivers/acpid/src/scheme.rs`](https://gitea.redbearos.org/vasilito/base)
|
||||
`local/sources/base/drivers/hwd/src/main.rs` hwd daemon runs `acpid`
|
||||
and the underlying `local/sources/base/drivers/acpid/src/scheme.rs`
|
||||
defines the DMI surface — check what it actually serves before assuming
|
||||
both work.
|
||||
both work. (The `base` source tree lives as the `submodule/base`
|
||||
branch inside the canonical `RedBear-OS` repo per the SINGLE-REPO
|
||||
RULE in `local/AGENTS.md`.)
|
||||
|
||||
## Confirmed live TOML coverage
|
||||
|
||||
|
||||
@@ -0,0 +1,307 @@
|
||||
# Sleep Implementation Plan
|
||||
|
||||
## Status: 2026-07-01
|
||||
|
||||
| Subsystem | Status | Hardware-agnostic? |
|
||||
|-----------|--------|---------------------|
|
||||
| redbear-quirks LG Gram flags (a) | ✅ Committed (4d270bab2), pushed | Yes |
|
||||
| acpid AML S-state sequence (b) | ✅ Committed (5d2d114), built | Yes |
|
||||
| Kernel kstop s2idle/S3 handler (c) | ✅ Committed (75c7618), built | Yes |
|
||||
| Phase J: libredox fork + syscall EnterS2Idle/ExitS2Idle | ✅ Committed (aadf55b base, 6b98c64 kernel), built | Yes |
|
||||
| Phase II: S3 entry path (PM1 register write) | ✅ Committed (9f6a428 kernel), built | Yes |
|
||||
| Phase II.X: S3 resume trampoline (64-bit assembly) | ✅ Committed (1be659b, 9bc1fbf kernel), built | Yes |
|
||||
| Phase II.X.W: FACS parser + SetS3WakingVector/EnterS3 AcPiVerbs | ✅ Committed (b0f4fee syscall, 475f96e/9bc1fbf kernel, dcd70a1 base), built | Yes |
|
||||
| Broad OEM DMI (Dell/HP/Lenovo) | ✅ Committed (4d270bab2 quirks), built | Yes |
|
||||
| redbear-mini ISO build | ✅ Succeeds, 512 MB | — |
|
||||
| QEMU boot test | ✅ Passes, reaches Red Bear login | — |
|
||||
| Build system patch verification (`make verify-patches`) | ✅ Added (1834c3bf Makefile, 32403ccf4 script) | — |
|
||||
| Phase K: convert local sources to git submodules | ⏳ Deferred — requires gitea mirror per source | — |
|
||||
|
||||
## Phase J Architecture (Current)
|
||||
|
||||
The s2idle / s3 coordination path uses **two parallel APIs**:
|
||||
|
||||
1. **kstop string-arg path** (Phase I.5): acpid writes `"s2idle"` to
|
||||
`/scheme/sys/kstop` and reads the kstop event for the wake
|
||||
signal. This is the original path; it works without the
|
||||
AcpiVerb extension.
|
||||
2. **Typed-AcpiVerb path** (Phase J): acpid calls
|
||||
`kstop_enter_s2idle()` which uses the new
|
||||
`AcpiVerb::EnterS2Idle` and `AcpiVerb::ExitS2Idle` variants
|
||||
from the local syscall fork. This is the preferred path now
|
||||
that Phase J's libredox fork is in place.
|
||||
|
||||
Both paths are fully wired and work. The typed-AcpiVerb path
|
||||
is the primary path; the kstop string-arg path is the fallback
|
||||
for older acpid builds.
|
||||
|
||||
### Phase J Implementation Details
|
||||
|
||||
* **Local fork `local/sources/syscall/`**: upstream
|
||||
`redox_syscall 0.8.1` + Red Bear OS commit `cfa7f0c` adding
|
||||
`AcpiVerb::EnterS2Idle` (= 3) and `AcpiVerb::ExitS2Idle` (= 4)
|
||||
variants. The version field stays at upstream 0.8.1 per the
|
||||
AGENTS.md "GOLDEN RULE".
|
||||
* **Local fork `local/sources/libredox/`**: upstream
|
||||
`libredox 0.1.17` with the `redox_syscall` dep redirected
|
||||
to `path = "../syscall"`. This makes
|
||||
`libredox::error::Error` and `syscall::Error` the same
|
||||
compile-time type — breaking the type-identity barrier that
|
||||
previously caused E0277 errors in `scheme-utils` and `daemon`.
|
||||
* **Base `Cargo.toml`**: `[patch.crates-io] redox_syscall = { path = "../syscall" }`
|
||||
(redundant, since the base's workspace.dependencies already
|
||||
uses the local path) and `[patch.crates-io] libredox = { path = "../libredox" }`.
|
||||
* **Kernel `Cargo.toml`**: `[workspace] members = [".", "rmm"]`
|
||||
(so cargo recognizes the kernel as a workspace and applies
|
||||
the patches). `[patch."https://gitlab.redox-os.org/redox-os/syscall.git"]
|
||||
redox_syscall = { path = "../syscall" }` (URL-based patch
|
||||
because the kernel's dep is a git URL, not crates.io).
|
||||
`[patch.crates-io] libredox = { path = "../libredox" }`.
|
||||
* **Patch file**: `local/patches/syscall/P1-acpiverb-enter-exit-s2idle.patch`
|
||||
is the durable overlay patch backing the syscall fork commit.
|
||||
|
||||
### Phase J End-to-End s2idle Flow
|
||||
|
||||
1. acpid: `enter_s2idle()` (`_TTS(0)`, `_PTS(0)`, `_SST(3)`)
|
||||
2. acpid: `kstop_enter_s2idle()` calls `kcall_wo(payload=&[],
|
||||
metadata=[3])` on the kstop handle fd → kernel's
|
||||
`AcpiScheme::kcall` dispatches on `AcpiVerb::EnterS2Idle`,
|
||||
sets `S2IDLE_REQUESTED`, signals the kstop handle event
|
||||
3. kernel idle path: `mwait_loop()` at deepest C-state
|
||||
4. SCI breaks MWAIT
|
||||
5. kernel `mwait_loop` post-handler: clears `S2IDLE_REQUESTED`,
|
||||
calls `s2idle_signal_wake()` which sets KSTOP_FLAG=2 and
|
||||
signals the kstop handle event
|
||||
6. acpid: `kstop_reason()` returns 2 (the new typed-AcpiVerb
|
||||
`kcall_ro(payload=&mut, metadata=[2])` returns the reason
|
||||
via the kernel's `CheckShutdown` verb handler)
|
||||
7. acpid: `exit_s2idle()` (`_SST(2)`, `_WAK(0)`, `_SST(1)`)
|
||||
8. loop
|
||||
|
||||
### Phase J Test Plan
|
||||
|
||||
* **Build verification**: `redbear-mini.iso` (512 MB) builds
|
||||
successfully with the Phase J commits. The build system
|
||||
applies the patches in the right order.
|
||||
* **QEMU verification**: boot the ISO in QEMU. The cpufreqd
|
||||
daemon should NOT oscillate (Phase H fix). The acpid
|
||||
main loop should NOT log repeated `P0→P1` transitions.
|
||||
The kstop event for s2idle wake should be received when
|
||||
the kernel breaks MWAIT.
|
||||
* **Patch application verification**: run `cargo metadata
|
||||
--format-version 1` and confirm the resolved source URL
|
||||
for `redox_syscall` and `libredredox` is the local fork path.
|
||||
|
||||
## Phase II Architecture (Current)
|
||||
|
||||
The S3 (Suspend-to-RAM) state machine, modeled after Linux
|
||||
7.1's `arch/x86/kernel/acpi/wakeup_64.S` and
|
||||
`arch/x86/kernel/acpi/sleep.c`:
|
||||
|
||||
1. **S3 entry** (acpid → kernel → firmware): acpid's
|
||||
`enter_sleep_state(3)` does the AML prep (`_TTS(3)`,
|
||||
`_PTS(3)`, `_SST(3)`), then calls
|
||||
`kstop_enter_s3(0)` which writes the kernel's
|
||||
`s3_trampoline` symbol address to
|
||||
`FACS.xfirmware_waking_vector` via the new
|
||||
`SetS3WakingVector` AcPiVerb. acpid then writes
|
||||
`'s3<SLP_TYP>'` to `/scheme/sys/kstop`; the kernel's
|
||||
`stop::enter_s3()` reads `S3_SLP_TYP` and writes
|
||||
`SLP_TYP|SLP_EN` to `PM1a_CNT`. The platform
|
||||
firmware enters S3.
|
||||
2. **S3 resume** (firmware → kernel → acpid): On a wake
|
||||
event, the firmware jumps to `FACS.waking_vector`
|
||||
(the s3_trampoline). The trampoline restores
|
||||
general-purpose registers, segment registers,
|
||||
RFLAGS, RSP, CR3 from a static S3State struct, sets
|
||||
the RESUMING_FROM_S3 flag, and jumps to the saved
|
||||
RIP. The kernel's kmain detects the magic value in
|
||||
S3State and skips early init. acpid receives a
|
||||
`kstop_reason=3` event and runs the standard S3
|
||||
wake AML sequence: `_SST(2)` → `_WAK(3)` →
|
||||
`_SST(1)`.
|
||||
|
||||
The S3 state save in `kernel/src/arch/x86_shared/stop.rs`
|
||||
and the resume trampoline in
|
||||
`kernel/src/arch/x86_shared/s3_resume.rs` are both
|
||||
present and built.
|
||||
|
||||
Hardware-agnostic: works on any x86_64 system with
|
||||
standard ACPI S3 support (Dell, HP, Lenovo, LG Gram 14).
|
||||
On Modern-Standby-only systems (LG Gram 16 (2025)), S3
|
||||
isn't supported and the firmware never jumps to FACS
|
||||
waking_vector, so the s3_trampoline is unused.
|
||||
|
||||
## Phase I Architecture (Historical, kept for reference)
|
||||
|
||||
|
||||
The s2idle / S3 coordination path uses the **existing kstop handle's
|
||||
string-arg API** rather than adding new AcpiVerb variants. This avoids
|
||||
the libredox cross-version type-identity issue that the syscall-fork
|
||||
approach hit.
|
||||
|
||||
### Wire diagram
|
||||
|
||||
```
|
||||
┌─────────┐ write "s2idle" ┌──────────────────┐ s2idle_request_set() ┌────────────────┐
|
||||
│ acpid ├───────────────►│ /scheme/sys/kstop├───────────────────────►│ S2IDLE_REQUESTED│
|
||||
│ (base) │ │ (kernel dispatcher)│ │ (kernel static)│
|
||||
└─────────┘ └──────────────────┘ └────────┬───────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────┐
|
||||
│ idle path │
|
||||
│ (mwait_loop) │
|
||||
└──────┬───────┘
|
||||
│ (SCI breaks MWAIT)
|
||||
▼
|
||||
┌──────────────┐
|
||||
│ s2idle_request_clear()│
|
||||
│ + kstop event │
|
||||
└──────┬───────┘
|
||||
│
|
||||
▼
|
||||
acpid: exit_s2idle()
|
||||
runs _SST(2), _WAK(0), _SST(1)
|
||||
```
|
||||
|
||||
### acpid commit 5d2d114 — Full Linux AML Sequence
|
||||
|
||||
The acpid userspace daemon implements the **complete Linux 7.1 ACPI
|
||||
sleep state machine** on top of the existing AML interpreter. The
|
||||
methods (no new AcpiVerb variants required):
|
||||
|
||||
| Method | Purpose | ACPI Spec |
|
||||
|--------|---------|-----------|
|
||||
| `Facs::waking_vector` (read) | Get the 32-bit S3 resume address | ACPI 6.5 §5.2.10 |
|
||||
| `Facs::set_waking_vector` (new) | Write the 32-bit S3 resume address | ACPI 6.5 §5.2.10 |
|
||||
| `Facs::set_x_waking_vector` (new) | Write the 64-bit S3 resume address | ACPI 6.5 §5.2.10 |
|
||||
| `set_system_status_indicator` (new) | Call `\_SI._SST(n)` | ACPI 6.5 §6.5.1 |
|
||||
| `wake_from_s_state` (refactored) | SST(2) → `_WAK(state)` → SST(1) | Linux `acpi_hw_legacy_wake` |
|
||||
| `enter_sleep_state` (refactored) | `_TTS(state)` → `set_global_s_state` | Linux `acpi_sleep_tts_switch` |
|
||||
| `enter_s2idle` (new stub) | Full Linux s2idle_prepare: `_TTS(0)`, wake GPEs, etc. | Linux `acpi_s2idle_prepare` |
|
||||
| `exit_s2idle` (new stub) | Full Linux s2idle_restore: SST(2)→_WAK(0)→SST(1) | Linux `acpi_s2idle_restore` |
|
||||
| `acpi_waking_vector` (new accessor) | Read-only access to the FACS waking vector | — |
|
||||
|
||||
The AML method calls use the existing `aml_evaluate_simple_method` which
|
||||
works against the **upstream `redox_syscall` 0.8.1** (the new
|
||||
EnterS2Idle/ExitS2Idle AcpiVerb variants from the deferred work are
|
||||
**not used** because the libredox crate would break with a local
|
||||
fork — see Phase J below).
|
||||
|
||||
### Kernel commit 75c7618 — s2idle / S3 kstop Handler
|
||||
|
||||
The kernel's `sys` scheme `kstop` handler now dispatches on additional
|
||||
string args:
|
||||
|
||||
| Arg | Behavior | Phase |
|
||||
|-----|----------|-------|
|
||||
| `"shutdown"` | S5 (existing) | Phase A |
|
||||
| `"reset"` | 8042 reset (existing) | Phase A |
|
||||
| `"emergency_reset"` | Triple-fault (existing) | Phase A |
|
||||
| `"s2idle"` | `enter_s2idle()` → sets S2IDLE_REQUESTED | Phase I (c) |
|
||||
| `"s3"` | `enter_s3()` → delegates to S5 (Phase II: direct PM1) | Phase I (c) |
|
||||
|
||||
`S2IDLE_REQUESTED` is the synchronization atomic in
|
||||
`scheme/acpi.rs` that the kernel's idle path polls before calling
|
||||
`mwait_loop()`. It's `AtomicBool` with explicit `Acquire`/`Release`
|
||||
ordering. Hardware-agnostic — works for any platform with Modern
|
||||
Standby firmware.
|
||||
|
||||
### Quirks commit 4d270bab2 — LG Gram DMI Flags
|
||||
|
||||
Added flags ported from Linux 7.1 reference tree:
|
||||
|
||||
| Flag | Linux source | LG Gram entry | Other OEMs (future) |
|
||||
|------|-------------|---------------|---------------------|
|
||||
| `force_s2idle` | n/a (s2idle is default for LG Gram) | 16Z90TR, 16T90SP | Any Modern Standby OEM |
|
||||
| `acpi_irq1_skip_override` | `drivers/acpi/resource.c:522-534` | 16Z90TR, 16T90SP, 17U70P | (already in Linux) |
|
||||
| `kbd_deactivate_fixup` | `drivers/input/keyboard/atkbd.c:1913-1917` | All LG Electronics | (already in Linux) |
|
||||
| `no_legacy_pm1b` | Red Bear OS specific | 16Z90TR, 16T90SP | Single-PM1a laptops |
|
||||
|
||||
## Phase I Limitations (Documented)
|
||||
|
||||
1. **S3 resume trampoline is not implemented.** `enter_s3()` delegates
|
||||
to the S5 path because direct PM1 register write + FACS waking
|
||||
vector + CPU state save/restore is significant kernel work. Phase II.
|
||||
|
||||
2. **s2idle wake interrupt handler is not implemented.** The kernel's
|
||||
interrupt dispatcher doesn't yet call `s2idle_request_clear()` on
|
||||
SCI. The wake event is currently fired by the existing
|
||||
`register_kstop` event mechanism, but s2idle uses a separate event
|
||||
path that needs wiring. Phase I.5.
|
||||
|
||||
3. **acpid's `enter_s2idle` / `exit_s2idle` are stubs.** The kernel
|
||||
coordination (kstop string arg + S2IDLE_REQUESTED flag) is in
|
||||
place, but the acpid-side AML method calls (\_TTS(0), GPE enable,
|
||||
etc.) are not yet wired to the kstop event flow. acpid's main
|
||||
event loop only handles the existing kstop shutdown path. Phase
|
||||
I.5.
|
||||
|
||||
4. **The EnterS2Idle/ExitS2Idle AcPiVerb extension is deferred to
|
||||
Phase J.** See next section.
|
||||
|
||||
## Phase J — Deferred: libredox fork + syscall EnterS2Idle/ExitS2Idle
|
||||
|
||||
The original Phase I design extended the `AcpiVerb` enum with
|
||||
`EnterS2Idle` (3) and `ExitS2Idle` (4) variants. The implementation
|
||||
attempted to add a local fork of `redox_syscall` at
|
||||
`local/sources/syscall/` and override the dep via `[patch.crates-io]`
|
||||
in the base/kernel `Cargo.toml`.
|
||||
|
||||
**Blocker discovered:** `libredox = "0.1.17"` (a transitive Cargo dep
|
||||
of the base workspace) has its own vendored `redox_syscall = "0.8"`
|
||||
dep. The `[patch.crates-io]` in the base workspace's `Cargo.toml`
|
||||
only applies to direct deps, not to deps of deps. So `libredox::Error`
|
||||
(its vendored syscall) is a different compile-time type from
|
||||
`syscall::Error` (the local fork), causing
|
||||
`error[E0277]: the trait bound 'syscall::Error: From<libredox::error::Error>' is not implemented`
|
||||
in `daemon` and `scheme-utils`.
|
||||
|
||||
**Workaround (Phase I current):** Don't add new AcPiVerb variants. Use
|
||||
the existing kstop handle's string-arg API. This works without any
|
||||
cross-version type issues.
|
||||
|
||||
**Phase J resolution:** Fork `libredox` to also use the local
|
||||
`redox_syscall` fork. Steps:
|
||||
1. Create `local/sources/libredox/` as a fork of `crates.io/libredox 0.1.17`.
|
||||
2. Update its `Cargo.toml` to use the local `redox_syscall`.
|
||||
3. The base/kernel `Cargo.toml` will then need a `[patch.crates-io]
|
||||
libredox = { path = "local/sources/libredox" }` override.
|
||||
4. Now the syscall extension works end-to-end.
|
||||
|
||||
**Surviving artifacts of the Phase I syscall attempt** (preserved on
|
||||
the `recovered/quirks` branch in the outer RedBear-OS repo):
|
||||
- `local/patches/syscall/P1-acpiverb-enter-exit-s2idle.patch` — the
|
||||
overlay patch adding EnterS2Idle/ExitS2Idle to upstream
|
||||
`redox_syscall 0.8.1`. The patch is verified to apply cleanly
|
||||
against fresh upstream.
|
||||
- Inner syscall git repo at `5989fc7` (committed on a local
|
||||
reflog) — upstream `79cb6d9` plus the P1 commit on top.
|
||||
- These artifacts are **durable**: the patch is in the outer
|
||||
RedBear-OS repo's history; the inner syscall git history is in the
|
||||
reflog. Phase J picks up from here.
|
||||
|
||||
## Cross-references
|
||||
|
||||
- **Linux 7.1 reference tree** at
|
||||
`/mnt/data/Builds/RedBear-OS/local/reference/linux-7.1/`:
|
||||
- `drivers/acpi/sleep.c:735` — `acpi_s2idle_prepare`
|
||||
- `drivers/acpi/sleep.c:758` — `acpi_s2idle_wake`
|
||||
- `drivers/acpi/sleep.c:821` — `acpi_s2idle_restore`
|
||||
- `drivers/acpi/acpica/hwsleep.c:81-127` — `acpi_hw_legacy_sleep`
|
||||
- `drivers/acpi/acpica/hwsleep.c:255-314` — `acpi_hw_legacy_wake`
|
||||
- `kernel/power/suspend.c:91` — `s2idle_enter`
|
||||
- `kernel/power/suspend.c:133` — `s2idle_wake`
|
||||
- `arch/x86/kernel/acpi/sleep.c:38` — `acpi_get_wakeup_address`
|
||||
|
||||
- **Red Bear OS outer** commits on `0.2.4`:
|
||||
- `4d270bab2` — redbear-quirks LG Gram DMI flags
|
||||
- `4191b8543` — base submodule pointer (acpid AML sequence)
|
||||
- `850124559` — kernel submodule pointer (s2idle kstop handler)
|
||||
|
||||
- **Red Bear OS inner** commits (historical — these repos have since been
|
||||
merged as `submodule/base` and `submodule/kernel` branches inside the
|
||||
canonical `RedBear-OS` repo per the SINGLE-REPO RULE):
|
||||
- `redbear-os-base 5d2d114` — acpid: full Linux AML S-state sequence
|
||||
- `redbear-os-kernel 75c7618` — kernel: s2idle / s3 kstop handler
|
||||
@@ -53,5 +53,5 @@ integrity, submodule hygiene, firmware presence warning) that bare `make all` /
|
||||
## QEMU boot
|
||||
|
||||
```bash
|
||||
make qemu CONFIG_NAME=redbear-mini # Boot the latest built image in QEMU
|
||||
make qemu # Boot the latest built image in QEMU
|
||||
```
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
diff --git a/src/flag.rs b/src/flag.rs
|
||||
index 455ec36..1dd5040 100644
|
||||
--- a/src/flag.rs
|
||||
+++ b/src/flag.rs
|
||||
@@ -310,12 +310,29 @@ pub enum AcpiVerb {
|
||||
ReadRxsdt = 1,
|
||||
// no payload, just returns 0 or 1
|
||||
CheckShutdown = 2,
|
||||
+ /// Red Bear OS extension (Phase I): acpid requests the kernel
|
||||
+ /// enter s2idle (Modern Standby / S0ix). The kernel sets
|
||||
+ /// `S2IDLE_REQUESTED`; the idle path calls `mwait_loop()`. Read
|
||||
+ /// payload (1 byte) returns the *previous* value of the flag.
|
||||
+ /// Write payload is opaque (ignored by current kernel).
|
||||
+ /// Mirrors Linux 7.1 `s2idle_enter()` in
|
||||
+ /// `kernel/power/suspend.c:91`. Hardware-agnostic — works on
|
||||
+ /// any platform with Modern Standby firmware (Dell, HP, Lenovo,
|
||||
+ /// LG Gram, etc.), not just LG Gram.
|
||||
+ EnterS2Idle = 3,
|
||||
+ /// Red Bear OS extension (Phase I): acpid signals s2idle
|
||||
+ /// exit. Kernel clears `S2IDLE_REQUESTED`. Read payload (1
|
||||
+ /// byte) always returns 0. Mirrors Linux 7.1 `s2idle_wake()` in
|
||||
+ /// `kernel/power/suspend.c:133`. Hardware-agnostic.
|
||||
+ ExitS2Idle = 4,
|
||||
}
|
||||
impl AcpiVerb {
|
||||
pub const fn try_from_raw(value: u64) -> Option<Self> {
|
||||
Some(match value {
|
||||
1 => Self::ReadRxsdt,
|
||||
2 => Self::CheckShutdown,
|
||||
+ 3 => Self::EnterS2Idle,
|
||||
+ 4 => Self::ExitS2Idle,
|
||||
_ => return None,
|
||||
})
|
||||
}
|
||||
Submodule local/recipes/archives/uutils-tar/source deleted from e4c2affa98
@@ -7,7 +7,7 @@ ID="redbear-os"
|
||||
ID_LIKE="redox-os"
|
||||
BUILD_ID="rolling"
|
||||
|
||||
HOME_URL="https://github.com/vasilito/Red-Bear-OS-3/"
|
||||
DOCUMENTATION_URL="https://github.com/vasilito/Red-Bear-OS-3/blob/master/local/docs/"
|
||||
SUPPORT_URL="https://github.com/vasilito/Red-Bear-OS-3/issues"
|
||||
BUG_REPORT_URL="https://github.com/vasilito/Red-Bear-OS-3/issues"
|
||||
HOME_URL="https://gitea.redbearos.org/vasilito/RedBear-OS"
|
||||
DOCUMENTATION_URL="https://gitea.redbearos.org/vasilito/RedBear-OS/src/branch/0.2.5/local/docs/"
|
||||
SUPPORT_URL="https://gitea.redbearos.org/vasilito/RedBear-OS/issues"
|
||||
BUG_REPORT_URL="https://gitea.redbearos.org/vasilito/RedBear-OS/issues"
|
||||
|
||||
@@ -7,7 +7,7 @@ members = [
|
||||
resolver = "3"
|
||||
|
||||
[workspace.package]
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2024"
|
||||
license = "MIT"
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ members = [
|
||||
resolver = "3"
|
||||
|
||||
[workspace.package]
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2024"
|
||||
license = "MIT"
|
||||
|
||||
|
||||
Submodule local/recipes/dev/ninja-build/source deleted from d829f42b8d
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ehcid"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2024"
|
||||
description = "EHCI USB 2.0 host controller driver for Red Bear OS"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "linux-kpi"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2021"
|
||||
description = "Linux Kernel API compatibility layer for Redox OS (LinuxKPI-style)"
|
||||
license = "MIT"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ohcid"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2024"
|
||||
description = "OHCI USB 1.1 host controller driver for Red Bear OS"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "redbear-btusb"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2024"
|
||||
|
||||
[[bin]]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "redbear-iwlwifi"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2024"
|
||||
|
||||
[[bin]]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "redox-driver-acpi"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2024"
|
||||
description = "ACPI bus backend for redox-driver-core (enumerates devices from AML namespace)"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "redox-driver-core"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2024"
|
||||
description = "Core device-model traits and orchestration for Red Bear drivers"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "redox-driver-pci"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2024"
|
||||
description = "PCI bus backend for redox-driver-core"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "redox-driver-sys"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2021"
|
||||
description = "Safe Rust wrappers for Redox OS scheme-based hardware access"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "uhcid"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2024"
|
||||
description = "UHCI USB 1.1 host controller driver for Red Bear OS"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "usb-core"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2024"
|
||||
description = "Shared USB types and primitives for Red Bear host controller drivers"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "virtio-inputd"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2024"
|
||||
description = "virtio-input daemon v6.0 2026: reads virtio-input PCI events and writes Linux evdev events to /scheme/input-evdev"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "redox-drm"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
edition = "2021"
|
||||
description = "DRM scheme daemon for Redox OS — provides GPU modesetting and buffer management"
|
||||
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
# kwin headers at configure time; disabled via CMake option. The widget style plugin should
|
||||
# build independently with just qtbase + KF6 deps.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/plasma/breeze/-/archive/v6.3.4/breeze-v6.3.4.tar.gz"
|
||||
tar = "https://download.kde.org/stable/plasma/6.7.2/breeze-6.7.2.tar.xz"
|
||||
blake3 = "8d9df73d56ebe7eb92185530d82104460d6ac7214a0ead5c29d0026bd3837357"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KDecoration3 — window decoration library. Required by KWin.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/plasma/kdecoration/-/archive/v6.3.4/kdecoration-v6.3.4.tar.gz"
|
||||
tar = "https://invent.kde.org/plasma/kdecoration/-/archive/v6.7.2/kdecoration-v6.7.2.tar.gz"
|
||||
blake3 = "f9802589d7e61099a4f26b3723c5f54e92e60919d35e6df348f0a7eccf2700de"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
# Provides KF6::Attica cmake target needed by kf6-knewstuff.
|
||||
# QML, tests, and examples disabled.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/attica/-/archive/v6.10.0/attica-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/attica-6.27.0.tar.xz"
|
||||
blake3 = "d22d07aa538f3a0404e652f811fcb6816f125f493c8a246f36478a439094929b"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -30,4 +30,5 @@ cmake --install . --prefix "${COOKBOOK_STAGE}/usr"
|
||||
"""
|
||||
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/extra-cmake-modules/-/archive/v6.11.0/extra-cmake-modules-v6.11.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/extra-cmake-modules-6.27.0.tar.xz"
|
||||
blake3 = "f58ffeee3bfed10420e7ffa9b8474ece35838f318e2cc3536bcb8bd880e2f102"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KArchive — archive reading/writing framework. Depends on qtbase, qtdeclarative, kf6-extra-cmake-modules.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/karchive/-/archive/v6.10.0/karchive-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/karchive-6.27.0.tar.xz"
|
||||
blake3 = "9c54aace2e253f44bc2eb9f2f0703037c3d14c6c0672a04154fb3a874e42d8f7"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KAuth — policykit-like authorization framework. Depends on qtbase, kf6-kcoreaddons. Still using FAKE backend until PolkitQt6-1 is packaged.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kauth/-/archive/v6.10.0/kauth-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kauth-6.27.0.tar.xz"
|
||||
blake3 = "0cfdcd430d3df773e935e3b2908ef0b228a537df5aecf856a1c61a5a044b621a"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KBookmarks — bookmark management framework.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kbookmarks/-/archive/v6.10.0/kbookmarks-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kbookmarks-6.27.0.tar.xz"
|
||||
blake3 = "4d8cb1801c6a0d8529387c76e8f9809266d539469744bd840c0893c66c2a7f10"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KCMUtils — System Settings control modules. Depends on kf6-kio, kf6-kdeclarative.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kcmutils/-/archive/v6.10.0/kcmutils-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kcmutils-6.27.0.tar.xz"
|
||||
blake3 = "2069f38b69d75ed7a79954002c7a1dbd0fa205e8d7b54ea147d92dfd85e0eff2"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -117,6 +117,7 @@ find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
|
||||
# shall we use DBus?
|
||||
# enabled per default on Linux & BSD systems
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KCodecs — charset and encoding utilities. Depends on qtbase, kf6-extra-cmake-modules, kf6-ki18n.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kcodecs/-/archive/v6.10.0/kcodecs-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kcodecs-6.27.0.tar.xz"
|
||||
blake3 = "c86058a23105032999f583fc563969b39d8563816cdf7b6ed22d080958f3ec37"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KColorScheme — color scheme management. Depends on qtbase, kf6-kconfig, kf6-kcoreaddons, kf6-ki18n, kf6-kguiaddons.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kcolorscheme/-/archive/v6.10.0/kcolorscheme-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kcolorscheme-6.27.0.tar.xz"
|
||||
blake3 = "fa5037dac4816902c181e6593ea61c14eb6a9c6b71f5c299721f3a9dabc77e56"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -97,6 +97,7 @@ find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
|
||||
set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].")
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KCompletion — auto-completion widgets and utilities
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kcompletion/-/archive/v6.10.0/kcompletion-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kcompletion-6.27.0.tar.xz"
|
||||
blake3 = "9c421babb494a440e970d69562f7f1fe9753d06a39ede9e739a5d72080acc732"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -86,6 +86,7 @@ find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
|
||||
find_package(KF6Codecs ${KF_DEP_VERSION} REQUIRED)
|
||||
find_package(KF6Config ${KF_DEP_VERSION} REQUIRED)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KDE KConfig — configuration framework, no GUI deps. Depends on qtbase, qtdeclarative, kf6-extra-cmake-modules.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kconfig/-/archive/v6.10.0/kconfig-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kconfig-6.27.0.tar.xz"
|
||||
blake3 = "53a46ec30bb231d04aaab0f8ece06dc596c1db9d11e7b24117185dcedc1dd4ea"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KConfigWidgets — configuration widgets, KConfigXT. Depends on qtbase, kf6-kconfig, kf6-kcoreaddons, kf6-ki18n, kf6-kwidgetsaddons, kf6-kcodecs, kf6-kauth, kf6-kguiaddons, kf6-kcolorscheme.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kconfigwidgets/-/archive/v6.10.0/kconfigwidgets-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kconfigwidgets-6.27.0.tar.xz"
|
||||
blake3 = "15ff532b825440a0e33f5be3875a25faf1f5cef1361ee73b7c09b29fd251eee7"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -89,6 +89,7 @@ find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
|
||||
# shall we use DBus?
|
||||
# enabled per default on Linux & BSD systems
|
||||
|
||||
@@ -46,4 +46,5 @@ done
|
||||
"""
|
||||
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kcoreaddons/-/archive/v6.10.0/kcoreaddons-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kcoreaddons-6.27.0.tar.xz"
|
||||
blake3 = "33f85b44639aa7378aac860cc38f0e2c9533280685bd96c1271d007578dfe248"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KCrash — crash handler, backtrace generation. OpenGL deps disabled for software rendering.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kcrash/-/archive/v6.10.0/kcrash-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kcrash-6.27.0.tar.xz"
|
||||
blake3 = "dcdd52301351857c6479c8d56d17302dd5a532606a2acdd86b6b7758457fa612"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KDBusAddons — D-Bus convenience wrappers. Needs Qt6DBus (qtbase with FEATURE_dbus=ON).
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kdbusaddons/-/archive/v6.10.0/kdbusaddons-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kdbusaddons-6.27.0.tar.xz"
|
||||
blake3 = "b0bc9d5e9046316dd6220c7ea6543f02e587c982d3e4821c7cb5a6e23fe1fa5e"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# KDeclarative — reduced real build for Red Bear OS.
|
||||
# QML-backed runtime pieces stay disabled with BUILD_WITH_QML=OFF.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kdeclarative/-/archive/v6.10.0/kdeclarative-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kdeclarative-6.27.0.tar.xz"
|
||||
blake3 = "5cf1c4ce5acb9ef26d2f80c3ed6450a5937e87db3a605c3307d87ab7a7bd0449"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -32,7 +32,7 @@ find_package(KF6GuiAddons ${KF_DEP_VERSION} REQUIRED)
|
||||
|
||||
|
||||
if(NOT WIN32 AND NOT APPLE AND NOT ANDROID AND NOT REDOX)
|
||||
######################################################## find_package(KF6GlobalAccel ${KF_DEP_VERSION} REQUIRED)
|
||||
######################################################### find_package(KF6GlobalAccel ${KF_DEP_VERSION} REQUIRED)
|
||||
set(HAVE_KGLOBALACCEL TRUE)
|
||||
else()
|
||||
set(HAVE_KGLOBALACCEL FALSE)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kded/-/archive/v6.10.0/kded-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kded-6.27.0.tar.xz"
|
||||
blake3 = "4d4bfa91d49a287e570fce2fa6032a7de0735e279e1c8319ae294be3f17f3fc5"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KGlobalAccel — global keyboard shortcuts. Needs kf6-kcrash + kf6-kdbusaddons.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kglobalaccel/-/archive/v6.10.0/kglobalaccel-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kglobalaccel-6.27.0.tar.xz"
|
||||
blake3 = "7d16ff45d50f644b75e982d7bf2316926e3fc38afb78c3a90d374766f4e52bc5"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KGuiAddons — GUI utilities, color management, text selection. Depends on qtbase, kf6-extra-cmake-modules. Wayland/X11 disabled.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kguiaddons/-/archive/v6.10.0/kguiaddons-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kguiaddons-6.27.0.tar.xz"
|
||||
blake3 = "cb5007a5420410d371f51694379100759fdc0ce32d4d0c7407e43bd4ba6c09f9"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KI18n — internationalization framework, gettext integration. Depends on qtbase, qtdeclarative, kf6-extra-cmake-modules.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/ki18n/-/archive/v6.10.0/ki18n-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/ki18n-6.27.0.tar.xz"
|
||||
blake3 = "b42b1a7a375b48b58e6519947468381b8e3c3d896ac9658da16f0a37a2863cae"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KIconThemes — icon theme management. Needs kf6-karchive for icon loading.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kiconthemes/-/archive/v6.10.0/kiconthemes-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kiconthemes-6.27.0.tar.xz"
|
||||
blake3 = "0a0e50aa2697d30b0ba55d831e03dd130f563efa63575a569186298de03aece3"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -108,6 +108,7 @@ find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6Svg ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
|
||||
|
||||
# shall we use DBus?
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KIdleTime — idle time detection. Used by KWin for screen dimming/locking.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kidletime/-/archive/v6.10.0/kidletime-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kidletime-6.27.0.tar.xz"
|
||||
blake3 = "49b8348f35f77a389c65adaf3f9e73fe59388d742463481099dfeb4aa6c512e2"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#TODO: KImageFormats — image format plugins loaded at runtime by QImageReader.
|
||||
[source]
|
||||
tar = "https://download.kde.org/stable/frameworks/6.26/kimageformats-6.26.0.tar.xz"
|
||||
blake3 = "83b75725d2ac623e8148808963937c8ef1d73f2d156101af95a13d34ba979e63"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kimageformats-6.27.0.tar.xz"
|
||||
blake3 = "cef068870fa6537126c2bb35b70b5c91d9362b91f8799644844d6d9e72d483ac"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KItemModels — Qt model framework extensions (KDescendantsProxyModel, KConcatenateRowsProxyModel, etc.)
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kitemmodels/-/archive/v6.10.0/kitemmodels-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kitemmodels-6.27.0.tar.xz"
|
||||
blake3 = "deb1429a1565221aed50677e13795d19d82586ad3e960134cc3ad325ef5bde48"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KItemViews — item view widgets (list/tree/table views)
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kitemviews/-/archive/v6.10.0/kitemviews-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kitemviews-6.27.0.tar.xz"
|
||||
blake3 = "68899df4bf5c7ca2a3afca263ad59d44ce015272696b2155d35ba70f95fba1be"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -28,76 +28,6 @@ include(CMakePackageConfigHelpers)
|
||||
set(REQUIRED_QT_VERSION 6.6.0)
|
||||
find_package(Qt6 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Widgets)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
|
||||
set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].")
|
||||
|
||||
@@ -113,7 +43,6 @@ ecm_setup_version(PROJECT VARIABLE_PREFIX KITEMVIEWS
|
||||
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF6ItemViewsConfigVersion.cmake"
|
||||
SOVERSION 6)
|
||||
|
||||
|
||||
#ecm_install_po_files_as_qm(poqm)
|
||||
|
||||
ecm_set_disabled_deprecation_versions(
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KJobWidgets — job and progress tracking widgets. Depends on qtbase, kf6-kcoreaddons, kf6-ki18n, kf6-kwidgetsaddons. DBus/X11 disabled.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kjobwidgets/-/archive/v6.10.0/kjobwidgets-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kjobwidgets-6.27.0.tar.xz"
|
||||
blake3 = "c4aeffd25ca3cd6c9777a91c95d6af5c06bc6801faccdfa5686fd4d7344cfca6"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -75,6 +75,7 @@ find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED)
|
||||
|
||||
if(NOT WIN32 AND NOT APPLE AND NOT ANDROID AND NOT HAIKU)
|
||||
option(WITH_X11 "Build with support for QX11Info::appUserTime()" ON)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KNewStuff — core-only build on Redox. Qt Quick, widgets, tools, and Kirigami-facing surfaces disabled. KF6Attica now available in-tree (kf6-attica recipe).
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/knewstuff/-/archive/v6.10.0/knewstuff-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/knewstuff-6.27.0.tar.xz"
|
||||
blake3 = "0e029c272924b2be79097d1bd228c099509ad9bcf60280b5f8ed3648c2db7be5"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KNotifications — notification framework. Depends on qtbase, kf6-kconfig, kf6-kcoreaddons, kf6-ki18n, kf6-kwindowsystem. D-Bus enabled (redbear-notifications provides org.freedesktop.Notifications).
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/knotifications/-/archive/v6.10.0/knotifications-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/knotifications-6.27.0.tar.xz"
|
||||
blake3 = "0de492b97562bdf4817595ffc297f7c2d19956be19af51da11272c1c98d29779"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* before re-generating it.
|
||||
*/
|
||||
|
||||
#include "/home/kellito/Builds/RedBear-OS/local/recipes/kde/kf6-knotifications/source/src/notifications_interface.h"
|
||||
#include "/mnt/data/Builds/RedBear-OS/local/recipes/kde/kf6-knotifications/source/src/notifications_interface.h"
|
||||
|
||||
/*
|
||||
* Implementation of interface class OrgFreedesktopNotificationsInterface
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KPackage — package framework, theme/plugin/installer management. Needs kf6-kservice.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kpackage/-/archive/v6.10.0/kpackage-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kpackage-6.27.0.tar.xz"
|
||||
blake3 = "b9314ebb690f1b725d5fbc5eb0372de58681e8ee76fa5125b23549c316b0d70c"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#TODO: KService — service and plugin framework, .desktop file parsing. Needs kf6-kdbusaddons.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/kservice/-/archive/v6.10.0/kservice-v6.10.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/kservice-6.27.0.tar.xz"
|
||||
blake3 = "28877a861faad994cd0d91feccda76954ae60643be5ef8b20f19a45462051cbc"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#TODO: KSvg — SVG rendering library with theme re-coloring and disk caching
|
||||
[source]
|
||||
tar = "https://download.kde.org/stable/frameworks/6.26/ksvg-6.26.0.tar.xz"
|
||||
blake3 = "d4828599e691021eba202d5af37c718d0479bc60d71781aba93911b32b508086"
|
||||
tar = "https://download.kde.org/stable/frameworks/6.27/ksvg-6.27.0.tar.xz"
|
||||
blake3 = "65daf2374c1d8c29fdbd6bdff0483e26d70d24002b590bbcd741a35ec5c8700d"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,6 @@
|
||||
#clang-format
|
||||
08d4f6335bcd60306b243f4fd53d1ea60a995a06
|
||||
#clang-tidy
|
||||
3120de70f25378cad1faf0ee4e96ac506006b953
|
||||
# re-run of clang-format
|
||||
30f46ade664d7a9492817befa838297aecc44506
|
||||
@@ -0,0 +1,28 @@
|
||||
# Ignore the following files
|
||||
*~
|
||||
*.[oa]
|
||||
*.diff
|
||||
*.kate-swp
|
||||
*.kdev4
|
||||
.kdev_include_paths
|
||||
*.kdevelop.pcs
|
||||
*.moc
|
||||
*.moc.cpp
|
||||
*.orig
|
||||
*.user
|
||||
.*.swp
|
||||
.swp.*
|
||||
Doxyfile
|
||||
Makefile
|
||||
avail
|
||||
random_seed
|
||||
/build*/
|
||||
CMakeLists.txt.user*
|
||||
*.unc-backup*
|
||||
.cmake/
|
||||
cmake-build-debug*
|
||||
.idea
|
||||
/.clang-format
|
||||
/compile_commands.json
|
||||
.clangd
|
||||
.cache
|
||||
@@ -0,0 +1,14 @@
|
||||
# SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org>
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
include:
|
||||
- project: sysadmin/ci-utilities
|
||||
file:
|
||||
- /gitlab-templates/linux-qt6.yml
|
||||
- /gitlab-templates/linux-qt6-next.yml
|
||||
- /gitlab-templates/freebsd-qt6.yml
|
||||
- /gitlab-templates/windows-qt6.yml
|
||||
- /gitlab-templates/android-qt6.yml
|
||||
- /gitlab-templates/alpine-qt6.yml
|
||||
- /gitlab-templates/xml-lint.yml
|
||||
- /gitlab-templates/yaml-lint.yml
|
||||
@@ -0,0 +1,16 @@
|
||||
Dependencies:
|
||||
- 'on': ['Linux', 'FreeBSD', 'Windows', 'macOS', 'Android']
|
||||
'require':
|
||||
'frameworks/extra-cmake-modules': '@same'
|
||||
'frameworks/karchive': '@same'
|
||||
'frameworks/kconfig': '@same'
|
||||
'frameworks/kcoreaddons': '@same'
|
||||
'frameworks/kguiaddons': '@same'
|
||||
'frameworks/kirigami': '@same'
|
||||
'frameworks/kcolorscheme': '@same'
|
||||
|
||||
Options:
|
||||
test-before-installing: True
|
||||
cppcheck-ignore-files: ['templates/']
|
||||
require-passing-tests-on: ['Linux', 'FreeBSD', 'Windows', 'macOS']
|
||||
enable-lsan: True
|
||||
@@ -0,0 +1,116 @@
|
||||
cmake_minimum_required(VERSION 3.29)
|
||||
|
||||
set(KF_VERSION "6.10.0") # handled by release scripts
|
||||
set(KF_DEP_VERSION "6.10.0") # handled by release scripts
|
||||
project(KSvg VERSION ${KF_VERSION})
|
||||
|
||||
# ECM setup
|
||||
include(FeatureSummary)
|
||||
find_package(ECM 6.10.0 NO_MODULE)
|
||||
set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://commits.kde.org/extra-cmake-modules")
|
||||
feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||
|
||||
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
||||
|
||||
include(KDEInstallDirs)
|
||||
include(KDECMakeSettings)
|
||||
include(KDEGitCommitHooks)
|
||||
include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
|
||||
|
||||
include(ECMGenerateExportHeader)
|
||||
include(ECMGenerateHeaders)
|
||||
include(CMakePackageConfigHelpers)
|
||||
include(ECMSetupVersion)
|
||||
include(ECMQtDeclareLoggingCategory)
|
||||
include(KDEPackageAppTemplates)
|
||||
include(ECMGenerateQmlTypes)
|
||||
include(ECMMarkNonGuiExecutable)
|
||||
include(ECMDeprecationSettings)
|
||||
include(ECMQmlModule)
|
||||
include(ECMGenerateQDoc)
|
||||
|
||||
ecm_setup_version(PROJECT
|
||||
VARIABLE_PREFIX KSVG
|
||||
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/ksvg_version.h"
|
||||
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF6SvgConfigVersion.cmake"
|
||||
SOVERSION 6)
|
||||
|
||||
################# now find all used packages #################
|
||||
|
||||
set (REQUIRED_QT_VERSION 6.9.0)
|
||||
|
||||
find_package(Qt6 ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE COMPONENTS Quick Gui Qml Svg QuickControls2)
|
||||
|
||||
find_package(KF6 ${KF_DEP_VERSION} REQUIRED
|
||||
COMPONENTS
|
||||
Archive # svgz
|
||||
Config # rects cache
|
||||
ColorScheme
|
||||
CoreAddons
|
||||
GuiAddons # KImageCache
|
||||
KirigamiPlatform # Kirigami.Theme
|
||||
)
|
||||
|
||||
#########################################################################
|
||||
|
||||
ecm_set_disabled_deprecation_versions(
|
||||
QT 6.11.0
|
||||
KF 6.23.0
|
||||
)
|
||||
|
||||
#add_definitions(-Wno-deprecated)
|
||||
|
||||
#########################################################################
|
||||
|
||||
option(BUILD_TOOLS "Build and install KSVG tools." OFF)
|
||||
|
||||
option(BUILD_COVERAGE "Build Plasma Frameworks with gcov support" OFF)
|
||||
|
||||
if(BUILD_COVERAGE)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov")
|
||||
endif()
|
||||
|
||||
# make ksvg_version.h available
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
################# list the subdirectories #################
|
||||
add_subdirectory(src)
|
||||
|
||||
if (BUILD_TESTING)
|
||||
add_subdirectory(autotests)
|
||||
endif()
|
||||
|
||||
################ create PlasmaConfig.cmake and install it ###########################
|
||||
|
||||
# create a Config.cmake and a ConfigVersion.cmake file and install them
|
||||
|
||||
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF6Svg")
|
||||
|
||||
configure_package_config_file(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/KF6SvgConfig.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/KF6SvgConfig.cmake"
|
||||
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
|
||||
PATH_VARS CMAKE_INSTALL_PREFIX
|
||||
)
|
||||
|
||||
install(FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/KF6SvgConfig.cmake"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/KF6SvgConfigVersion.cmake"
|
||||
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
||||
COMPONENT Devel
|
||||
)
|
||||
|
||||
install(EXPORT KF6SvgTargets
|
||||
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
||||
FILE KF6SvgTargets.cmake
|
||||
NAMESPACE KF6::
|
||||
COMPONENT Devel)
|
||||
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ksvg_version.h
|
||||
DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF}/KSvg COMPONENT Devel )
|
||||
|
||||
include(ECMFeatureSummary)
|
||||
ecm_feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||
|
||||
kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
|
||||
@@ -0,0 +1,16 @@
|
||||
@PACKAGE_INIT@
|
||||
|
||||
# Any changes in this ".cmake" file will be overwritten by CMake, the source is the ".cmake.in" file.
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/KF6SvgTargets.cmake")
|
||||
|
||||
set(KSvg_INSTALL_PREFIX "@PACKAGE_CMAKE_INSTALL_PREFIX@")
|
||||
|
||||
set(KSvg_LIBRARIES KF6::Svg)
|
||||
|
||||
include(CMakeFindDependencyMacro)
|
||||
find_dependency(Qt6Gui "@REQUIRED_QT_VERSION@")
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/KF6SvgTargets.cmake")
|
||||
|
||||
@PACKAGE_SETUP_AUTOMOC_VARIABLES@
|
||||
@@ -0,0 +1,22 @@
|
||||
Copyright (c) <year> <owner>. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -0,0 +1,26 @@
|
||||
Copyright (c) <year> <owner>. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -0,0 +1,121 @@
|
||||
Creative Commons Legal Code
|
||||
|
||||
CC0 1.0 Universal
|
||||
|
||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||
HEREUNDER.
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer
|
||||
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||
authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for
|
||||
the purpose of contributing to a commons of creative, cultural and
|
||||
scientific works ("Commons") that the public can reliably and without fear
|
||||
of later claims of infringement build upon, modify, incorporate in other
|
||||
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||
and for any purposes, including without limitation commercial purposes.
|
||||
These owners may contribute to the Commons to promote the ideal of a free
|
||||
culture and the further production of creative, cultural and scientific
|
||||
works, or to gain reputation or greater distribution for their Work in
|
||||
part through the use and efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any
|
||||
expectation of additional consideration or compensation, the person
|
||||
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||
protected by copyright and related or neighboring rights ("Copyright and
|
||||
Related Rights"). Copyright and Related Rights include, but are not
|
||||
limited to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display,
|
||||
communicate, and translate a Work;
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
iii. publicity and privacy rights pertaining to a person's image or
|
||||
likeness depicted in a Work;
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||
in a Work;
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal
|
||||
protection of databases, and under any national implementation
|
||||
thereof, including any amended or successor version of such
|
||||
directive); and
|
||||
vii. other similar, equivalent or corresponding rights throughout the
|
||||
world based on applicable law or treaty, and any national
|
||||
implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||
of action, whether now known or unknown (including existing as well as
|
||||
future claims and causes of action), in the Work (i) in all territories
|
||||
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||
treaty (including future time extensions), (iii) in any current or future
|
||||
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||
including without limitation commercial, advertising or promotional
|
||||
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||
member of the public at large and to the detriment of Affirmer's heirs and
|
||||
successors, fully intending that such Waiver shall not be subject to
|
||||
revocation, rescission, cancellation, termination, or any other legal or
|
||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||
as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||
be judged legally invalid or ineffective under applicable law, then the
|
||||
Waiver shall be preserved to the maximum extent permitted taking into
|
||||
account Affirmer's express Statement of Purpose. In addition, to the
|
||||
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||
maximum duration provided by applicable law or treaty (including future
|
||||
time extensions), (iii) in any current or future medium and for any number
|
||||
of copies, and (iv) for any purpose whatsoever, including without
|
||||
limitation commercial, advertising or promotional purposes (the
|
||||
"License"). The License shall be deemed effective as of the date CC0 was
|
||||
applied by Affirmer to the Work. Should any part of the License for any
|
||||
reason be judged legally invalid or ineffective under applicable law, such
|
||||
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||
of the License, and in such case Affirmer hereby affirms that he or she
|
||||
will not (i) exercise any of his or her remaining Copyright and Related
|
||||
Rights in the Work or (ii) assert any associated claims and causes of
|
||||
action with respect to the Work, in either case contrary to Affirmer's
|
||||
express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||
surrendered, licensed or otherwise affected by this document.
|
||||
b. Affirmer offers the Work as-is and makes no representations or
|
||||
warranties of any kind concerning the Work, express, implied,
|
||||
statutory or otherwise, including without limitation warranties of
|
||||
title, merchantability, fitness for a particular purpose, non
|
||||
infringement, or the absence of latent or other defects, accuracy, or
|
||||
the present or absence of errors, whether or not discoverable, all to
|
||||
the greatest extent permissible under applicable law.
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without
|
||||
limitation any person's Copyright and Related Rights in the Work.
|
||||
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||
consents, permissions or other rights required for any use of the
|
||||
Work.
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||
party to this document and has no duty or obligation with respect to
|
||||
this CC0 or use of the Work.
|
||||
@@ -0,0 +1,319 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your freedom to share
|
||||
and change it. By contrast, the GNU General Public License is intended to
|
||||
guarantee your freedom to share and change free software--to make sure the
|
||||
software is free for all its users. This General Public License applies to
|
||||
most of the Free Software Foundation's software and to any other program whose
|
||||
authors commit to using it. (Some other Free Software Foundation software
|
||||
is covered by the GNU Lesser General Public License instead.) You can apply
|
||||
it to your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not price. Our
|
||||
General Public Licenses are designed to make sure that you have the freedom
|
||||
to distribute copies of free software (and charge for this service if you
|
||||
wish), that you receive source code or can get it if you want it, that you
|
||||
can change the software or use pieces of it in new free programs; and that
|
||||
you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid anyone to
|
||||
deny you these rights or to ask you to surrender the rights. These restrictions
|
||||
translate to certain responsibilities for you if you distribute copies of
|
||||
the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether gratis or
|
||||
for a fee, you must give the recipients all the rights that you have. You
|
||||
must make sure that they, too, receive or can get the source code. And you
|
||||
must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and (2)
|
||||
offer you this license which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain that
|
||||
everyone understands that there is no warranty for this free software. If
|
||||
the software is modified by someone else and passed on, we want its recipients
|
||||
to know that what they have is not the original, so that any problems introduced
|
||||
by others will not reflect on the original authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software patents. We
|
||||
wish to avoid the danger that redistributors of a free program will individually
|
||||
obtain patent licenses, in effect making the program proprietary. To prevent
|
||||
this, we have made it clear that any patent must be licensed for everyone's
|
||||
free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification
|
||||
follow.
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains a notice
|
||||
placed by the copyright holder saying it may be distributed under the terms
|
||||
of this General Public License. The "Program", below, refers to any such program
|
||||
or work, and a "work based on the Program" means either the Program or any
|
||||
derivative work under copyright law: that is to say, a work containing the
|
||||
Program or a portion of it, either verbatim or with modifications and/or translated
|
||||
into another language. (Hereinafter, translation is included without limitation
|
||||
in the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not covered
|
||||
by this License; they are outside its scope. The act of running the Program
|
||||
is not restricted, and the output from the Program is covered only if its
|
||||
contents constitute a work based on the Program (independent of having been
|
||||
made by running the Program). Whether that is true depends on what the Program
|
||||
does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's source code
|
||||
as you receive it, in any medium, provided that you conspicuously and appropriately
|
||||
publish on each copy an appropriate copyright notice and disclaimer of warranty;
|
||||
keep intact all the notices that refer to this License and to the absence
|
||||
of any warranty; and give any other recipients of the Program a copy of this
|
||||
License along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and you
|
||||
may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion of it,
|
||||
thus forming a work based on the Program, and copy and distribute such modifications
|
||||
or work under the terms of Section 1 above, provided that you also meet all
|
||||
of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices stating that
|
||||
you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in whole or
|
||||
in part contains or is derived from the Program or any part thereof, to be
|
||||
licensed as a whole at no charge to all third parties under the terms of this
|
||||
License.
|
||||
|
||||
c) If the modified program normally reads commands interactively when run,
|
||||
you must cause it, when started running for such interactive use in the most
|
||||
ordinary way, to print or display an announcement including an appropriate
|
||||
copyright notice and a notice that there is no warranty (or else, saying that
|
||||
you provide a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this License.
|
||||
(Exception: if the Program itself is interactive but does not normally print
|
||||
such an announcement, your work based on the Program is not required to print
|
||||
an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If identifiable
|
||||
sections of that work are not derived from the Program, and can be reasonably
|
||||
considered independent and separate works in themselves, then this License,
|
||||
and its terms, do not apply to those sections when you distribute them as
|
||||
separate works. But when you distribute the same sections as part of a whole
|
||||
which is a work based on the Program, the distribution of the whole must be
|
||||
on the terms of this License, whose permissions for other licensees extend
|
||||
to the entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest your
|
||||
rights to work written entirely by you; rather, the intent is to exercise
|
||||
the right to control the distribution of derivative or collective works based
|
||||
on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program with
|
||||
the Program (or with a work based on the Program) on a volume of a storage
|
||||
or distribution medium does not bring the other work under the scope of this
|
||||
License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it, under Section
|
||||
2) in object code or executable form under the terms of Sections 1 and 2 above
|
||||
provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable source code,
|
||||
which must be distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three years, to give
|
||||
any third party, for a charge no more than your cost of physically performing
|
||||
source distribution, a complete machine-readable copy of the corresponding
|
||||
source code, to be distributed under the terms of Sections 1 and 2 above on
|
||||
a medium customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer to distribute
|
||||
corresponding source code. (This alternative is allowed only for noncommercial
|
||||
distribution and only if you received the program in object code or executable
|
||||
form with such an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for making
|
||||
modifications to it. For an executable work, complete source code means all
|
||||
the source code for all modules it contains, plus any associated interface
|
||||
definition files, plus the scripts used to control compilation and installation
|
||||
of the executable. However, as a special exception, the source code distributed
|
||||
need not include anything that is normally distributed (in either source or
|
||||
binary form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component itself
|
||||
accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering access to
|
||||
copy from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place counts as distribution of the source code,
|
||||
even though third parties are not compelled to copy the source along with
|
||||
the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program except
|
||||
as expressly provided under this License. Any attempt otherwise to copy, modify,
|
||||
sublicense or distribute the Program is void, and will automatically terminate
|
||||
your rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses terminated
|
||||
so long as such parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not signed
|
||||
it. However, nothing else grants you permission to modify or distribute the
|
||||
Program or its derivative works. These actions are prohibited by law if you
|
||||
do not accept this License. Therefore, by modifying or distributing the Program
|
||||
(or any work based on the Program), you indicate your acceptance of this License
|
||||
to do so, and all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the Program),
|
||||
the recipient automatically receives a license from the original licensor
|
||||
to copy, distribute or modify the Program subject to these terms and conditions.
|
||||
You may not impose any further restrictions on the recipients' exercise of
|
||||
the rights granted herein. You are not responsible for enforcing compliance
|
||||
by third parties to this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent infringement
|
||||
or for any other reason (not limited to patent issues), conditions are imposed
|
||||
on you (whether by court order, agreement or otherwise) that contradict the
|
||||
conditions of this License, they do not excuse you from the conditions of
|
||||
this License. If you cannot distribute so as to satisfy simultaneously your
|
||||
obligations under this License and any other pertinent obligations, then as
|
||||
a consequence you may not distribute the Program at all. For example, if a
|
||||
patent license would not permit royalty-free redistribution of the Program
|
||||
by all those who receive copies directly or indirectly through you, then the
|
||||
only way you could satisfy both it and this License would be to refrain entirely
|
||||
from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply and
|
||||
the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any patents
|
||||
or other property right claims or to contest validity of any such claims;
|
||||
this section has the sole purpose of protecting the integrity of the free
|
||||
software distribution system, which is implemented by public license practices.
|
||||
Many people have made generous contributions to the wide range of software
|
||||
distributed through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing to
|
||||
distribute software through any other system and a licensee cannot impose
|
||||
that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to be a
|
||||
consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in certain
|
||||
countries either by patents or by copyrighted interfaces, the original copyright
|
||||
holder who places the Program under this License may add an explicit geographical
|
||||
distribution limitation excluding those countries, so that distribution is
|
||||
permitted only in or among countries not thus excluded. In such case, this
|
||||
License incorporates the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions of
|
||||
the General Public License from time to time. Such new versions will be similar
|
||||
in spirit to the present version, but may differ in detail to address new
|
||||
problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program specifies
|
||||
a version number of this License which applies to it and "any later version",
|
||||
you have the option of following the terms and conditions either of that version
|
||||
or of any later version published by the Free Software Foundation. If the
|
||||
Program does not specify a version number of this License, you may choose
|
||||
any version ever published by the Free Software Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free programs
|
||||
whose distribution conditions are different, write to the author to ask for
|
||||
permission. For software which is copyrighted by the Free Software Foundation,
|
||||
write to the Free Software Foundation; we sometimes make exceptions for this.
|
||||
Our decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing and reuse
|
||||
of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
|
||||
THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
|
||||
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
|
||||
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
|
||||
OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
|
||||
OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
|
||||
OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
|
||||
OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
|
||||
HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest possible
|
||||
use to the public, the best way to achieve this is to make it free software
|
||||
which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to attach
|
||||
them to the start of each source file to most effectively convey the exclusion
|
||||
of warranty; and each file should have at least the "copyright" line and a
|
||||
pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and an idea of what it does.>
|
||||
|
||||
Copyright (C)< yyyy> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
|
||||
Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this when
|
||||
it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
|
||||
with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software,
|
||||
and you are welcome to redistribute it under certain conditions; type `show
|
||||
c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may be
|
||||
called something other than `show w' and `show c'; they could even be mouse-clicks
|
||||
or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary. Here
|
||||
is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision'
|
||||
(which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon >, 1 April 1989 Ty Coon, President of Vice This General
|
||||
Public License does not permit incorporating your program into proprietary
|
||||
programs. If your program is a subroutine library, you may consider it more
|
||||
useful to permit linking proprietary applications with the library. If this
|
||||
is what you want to do, use the GNU Lesser General Public License instead
|
||||
of this License.
|
||||
@@ -0,0 +1,319 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your freedom to share
|
||||
and change it. By contrast, the GNU General Public License is intended to
|
||||
guarantee your freedom to share and change free software--to make sure the
|
||||
software is free for all its users. This General Public License applies to
|
||||
most of the Free Software Foundation's software and to any other program whose
|
||||
authors commit to using it. (Some other Free Software Foundation software
|
||||
is covered by the GNU Lesser General Public License instead.) You can apply
|
||||
it to your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not price. Our
|
||||
General Public Licenses are designed to make sure that you have the freedom
|
||||
to distribute copies of free software (and charge for this service if you
|
||||
wish), that you receive source code or can get it if you want it, that you
|
||||
can change the software or use pieces of it in new free programs; and that
|
||||
you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid anyone to
|
||||
deny you these rights or to ask you to surrender the rights. These restrictions
|
||||
translate to certain responsibilities for you if you distribute copies of
|
||||
the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether gratis or
|
||||
for a fee, you must give the recipients all the rights that you have. You
|
||||
must make sure that they, too, receive or can get the source code. And you
|
||||
must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and (2)
|
||||
offer you this license which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain that
|
||||
everyone understands that there is no warranty for this free software. If
|
||||
the software is modified by someone else and passed on, we want its recipients
|
||||
to know that what they have is not the original, so that any problems introduced
|
||||
by others will not reflect on the original authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software patents. We
|
||||
wish to avoid the danger that redistributors of a free program will individually
|
||||
obtain patent licenses, in effect making the program proprietary. To prevent
|
||||
this, we have made it clear that any patent must be licensed for everyone's
|
||||
free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification
|
||||
follow.
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains a notice
|
||||
placed by the copyright holder saying it may be distributed under the terms
|
||||
of this General Public License. The "Program", below, refers to any such program
|
||||
or work, and a "work based on the Program" means either the Program or any
|
||||
derivative work under copyright law: that is to say, a work containing the
|
||||
Program or a portion of it, either verbatim or with modifications and/or translated
|
||||
into another language. (Hereinafter, translation is included without limitation
|
||||
in the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not covered
|
||||
by this License; they are outside its scope. The act of running the Program
|
||||
is not restricted, and the output from the Program is covered only if its
|
||||
contents constitute a work based on the Program (independent of having been
|
||||
made by running the Program). Whether that is true depends on what the Program
|
||||
does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's source code
|
||||
as you receive it, in any medium, provided that you conspicuously and appropriately
|
||||
publish on each copy an appropriate copyright notice and disclaimer of warranty;
|
||||
keep intact all the notices that refer to this License and to the absence
|
||||
of any warranty; and give any other recipients of the Program a copy of this
|
||||
License along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and you
|
||||
may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion of it,
|
||||
thus forming a work based on the Program, and copy and distribute such modifications
|
||||
or work under the terms of Section 1 above, provided that you also meet all
|
||||
of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices stating that
|
||||
you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in whole or
|
||||
in part contains or is derived from the Program or any part thereof, to be
|
||||
licensed as a whole at no charge to all third parties under the terms of this
|
||||
License.
|
||||
|
||||
c) If the modified program normally reads commands interactively when run,
|
||||
you must cause it, when started running for such interactive use in the most
|
||||
ordinary way, to print or display an announcement including an appropriate
|
||||
copyright notice and a notice that there is no warranty (or else, saying that
|
||||
you provide a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this License.
|
||||
(Exception: if the Program itself is interactive but does not normally print
|
||||
such an announcement, your work based on the Program is not required to print
|
||||
an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If identifiable
|
||||
sections of that work are not derived from the Program, and can be reasonably
|
||||
considered independent and separate works in themselves, then this License,
|
||||
and its terms, do not apply to those sections when you distribute them as
|
||||
separate works. But when you distribute the same sections as part of a whole
|
||||
which is a work based on the Program, the distribution of the whole must be
|
||||
on the terms of this License, whose permissions for other licensees extend
|
||||
to the entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest your
|
||||
rights to work written entirely by you; rather, the intent is to exercise
|
||||
the right to control the distribution of derivative or collective works based
|
||||
on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program with
|
||||
the Program (or with a work based on the Program) on a volume of a storage
|
||||
or distribution medium does not bring the other work under the scope of this
|
||||
License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it, under Section
|
||||
2) in object code or executable form under the terms of Sections 1 and 2 above
|
||||
provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable source code,
|
||||
which must be distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three years, to give
|
||||
any third party, for a charge no more than your cost of physically performing
|
||||
source distribution, a complete machine-readable copy of the corresponding
|
||||
source code, to be distributed under the terms of Sections 1 and 2 above on
|
||||
a medium customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer to distribute
|
||||
corresponding source code. (This alternative is allowed only for noncommercial
|
||||
distribution and only if you received the program in object code or executable
|
||||
form with such an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for making
|
||||
modifications to it. For an executable work, complete source code means all
|
||||
the source code for all modules it contains, plus any associated interface
|
||||
definition files, plus the scripts used to control compilation and installation
|
||||
of the executable. However, as a special exception, the source code distributed
|
||||
need not include anything that is normally distributed (in either source or
|
||||
binary form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component itself
|
||||
accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering access to
|
||||
copy from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place counts as distribution of the source code,
|
||||
even though third parties are not compelled to copy the source along with
|
||||
the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program except
|
||||
as expressly provided under this License. Any attempt otherwise to copy, modify,
|
||||
sublicense or distribute the Program is void, and will automatically terminate
|
||||
your rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses terminated
|
||||
so long as such parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not signed
|
||||
it. However, nothing else grants you permission to modify or distribute the
|
||||
Program or its derivative works. These actions are prohibited by law if you
|
||||
do not accept this License. Therefore, by modifying or distributing the Program
|
||||
(or any work based on the Program), you indicate your acceptance of this License
|
||||
to do so, and all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the Program),
|
||||
the recipient automatically receives a license from the original licensor
|
||||
to copy, distribute or modify the Program subject to these terms and conditions.
|
||||
You may not impose any further restrictions on the recipients' exercise of
|
||||
the rights granted herein. You are not responsible for enforcing compliance
|
||||
by third parties to this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent infringement
|
||||
or for any other reason (not limited to patent issues), conditions are imposed
|
||||
on you (whether by court order, agreement or otherwise) that contradict the
|
||||
conditions of this License, they do not excuse you from the conditions of
|
||||
this License. If you cannot distribute so as to satisfy simultaneously your
|
||||
obligations under this License and any other pertinent obligations, then as
|
||||
a consequence you may not distribute the Program at all. For example, if a
|
||||
patent license would not permit royalty-free redistribution of the Program
|
||||
by all those who receive copies directly or indirectly through you, then the
|
||||
only way you could satisfy both it and this License would be to refrain entirely
|
||||
from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply and
|
||||
the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any patents
|
||||
or other property right claims or to contest validity of any such claims;
|
||||
this section has the sole purpose of protecting the integrity of the free
|
||||
software distribution system, which is implemented by public license practices.
|
||||
Many people have made generous contributions to the wide range of software
|
||||
distributed through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing to
|
||||
distribute software through any other system and a licensee cannot impose
|
||||
that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to be a
|
||||
consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in certain
|
||||
countries either by patents or by copyrighted interfaces, the original copyright
|
||||
holder who places the Program under this License may add an explicit geographical
|
||||
distribution limitation excluding those countries, so that distribution is
|
||||
permitted only in or among countries not thus excluded. In such case, this
|
||||
License incorporates the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions of
|
||||
the General Public License from time to time. Such new versions will be similar
|
||||
in spirit to the present version, but may differ in detail to address new
|
||||
problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program specifies
|
||||
a version number of this License which applies to it and "any later version",
|
||||
you have the option of following the terms and conditions either of that version
|
||||
or of any later version published by the Free Software Foundation. If the
|
||||
Program does not specify a version number of this License, you may choose
|
||||
any version ever published by the Free Software Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free programs
|
||||
whose distribution conditions are different, write to the author to ask for
|
||||
permission. For software which is copyrighted by the Free Software Foundation,
|
||||
write to the Free Software Foundation; we sometimes make exceptions for this.
|
||||
Our decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing and reuse
|
||||
of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
|
||||
THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
|
||||
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
|
||||
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
|
||||
OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
|
||||
OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
|
||||
OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
|
||||
OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
|
||||
HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest possible
|
||||
use to the public, the best way to achieve this is to make it free software
|
||||
which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to attach
|
||||
them to the start of each source file to most effectively convey the exclusion
|
||||
of warranty; and each file should have at least the "copyright" line and a
|
||||
pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and an idea of what it does.>
|
||||
|
||||
Copyright (C) <yyyy> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
|
||||
Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this when
|
||||
it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
|
||||
with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software,
|
||||
and you are welcome to redistribute it under certain conditions; type `show
|
||||
c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may be
|
||||
called something other than `show w' and `show c'; they could even be mouse-clicks
|
||||
or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary. Here
|
||||
is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision'
|
||||
(which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General
|
||||
Public License does not permit incorporating your program into proprietary
|
||||
programs. If your program is a subroutine library, you may consider it more
|
||||
useful to permit linking proprietary applications with the library. If this
|
||||
is what you want to do, use the GNU Lesser General Public License instead
|
||||
of this License.
|
||||
@@ -0,0 +1,625 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for software and
|
||||
other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed to take
|
||||
away your freedom to share and change the works. By contrast, the GNU General
|
||||
Public License is intended to guarantee your freedom to share and change all
|
||||
versions of a program--to make sure it remains free software for all its users.
|
||||
We, the Free Software Foundation, use the GNU General Public License for most
|
||||
of our software; it applies also to any other work released this way by its
|
||||
authors. You can apply it to your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not price. Our
|
||||
General Public Licenses are designed to make sure that you have the freedom
|
||||
to distribute copies of free software (and charge for them if you wish), that
|
||||
you receive source code or can get it if you want it, that you can change
|
||||
the software or use pieces of it in new free programs, and that you know you
|
||||
can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you these rights
|
||||
or asking you to surrender the rights. Therefore, you have certain responsibilities
|
||||
if you distribute copies of the software, or if you modify it: responsibilities
|
||||
to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether gratis or
|
||||
for a fee, you must pass on to the recipients the same freedoms that you received.
|
||||
You must make sure that they, too, receive or can get the source code. And
|
||||
you must show them these terms so they know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps: (1) assert
|
||||
copyright on the software, and (2) offer you this License giving you legal
|
||||
permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains that
|
||||
there is no warranty for this free software. For both users' and authors'
|
||||
sake, the GPL requires that modified versions be marked as changed, so that
|
||||
their problems will not be attributed erroneously to authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run modified
|
||||
versions of the software inside them, although the manufacturer can do so.
|
||||
This is fundamentally incompatible with the aim of protecting users' freedom
|
||||
to change the software. The systematic pattern of such abuse occurs in the
|
||||
area of products for individuals to use, which is precisely where it is most
|
||||
unacceptable. Therefore, we have designed this version of the GPL to prohibit
|
||||
the practice for those products. If such problems arise substantially in other
|
||||
domains, we stand ready to extend this provision to those domains in future
|
||||
versions of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents. States
|
||||
should not allow patents to restrict development and use of software on general-purpose
|
||||
computers, but in those that do, we wish to avoid the special danger that
|
||||
patents applied to a free program could make it effectively proprietary. To
|
||||
prevent this, the GPL assures that patents cannot be used to render the program
|
||||
non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification
|
||||
follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of works,
|
||||
such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this License.
|
||||
Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals
|
||||
or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work in
|
||||
a fashion requiring copyright permission, other than the making of an exact
|
||||
copy. The resulting work is called a "modified version" of the earlier work
|
||||
or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based on the
|
||||
Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without permission,
|
||||
would make you directly or secondarily liable for infringement under applicable
|
||||
copyright law, except executing it on a computer or modifying a private copy.
|
||||
Propagation includes copying, distribution (with or without modification),
|
||||
making available to the public, and in some countries other activities as
|
||||
well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other parties
|
||||
to make or receive copies. Mere interaction with a user through a computer
|
||||
network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices" to the
|
||||
extent that it includes a convenient and prominently visible feature that
|
||||
(1) displays an appropriate copyright notice, and (2) tells the user that
|
||||
there is no warranty for the work (except to the extent that warranties are
|
||||
provided), that licensees may convey the work under this License, and how
|
||||
to view a copy of this License. If the interface presents a list of user commands
|
||||
or options, such as a menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work for making
|
||||
modifications to it. "Object code" means any non-source form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official standard
|
||||
defined by a recognized standards body, or, in the case of interfaces specified
|
||||
for a particular programming language, one that is widely used among developers
|
||||
working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other than
|
||||
the work as a whole, that (a) is included in the normal form of packaging
|
||||
a Major Component, but which is not part of that Major Component, and (b)
|
||||
serves only to enable use of the work with that Major Component, or to implement
|
||||
a Standard Interface for which an implementation is available to the public
|
||||
in source code form. A "Major Component", in this context, means a major essential
|
||||
component (kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to produce
|
||||
the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all the source
|
||||
code needed to generate, install, and (for an executable work) run the object
|
||||
code and to modify the work, including scripts to control those activities.
|
||||
However, it does not include the work's System Libraries, or general-purpose
|
||||
tools or generally available free programs which are used unmodified in performing
|
||||
those activities but which are not part of the work. For example, Corresponding
|
||||
Source includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically linked
|
||||
subprograms that the work is specifically designed to require, such as by
|
||||
intimate data communication or control flow between those subprograms and
|
||||
other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users can regenerate
|
||||
automatically from other parts of the Corresponding Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of copyright
|
||||
on the Program, and are irrevocable provided the stated conditions are met.
|
||||
This License explicitly affirms your unlimited permission to run the unmodified
|
||||
Program. The output from running a covered work is covered by this License
|
||||
only if the output, given its content, constitutes a covered work. This License
|
||||
acknowledges your rights of fair use or other equivalent, as provided by copyright
|
||||
law.
|
||||
|
||||
You may make, run and propagate covered works that you do not convey, without
|
||||
conditions so long as your license otherwise remains in force. You may convey
|
||||
covered works to others for the sole purpose of having them make modifications
|
||||
exclusively for you, or provide you with facilities for running those works,
|
||||
provided that you comply with the terms of this License in conveying all material
|
||||
for which you do not control copyright. Those thus making or running the covered
|
||||
works for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of your copyrighted
|
||||
material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under the conditions
|
||||
stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological measure
|
||||
under any applicable law fulfilling obligations under article 11 of the WIPO
|
||||
copyright treaty adopted on 20 December 1996, or similar laws prohibiting
|
||||
or restricting circumvention of such measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid circumvention
|
||||
of technological measures to the extent such circumvention is effected by
|
||||
exercising rights under this License with respect to the covered work, and
|
||||
you disclaim any intention to limit operation or modification of the work
|
||||
as a means of enforcing, against the work's users, your or third parties'
|
||||
legal rights to forbid circumvention of technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you receive
|
||||
it, in any medium, provided that you conspicuously and appropriately publish
|
||||
on each copy an appropriate copyright notice; keep intact all notices stating
|
||||
that this License and any non-permissive terms added in accord with section
|
||||
7 apply to the code; keep intact all notices of the absence of any warranty;
|
||||
and give all recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey, and you
|
||||
may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to produce
|
||||
it from the Program, in the form of source code under the terms of section
|
||||
4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified it, and
|
||||
giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is released under
|
||||
this License and any conditions added under section 7. This requirement modifies
|
||||
the requirement in section 4 to "keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this License to anyone
|
||||
who comes into possession of a copy. This License will therefore apply, along
|
||||
with any applicable section 7 additional terms, to the whole of the work,
|
||||
and all its parts, regardless of how they are packaged. This License gives
|
||||
no permission to license the work in any other way, but it does not invalidate
|
||||
such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display Appropriate
|
||||
Legal Notices; however, if the Program has interactive interfaces that do
|
||||
not display Appropriate Legal Notices, your work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent works,
|
||||
which are not by their nature extensions of the covered work, and which are
|
||||
not combined with it such as to form a larger program, in or on a volume of
|
||||
a storage or distribution medium, is called an "aggregate" if the compilation
|
||||
and its resulting copyright are not used to limit the access or legal rights
|
||||
of the compilation's users beyond what the individual works permit. Inclusion
|
||||
of a covered work in an aggregate does not cause this License to apply to
|
||||
the other parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms of sections
|
||||
4 and 5, provided that you also convey the machine-readable Corresponding
|
||||
Source under the terms of this License, in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product (including
|
||||
a physical distribution medium), accompanied by the Corresponding Source fixed
|
||||
on a durable physical medium customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product (including
|
||||
a physical distribution medium), accompanied by a written offer, valid for
|
||||
at least three years and valid for as long as you offer spare parts or customer
|
||||
support for that product model, to give anyone who possesses the object code
|
||||
either (1) a copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical medium customarily
|
||||
used for software interchange, for a price no more than your reasonable cost
|
||||
of physically performing this conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the written
|
||||
offer to provide the Corresponding Source. This alternative is allowed only
|
||||
occasionally and noncommercially, and only if you received the object code
|
||||
with such an offer, in accord with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated place (gratis
|
||||
or for a charge), and offer equivalent access to the Corresponding Source
|
||||
in the same way through the same place at no further charge. You need not
|
||||
require recipients to copy the Corresponding Source along with the object
|
||||
code. If the place to copy the object code is a network server, the Corresponding
|
||||
Source may be on a different server (operated by you or a third party) that
|
||||
supports equivalent copying facilities, provided you maintain clear directions
|
||||
next to the object code saying where to find the Corresponding Source. Regardless
|
||||
of what server hosts the Corresponding Source, you remain obligated to ensure
|
||||
that it is available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided you inform
|
||||
other peers where the object code and Corresponding Source of the work are
|
||||
being offered to the general public at no charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded from
|
||||
the Corresponding Source as a System Library, need not be included in conveying
|
||||
the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any tangible
|
||||
personal property which is normally used for personal, family, or household
|
||||
purposes, or (2) anything designed or sold for incorporation into a dwelling.
|
||||
In determining whether a product is a consumer product, doubtful cases shall
|
||||
be resolved in favor of coverage. For a particular product received by a particular
|
||||
user, "normally used" refers to a typical or common use of that class of product,
|
||||
regardless of the status of the particular user or of the way in which the
|
||||
particular user actually uses, or expects or is expected to use, the product.
|
||||
A product is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent the
|
||||
only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods, procedures,
|
||||
authorization keys, or other information required to install and execute modified
|
||||
versions of a covered work in that User Product from a modified version of
|
||||
its Corresponding Source. The information must suffice to ensure that the
|
||||
continued functioning of the modified object code is in no case prevented
|
||||
or interfered with solely because modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or specifically
|
||||
for use in, a User Product, and the conveying occurs as part of a transaction
|
||||
in which the right of possession and use of the User Product is transferred
|
||||
to the recipient in perpetuity or for a fixed term (regardless of how the
|
||||
transaction is characterized), the Corresponding Source conveyed under this
|
||||
section must be accompanied by the Installation Information. But this requirement
|
||||
does not apply if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has been installed
|
||||
in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a requirement
|
||||
to continue to provide support service, warranty, or updates for a work that
|
||||
has been modified or installed by the recipient, or for the User Product in
|
||||
which it has been modified or installed. Access to a network may be denied
|
||||
when the modification itself materially and adversely affects the operation
|
||||
of the network or violates the rules and protocols for communication across
|
||||
the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided, in accord
|
||||
with this section must be in a format that is publicly documented (and with
|
||||
an implementation available to the public in source code form), and must require
|
||||
no special password or key for unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this License
|
||||
by making exceptions from one or more of its conditions. Additional permissions
|
||||
that are applicable to the entire Program shall be treated as though they
|
||||
were included in this License, to the extent that they are valid under applicable
|
||||
law. If additional permissions apply only to part of the Program, that part
|
||||
may be used separately under those permissions, but the entire Program remains
|
||||
governed by this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option remove any
|
||||
additional permissions from that copy, or from any part of it. (Additional
|
||||
permissions may be written to require their own removal in certain cases when
|
||||
you modify the work.) You may place additional permissions on material, added
|
||||
by you to a covered work, for which you have or can give appropriate copyright
|
||||
permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you add
|
||||
to a covered work, you may (if authorized by the copyright holders of that
|
||||
material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the terms of
|
||||
sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or author
|
||||
attributions in that material or in the Appropriate Legal Notices displayed
|
||||
by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or requiring
|
||||
that modified versions of such material be marked in reasonable ways as different
|
||||
from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or authors
|
||||
of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some trade names,
|
||||
trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that material by
|
||||
anyone who conveys the material (or modified versions of it) with contractual
|
||||
assumptions of liability to the recipient, for any liability that these contractual
|
||||
assumptions directly impose on those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further restrictions"
|
||||
within the meaning of section 10. If the Program as you received it, or any
|
||||
part of it, contains a notice stating that it is governed by this License
|
||||
along with a term that is a further restriction, you may remove that term.
|
||||
If a license document contains a further restriction but permits relicensing
|
||||
or conveying under this License, you may add to a covered work material governed
|
||||
by the terms of that license document, provided that the further restriction
|
||||
does not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you must place,
|
||||
in the relevant source files, a statement of the additional terms that apply
|
||||
to those files, or a notice indicating where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the form
|
||||
of a separately written license, or stated as exceptions; the above requirements
|
||||
apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly provided
|
||||
under this License. Any attempt otherwise to propagate or modify it is void,
|
||||
and will automatically terminate your rights under this License (including
|
||||
any patent licenses granted under the third paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your license from
|
||||
a particular copyright holder is reinstated (a) provisionally, unless and
|
||||
until the copyright holder explicitly and finally terminates your license,
|
||||
and (b) permanently, if the copyright holder fails to notify you of the violation
|
||||
by some reasonable means prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is reinstated permanently
|
||||
if the copyright holder notifies you of the violation by some reasonable means,
|
||||
this is the first time you have received notice of violation of this License
|
||||
(for any work) from that copyright holder, and you cure the violation prior
|
||||
to 30 days after your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the licenses
|
||||
of parties who have received copies or rights from you under this License.
|
||||
If your rights have been terminated and not permanently reinstated, you do
|
||||
not qualify to receive new licenses for the same material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or run a copy
|
||||
of the Program. Ancillary propagation of a covered work occurring solely as
|
||||
a consequence of using peer-to-peer transmission to receive a copy likewise
|
||||
does not require acceptance. However, nothing other than this License grants
|
||||
you permission to propagate or modify any covered work. These actions infringe
|
||||
copyright if you do not accept this License. Therefore, by modifying or propagating
|
||||
a covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically receives
|
||||
a license from the original licensors, to run, modify and propagate that work,
|
||||
subject to this License. You are not responsible for enforcing compliance
|
||||
by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an organization,
|
||||
or substantially all assets of one, or subdividing an organization, or merging
|
||||
organizations. If propagation of a covered work results from an entity transaction,
|
||||
each party to that transaction who receives a copy of the work also receives
|
||||
whatever licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the Corresponding
|
||||
Source of the work from the predecessor in interest, if the predecessor has
|
||||
it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the rights
|
||||
granted or affirmed under this License. For example, you may not impose a
|
||||
license fee, royalty, or other charge for exercise of rights granted under
|
||||
this License, and you may not initiate litigation (including a cross-claim
|
||||
or counterclaim in a lawsuit) alleging that any patent claim is infringed
|
||||
by making, using, selling, offering for sale, or importing the Program or
|
||||
any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this License
|
||||
of the Program or a work on which the Program is based. The work thus licensed
|
||||
is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims owned or controlled
|
||||
by the contributor, whether already acquired or hereafter acquired, that would
|
||||
be infringed by some manner, permitted by this License, of making, using,
|
||||
or selling its contributor version, but do not include claims that would be
|
||||
infringed only as a consequence of further modification of the contributor
|
||||
version. For purposes of this definition, "control" includes the right to
|
||||
grant patent sublicenses in a manner consistent with the requirements of this
|
||||
License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free patent
|
||||
license under the contributor's essential patent claims, to make, use, sell,
|
||||
offer for sale, import and otherwise run, modify and propagate the contents
|
||||
of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express agreement
|
||||
or commitment, however denominated, not to enforce a patent (such as an express
|
||||
permission to practice a patent or covenant not to sue for patent infringement).
|
||||
To "grant" such a patent license to a party means to make such an agreement
|
||||
or commitment not to enforce a patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license, and the
|
||||
Corresponding Source of the work is not available for anyone to copy, free
|
||||
of charge and under the terms of this License, through a publicly available
|
||||
network server or other readily accessible means, then you must either (1)
|
||||
cause the Corresponding Source to be so available, or (2) arrange to deprive
|
||||
yourself of the benefit of the patent license for this particular work, or
|
||||
(3) arrange, in a manner consistent with the requirements of this License,
|
||||
to extend the patent license to downstream recipients. "Knowingly relying"
|
||||
means you have actual knowledge that, but for the patent license, your conveying
|
||||
the covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that country
|
||||
that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or arrangement,
|
||||
you convey, or propagate by procuring conveyance of, a covered work, and grant
|
||||
a patent license to some of the parties receiving the covered work authorizing
|
||||
them to use, propagate, modify or convey a specific copy of the covered work,
|
||||
then the patent license you grant is automatically extended to all recipients
|
||||
of the covered work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within the scope
|
||||
of its coverage, prohibits the exercise of, or is conditioned on the non-exercise
|
||||
of one or more of the rights that are specifically granted under this License.
|
||||
You may not convey a covered work if you are a party to an arrangement with
|
||||
a third party that is in the business of distributing software, under which
|
||||
you make payment to the third party based on the extent of your activity of
|
||||
conveying the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory patent
|
||||
license (a) in connection with copies of the covered work conveyed by you
|
||||
(or copies made from those copies), or (b) primarily for and in connection
|
||||
with specific products or compilations that contain the covered work, unless
|
||||
you entered into that arrangement, or that patent license was granted, prior
|
||||
to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting any implied
|
||||
license or other defenses to infringement that may otherwise be available
|
||||
to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or otherwise)
|
||||
that contradict the conditions of this License, they do not excuse you from
|
||||
the conditions of this License. If you cannot convey a covered work so as
|
||||
to satisfy simultaneously your obligations under this License and any other
|
||||
pertinent obligations, then as a consequence you may not convey it at all.
|
||||
For example, if you agree to terms that obligate you to collect a royalty
|
||||
for further conveying from those to whom you convey the Program, the only
|
||||
way you could satisfy both those terms and this License would be to refrain
|
||||
entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have permission to
|
||||
link or combine any covered work with a work licensed under version 3 of the
|
||||
GNU Affero General Public License into a single combined work, and to convey
|
||||
the resulting work. The terms of this License will continue to apply to the
|
||||
part which is the covered work, but the special requirements of the GNU Affero
|
||||
General Public License, section 13, concerning interaction through a network
|
||||
will apply to the combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of the
|
||||
GNU General Public License from time to time. Such new versions will be similar
|
||||
in spirit to the present version, but may differ in detail to address new
|
||||
problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program specifies
|
||||
that a certain numbered version of the GNU General Public License "or any
|
||||
later version" applies to it, you have the option of following the terms and
|
||||
conditions either of that numbered version or of any later version published
|
||||
by the Free Software Foundation. If the Program does not specify a version
|
||||
number of the GNU General Public License, you may choose any version ever
|
||||
published by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future versions of
|
||||
the GNU General Public License can be used, that proxy's public statement
|
||||
of acceptance of a version permanently authorizes you to choose that version
|
||||
for the Program.
|
||||
|
||||
Later license versions may give you additional or different permissions. However,
|
||||
no additional obligations are imposed on any author or copyright holder as
|
||||
a result of your choosing to follow a later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
|
||||
LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM
|
||||
PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
|
||||
CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
|
||||
ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM
|
||||
AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
|
||||
INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO
|
||||
USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
|
||||
INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
|
||||
PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
|
||||
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided above cannot
|
||||
be given local legal effect according to their terms, reviewing courts shall
|
||||
apply local law that most closely approximates an absolute waiver of all civil
|
||||
liability in connection with the Program, unless a warranty or assumption
|
||||
of liability accompanies a copy of the Program in return for a fee. END OF
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest possible
|
||||
use to the public, the best way to achieve this is to make it free software
|
||||
which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to attach
|
||||
them to the start of each source file to most effectively state the exclusion
|
||||
of warranty; and each file should have at least the "copyright" line and a
|
||||
pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation, either version 3 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short notice like
|
||||
this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
|
||||
This is free software, and you are welcome to redistribute it under certain
|
||||
conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands might
|
||||
be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary. For
|
||||
more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General Public
|
||||
License instead of this License. But first, please read <https://www.gnu.org/
|
||||
licenses /why-not-lgpl.html>.
|
||||
@@ -0,0 +1,446 @@
|
||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the library GPL. It is numbered 2 because
|
||||
it goes with version 2 of the ordinary GPL.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your freedom to share
|
||||
and change it. By contrast, the GNU General Public Licenses are intended to
|
||||
guarantee your freedom to share and change free software--to make sure the
|
||||
software is free for all its users.
|
||||
|
||||
This license, the Library General Public License, applies to some specially
|
||||
designated Free Software Foundation software, and to any other libraries whose
|
||||
authors decide to use it. You can use it for your libraries, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not price. Our
|
||||
General Public Licenses are designed to make sure that you have the freedom
|
||||
to distribute copies of free software (and charge for this service if you
|
||||
wish), that you receive source code or can get it if you want it, that you
|
||||
can change the software or use pieces of it in new free programs; and that
|
||||
you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid anyone to
|
||||
deny you these rights or to ask you to surrender the rights. These restrictions
|
||||
translate to certain responsibilities for you if you distribute copies of
|
||||
the library, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis or for
|
||||
a fee, you must give the recipients all the rights that we gave you. You must
|
||||
make sure that they, too, receive or can get the source code. If you link
|
||||
a program with the library, you must provide complete object files to the
|
||||
recipients so that they can relink them with the library, after making changes
|
||||
to the library and recompiling it. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Our method of protecting your rights has two steps: (1) copyright the library,
|
||||
and (2) offer you this license which gives you legal permission to copy, distribute
|
||||
and/or modify the library.
|
||||
|
||||
Also, for each distributor's protection, we want to make certain that everyone
|
||||
understands that there is no warranty for this free library. If the library
|
||||
is modified by someone else and passed on, we want its recipients to know
|
||||
that what they have is not the original version, so that any problems introduced
|
||||
by others will not reflect on the original authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software patents. We
|
||||
wish to avoid the danger that companies distributing free software will individually
|
||||
obtain patent licenses, thus in effect transforming the program into proprietary
|
||||
software. To prevent this, we have made it clear that any patent must be licensed
|
||||
for everyone's free use or not licensed at all.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the ordinary GNU
|
||||
General Public License, which was designed for utility programs. This license,
|
||||
the GNU Library General Public License, applies to certain designated libraries.
|
||||
This license is quite different from the ordinary one; be sure to read it
|
||||
in full, and don't assume that anything in it is the same as in the ordinary
|
||||
license.
|
||||
|
||||
The reason we have a separate public license for some libraries is that they
|
||||
blur the distinction we usually make between modifying or adding to a program
|
||||
and simply using it. Linking a program with a library, without changing the
|
||||
library, is in some sense simply using the library, and is analogous to running
|
||||
a utility program or application program. However, in a textual and legal
|
||||
sense, the linked executable is a combined work, a derivative of the original
|
||||
library, and the ordinary General Public License treats it as such.
|
||||
|
||||
Because of this blurred distinction, using the ordinary General Public License
|
||||
for libraries did not effectively promote software sharing, because most developers
|
||||
did not use the libraries. We concluded that weaker conditions might promote
|
||||
sharing better.
|
||||
|
||||
However, unrestricted linking of non-free programs would deprive the users
|
||||
of those programs of all benefit from the free status of the libraries themselves.
|
||||
This Library General Public License is intended to permit developers of non-free
|
||||
programs to use free libraries, while preserving your freedom as a user of
|
||||
such programs to change the free libraries that are incorporated in them.
|
||||
(We have not seen how to achieve this as regards changes in header files,
|
||||
but we have achieved it as regards changes in the actual functions of the
|
||||
Library.) The hope is that this will lead to faster development of free libraries.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification
|
||||
follow. Pay close attention to the difference between a "work based on the
|
||||
library" and a "work that uses the library". The former contains code derived
|
||||
from the library, while the latter only works together with the library.
|
||||
|
||||
Note that it is possible for a library to be covered by the ordinary General
|
||||
Public License rather than by this special one.
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library which contains a
|
||||
notice placed by the copyright holder or other authorized party saying it
|
||||
may be distributed under the terms of this Library General Public License
|
||||
(also called "this License"). Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data prepared
|
||||
so as to be conveniently linked with application programs (which use some
|
||||
of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work which has
|
||||
been distributed under these terms. A "work based on the Library" means either
|
||||
the Library or any derivative work under copyright law: that is to say, a
|
||||
work containing the Library or a portion of it, either verbatim or with modifications
|
||||
and/or translated straightforwardly into another language. (Hereinafter, translation
|
||||
is included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for making modifications
|
||||
to it. For a library, complete source code means all the source code for all
|
||||
modules it contains, plus any associated interface definition files, plus
|
||||
the scripts used to control compilation and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not covered
|
||||
by this License; they are outside its scope. The act of running a program
|
||||
using the Library is not restricted, and output from such a program is covered
|
||||
only if its contents constitute a work based on the Library (independent of
|
||||
the use of the Library in a tool for writing it). Whether that is true depends
|
||||
on what the Library does and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's complete source
|
||||
code as you receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice and disclaimer
|
||||
of warranty; keep intact all the notices that refer to this License and to
|
||||
the absence of any warranty; and distribute a copy of this License along with
|
||||
the Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and you
|
||||
may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion of it,
|
||||
thus forming a work based on the Library, and copy and distribute such modifications
|
||||
or work under the terms of Section 1 above, provided that you also meet all
|
||||
of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices stating that
|
||||
you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no charge to all
|
||||
third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a table of
|
||||
data to be supplied by an application program that uses the facility, other
|
||||
than as an argument passed when the facility is invoked, then you must make
|
||||
a good faith effort to ensure that, in the event an application does not supply
|
||||
such function or table, the facility still operates, and performs whatever
|
||||
part of its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has a purpose
|
||||
that is entirely well-defined independent of the application. Therefore, Subsection
|
||||
2d requires that any application-supplied function or table used by this function
|
||||
must be optional: if the application does not supply it, the square root function
|
||||
must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If identifiable
|
||||
sections of that work are not derived from the Library, and can be reasonably
|
||||
considered independent and separate works in themselves, then this License,
|
||||
and its terms, do not apply to those sections when you distribute them as
|
||||
separate works. But when you distribute the same sections as part of a whole
|
||||
which is a work based on the Library, the distribution of the whole must be
|
||||
on the terms of this License, whose permissions for other licensees extend
|
||||
to the entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest your
|
||||
rights to work written entirely by you; rather, the intent is to exercise
|
||||
the right to control the distribution of derivative or collective works based
|
||||
on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library with
|
||||
the Library (or with a work based on the Library) on a volume of a storage
|
||||
or distribution medium does not bring the other work under the scope of this
|
||||
License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public License
|
||||
instead of this License to a given copy of the Library. To do this, you must
|
||||
alter all the notices that refer to this License, so that they refer to the
|
||||
ordinary GNU General Public License, version 2, instead of to this License.
|
||||
(If a newer version than version 2 of the ordinary GNU General Public License
|
||||
has appeared, then you can specify that version instead if you wish.) Do not
|
||||
make any other change in these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for that copy,
|
||||
so the ordinary GNU General Public License applies to all subsequent copies
|
||||
and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of the Library
|
||||
into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or derivative of
|
||||
it, under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you accompany it with the complete corresponding
|
||||
machine-readable source code, which must be distributed under the terms of
|
||||
Sections 1 and 2 above on a medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy from a designated
|
||||
place, then offering equivalent access to copy the source code from the same
|
||||
place satisfies the requirement to distribute the source code, even though
|
||||
third parties are not compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the Library, but
|
||||
is designed to work with the Library by being compiled or linked with it,
|
||||
is called a "work that uses the Library". Such a work, in isolation, is not
|
||||
a derivative work of the Library, and therefore falls outside the scope of
|
||||
this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library creates an
|
||||
executable that is a derivative of the Library (because it contains portions
|
||||
of the Library), rather than a "work that uses the library". The executable
|
||||
is therefore covered by this License. Section 6 states terms for distribution
|
||||
of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file that
|
||||
is part of the Library, the object code for the work may be a derivative work
|
||||
of the Library even though the source code is not. Whether this is true is
|
||||
especially significant if the work can be linked without the Library, or if
|
||||
the work is itself a library. The threshold for this to be true is not precisely
|
||||
defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data structure layouts
|
||||
and accessors, and small macros and small inline functions (ten lines or less
|
||||
in length), then the use of the object file is unrestricted, regardless of
|
||||
whether it is legally a derivative work. (Executables containing this object
|
||||
code plus portions of the Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may distribute
|
||||
the object code for the work under the terms of Section 6. Any executables
|
||||
containing that work also fall under Section 6, whether or not they are linked
|
||||
directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also compile or link a "work
|
||||
that uses the Library" with the Library to produce a work containing portions
|
||||
of the Library, and distribute that work under terms of your choice, provided
|
||||
that the terms permit modification of the work for the customer's own use
|
||||
and reverse engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the Library
|
||||
is used in it and that the Library and its use are covered by this License.
|
||||
You must supply a copy of this License. If the work during execution displays
|
||||
copyright notices, you must include the copyright notice for the Library among
|
||||
them, as well as a reference directing the user to the copy of this License.
|
||||
Also, you must do one of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding machine-readable source
|
||||
code for the Library including whatever changes were used in the work (which
|
||||
must be distributed under Sections 1 and 2 above); and, if the work is an
|
||||
executable linked with the Library, with the complete machine-readable "work
|
||||
that uses the Library", as object code and/or source code, so that the user
|
||||
can modify the Library and then relink to produce a modified executable containing
|
||||
the modified Library. (It is understood that the user who changes the contents
|
||||
of definitions files in the Library will not necessarily be able to recompile
|
||||
the application to use the modified definitions.)
|
||||
|
||||
b) Accompany the work with a written offer, valid for at least three years,
|
||||
to give the same user the materials specified in Subsection 6a, above, for
|
||||
a charge no more than the cost of performing this distribution.
|
||||
|
||||
c) If distribution of the work is made by offering access to copy from a designated
|
||||
place, offer equivalent access to copy the above specified materials from
|
||||
the same place.
|
||||
|
||||
d) Verify that the user has already received a copy of these materials or
|
||||
that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the Library" must
|
||||
include any data and utility programs needed for reproducing the executable
|
||||
from it. However, as a special exception, the source code distributed need
|
||||
not include anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the operating
|
||||
system on which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license restrictions of
|
||||
other proprietary libraries that do not normally accompany the operating system.
|
||||
Such a contradiction means you cannot use both them and the Library together
|
||||
in an executable that you distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the Library side-by-side
|
||||
in a single library together with other library facilities not covered by
|
||||
this License, and distribute such a combined library, provided that the separate
|
||||
distribution of the work based on the Library and of the other library facilities
|
||||
is otherwise permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based on the
|
||||
Library, uncombined with any other library facilities. This must be distributed
|
||||
under the terms of the Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact that part of
|
||||
it is a work based on the Library, and explaining where to find the accompanying
|
||||
uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute the Library
|
||||
except as expressly provided under this License. Any attempt otherwise to
|
||||
copy, modify, sublicense, link with, or distribute the Library is void, and
|
||||
will automatically terminate your rights under this License. However, parties
|
||||
who have received copies, or rights, from you under this License will not
|
||||
have their licenses terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not signed
|
||||
it. However, nothing else grants you permission to modify or distribute the
|
||||
Library or its derivative works. These actions are prohibited by law if you
|
||||
do not accept this License. Therefore, by modifying or distributing the Library
|
||||
(or any work based on the Library), you indicate your acceptance of this License
|
||||
to do so, and all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the Library),
|
||||
the recipient automatically receives a license from the original licensor
|
||||
to copy, distribute, link with or modify the Library subject to these terms
|
||||
and conditions. You may not impose any further restrictions on the recipients'
|
||||
exercise of the rights granted herein. You are not responsible for enforcing
|
||||
compliance by third parties to this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent infringement
|
||||
or for any other reason (not limited to patent issues), conditions are imposed
|
||||
on you (whether by court order, agreement or otherwise) that contradict the
|
||||
conditions of this License, they do not excuse you from the conditions of
|
||||
this License. If you cannot distribute so as to satisfy simultaneously your
|
||||
obligations under this License and any other pertinent obligations, then as
|
||||
a consequence you may not distribute the Library at all. For example, if a
|
||||
patent license would not permit royalty-free redistribution of the Library
|
||||
by all those who receive copies directly or indirectly through you, then the
|
||||
only way you could satisfy both it and this License would be to refrain entirely
|
||||
from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any patents
|
||||
or other property right claims or to contest validity of any such claims;
|
||||
this section has the sole purpose of protecting the integrity of the free
|
||||
software distribution system which is implemented by public license practices.
|
||||
Many people have made generous contributions to the wide range of software
|
||||
distributed through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing to
|
||||
distribute software through any other system and a licensee cannot impose
|
||||
that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to be a
|
||||
consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in certain
|
||||
countries either by patents or by copyrighted interfaces, the original copyright
|
||||
holder who places the Library under this License may add an explicit geographical
|
||||
distribution limitation excluding those countries, so that distribution is
|
||||
permitted only in or among countries not thus excluded. In such case, this
|
||||
License incorporates the limitation as if written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new versions of
|
||||
the Library General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to address
|
||||
new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library specifies
|
||||
a version number of this License which applies to it and "any later version",
|
||||
you have the option of following the terms and conditions either of that version
|
||||
or of any later version published by the Free Software Foundation. If the
|
||||
Library does not specify a license version number, you may choose any version
|
||||
ever published by the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free programs
|
||||
whose distribution conditions are incompatible with these, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free Software
|
||||
Foundation, write to the Free Software Foundation; we sometimes make exceptions
|
||||
for this. Our decision will be guided by the two goals of preserving the free
|
||||
status of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
|
||||
THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
|
||||
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY
|
||||
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
|
||||
OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
|
||||
THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
|
||||
OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
|
||||
OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
|
||||
OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH
|
||||
HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest possible
|
||||
use to the public, we recommend making it free software that everyone can
|
||||
redistribute and change. You can do so by permitting redistribution under
|
||||
these terms (or, alternatively, under the terms of the ordinary General Public
|
||||
License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is safest
|
||||
to attach them to the start of each source file to most effectively convey
|
||||
the exclusion of warranty; and each file should have at least the "copyright"
|
||||
line and a pointer to where the full notice is found.
|
||||
|
||||
one line to give the library's name and an idea of what it does.
|
||||
|
||||
Copyright (C) year name of author
|
||||
|
||||
This library is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU Library General Public License as published by the Free
|
||||
Software Foundation; either version 2 of the License, or (at your option)
|
||||
any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public License
|
||||
along with this library; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your school,
|
||||
if any, to sign a "copyright disclaimer" for the library, if necessary. Here
|
||||
is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in
|
||||
|
||||
the library `Frob' (a library for tweaking knobs) written
|
||||
|
||||
by James Random Hacker.
|
||||
|
||||
signature of Ty Coon, 1 April 1990
|
||||
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
@@ -0,0 +1,467 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts as the
|
||||
successor of the GNU Library Public License, version 2, hence the version
|
||||
number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your freedom to share
|
||||
and change it. By contrast, the GNU General Public Licenses are intended to
|
||||
guarantee your freedom to share and change free software--to make sure the
|
||||
software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some specially
|
||||
designated software packages--typically libraries--of the Free Software Foundation
|
||||
and other authors who decide to use it. You can use it too, but we suggest
|
||||
you first think carefully about whether this license or the ordinary General
|
||||
Public License is the better strategy to use in any particular case, based
|
||||
on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use, not price.
|
||||
Our General Public Licenses are designed to make sure that you have the freedom
|
||||
to distribute copies of free software (and charge for this service if you
|
||||
wish); that you receive source code or can get it if you want it; that you
|
||||
can change the software and use pieces of it in new free programs; and that
|
||||
you are informed that you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid distributors
|
||||
to deny you these rights or to ask you to surrender these rights. These restrictions
|
||||
translate to certain responsibilities for you if you distribute copies of
|
||||
the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis or for
|
||||
a fee, you must give the recipients all the rights that we gave you. You must
|
||||
make sure that they, too, receive or can get the source code. If you link
|
||||
other code with the library, you must provide complete object files to the
|
||||
recipients, so that they can relink them with the library after making changes
|
||||
to the library and recompiling it. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the library,
|
||||
and (2) we offer you this license, which gives you legal permission to copy,
|
||||
distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that there is no
|
||||
warranty for the free library. Also, if the library is modified by someone
|
||||
else and passed on, the recipients should know that what they have is not
|
||||
the original version, so that the original author's reputation will not be
|
||||
affected by problems that might be introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of any free
|
||||
program. We wish to make sure that a company cannot effectively restrict the
|
||||
users of a free program by obtaining a restrictive license from a patent holder.
|
||||
Therefore, we insist that any patent license obtained for a version of the
|
||||
library must be consistent with the full freedom of use specified in this
|
||||
license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the ordinary GNU
|
||||
General Public License. This license, the GNU Lesser General Public License,
|
||||
applies to certain designated libraries, and is quite different from the ordinary
|
||||
General Public License. We use this license for certain libraries in order
|
||||
to permit linking those libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using a shared
|
||||
library, the combination of the two is legally speaking a combined work, a
|
||||
derivative of the original library. The ordinary General Public License therefore
|
||||
permits such linking only if the entire combination fits its criteria of freedom.
|
||||
The Lesser General Public License permits more lax criteria for linking other
|
||||
code with the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it does Less
|
||||
to protect the user's freedom than the ordinary General Public License. It
|
||||
also provides other free software developers Less of an advantage over competing
|
||||
non-free programs. These disadvantages are the reason we use the ordinary
|
||||
General Public License for many libraries. However, the Lesser license provides
|
||||
advantages in certain special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to encourage the
|
||||
widest possible use of a certain library, so that it becomes a de-facto standard.
|
||||
To achieve this, non-free programs must be allowed to use the library. A more
|
||||
frequent case is that a free library does the same job as widely used non-free
|
||||
libraries. In this case, there is little to gain by limiting the free library
|
||||
to free software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free programs
|
||||
enables a greater number of people to use a large body of free software. For
|
||||
example, permission to use the GNU C Library in non-free programs enables
|
||||
many more people to use the whole GNU operating system, as well as its variant,
|
||||
the GNU/Linux operating system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the users'
|
||||
freedom, it does ensure that the user of a program that is linked with the
|
||||
Library has the freedom and the wherewithal to run that program using a modified
|
||||
version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification
|
||||
follow. Pay close attention to the difference between a "work based on the
|
||||
library" and a "work that uses the library". The former contains code derived
|
||||
from the library, whereas the latter must be combined with the library in
|
||||
order to run.
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other program
|
||||
which contains a notice placed by the copyright holder or other authorized
|
||||
party saying it may be distributed under the terms of this Lesser General
|
||||
Public License (also called "this License"). Each licensee is addressed as
|
||||
"you".
|
||||
|
||||
A "library" means a collection of software functions and/or data prepared
|
||||
so as to be conveniently linked with application programs (which use some
|
||||
of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work which has
|
||||
been distributed under these terms. A "work based on the Library" means either
|
||||
the Library or any derivative work under copyright law: that is to say, a
|
||||
work containing the Library or a portion of it, either verbatim or with modifications
|
||||
and/or translated straightforwardly into another language. (Hereinafter, translation
|
||||
is included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for making modifications
|
||||
to it. For a library, complete source code means all the source code for all
|
||||
modules it contains, plus any associated interface definition files, plus
|
||||
the scripts used to control compilation and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not covered
|
||||
by this License; they are outside its scope. The act of running a program
|
||||
using the Library is not restricted, and output from such a program is covered
|
||||
only if its contents constitute a work based on the Library (independent of
|
||||
the use of the Library in a tool for writing it). Whether that is true depends
|
||||
on what the Library does and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's complete source
|
||||
code as you receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice and disclaimer
|
||||
of warranty; keep intact all the notices that refer to this License and to
|
||||
the absence of any warranty; and distribute a copy of this License along with
|
||||
the Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and you
|
||||
may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion of it,
|
||||
thus forming a work based on the Library, and copy and distribute such modifications
|
||||
or work under the terms of Section 1 above, provided that you also meet all
|
||||
of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices stating that
|
||||
you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no charge to all
|
||||
third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a table of
|
||||
data to be supplied by an application program that uses the facility, other
|
||||
than as an argument passed when the facility is invoked, then you must make
|
||||
a good faith effort to ensure that, in the event an application does not supply
|
||||
such function or table, the facility still operates, and performs whatever
|
||||
part of its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has a purpose
|
||||
that is entirely well-defined independent of the application. Therefore, Subsection
|
||||
2d requires that any application-supplied function or table used by this function
|
||||
must be optional: if the application does not supply it, the square root function
|
||||
must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If identifiable
|
||||
sections of that work are not derived from the Library, and can be reasonably
|
||||
considered independent and separate works in themselves, then this License,
|
||||
and its terms, do not apply to those sections when you distribute them as
|
||||
separate works. But when you distribute the same sections as part of a whole
|
||||
which is a work based on the Library, the distribution of the whole must be
|
||||
on the terms of this License, whose permissions for other licensees extend
|
||||
to the entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest your
|
||||
rights to work written entirely by you; rather, the intent is to exercise
|
||||
the right to control the distribution of derivative or collective works based
|
||||
on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library with
|
||||
the Library (or with a work based on the Library) on a volume of a storage
|
||||
or distribution medium does not bring the other work under the scope of this
|
||||
License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public License
|
||||
instead of this License to a given copy of the Library. To do this, you must
|
||||
alter all the notices that refer to this License, so that they refer to the
|
||||
ordinary GNU General Public License, version 2, instead of to this License.
|
||||
(If a newer version than version 2 of the ordinary GNU General Public License
|
||||
has appeared, then you can specify that version instead if you wish.) Do not
|
||||
make any other change in these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for that copy,
|
||||
so the ordinary GNU General Public License applies to all subsequent copies
|
||||
and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of the Library
|
||||
into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or derivative of
|
||||
it, under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you accompany it with the complete corresponding
|
||||
machine-readable source code, which must be distributed under the terms of
|
||||
Sections 1 and 2 above on a medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy from a designated
|
||||
place, then offering equivalent access to copy the source code from the same
|
||||
place satisfies the requirement to distribute the source code, even though
|
||||
third parties are not compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the Library, but
|
||||
is designed to work with the Library by being compiled or linked with it,
|
||||
is called a "work that uses the Library". Such a work, in isolation, is not
|
||||
a derivative work of the Library, and therefore falls outside the scope of
|
||||
this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library creates an
|
||||
executable that is a derivative of the Library (because it contains portions
|
||||
of the Library), rather than a "work that uses the library". The executable
|
||||
is therefore covered by this License. Section 6 states terms for distribution
|
||||
of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file that
|
||||
is part of the Library, the object code for the work may be a derivative work
|
||||
of the Library even though the source code is not. Whether this is true is
|
||||
especially significant if the work can be linked without the Library, or if
|
||||
the work is itself a library. The threshold for this to be true is not precisely
|
||||
defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data structure layouts
|
||||
and accessors, and small macros and small inline functions (ten lines or less
|
||||
in length), then the use of the object file is unrestricted, regardless of
|
||||
whether it is legally a derivative work. (Executables containing this object
|
||||
code plus portions of the Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may distribute
|
||||
the object code for the work under the terms of Section 6. Any executables
|
||||
containing that work also fall under Section 6, whether or not they are linked
|
||||
directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or link a "work
|
||||
that uses the Library" with the Library to produce a work containing portions
|
||||
of the Library, and distribute that work under terms of your choice, provided
|
||||
that the terms permit modification of the work for the customer's own use
|
||||
and reverse engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the Library
|
||||
is used in it and that the Library and its use are covered by this License.
|
||||
You must supply a copy of this License. If the work during execution displays
|
||||
copyright notices, you must include the copyright notice for the Library among
|
||||
them, as well as a reference directing the user to the copy of this License.
|
||||
Also, you must do one of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding machine-readable source
|
||||
code for the Library including whatever changes were used in the work (which
|
||||
must be distributed under Sections 1 and 2 above); and, if the work is an
|
||||
executable linked with the Library, with the complete machine-readable "work
|
||||
that uses the Library", as object code and/or source code, so that the user
|
||||
can modify the Library and then relink to produce a modified executable containing
|
||||
the modified Library. (It is understood that the user who changes the contents
|
||||
of definitions files in the Library will not necessarily be able to recompile
|
||||
the application to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the Library. A
|
||||
suitable mechanism is one that (1) uses at run time a copy of the library
|
||||
already present on the user's computer system, rather than copying library
|
||||
functions into the executable, and (2) will operate properly with a modified
|
||||
version of the library, if the user installs one, as long as the modified
|
||||
version is interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at least three years,
|
||||
to give the same user the materials specified in Subsection 6a, above, for
|
||||
a charge no more than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy from a designated
|
||||
place, offer equivalent access to copy the above specified materials from
|
||||
the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these materials or
|
||||
that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the Library" must
|
||||
include any data and utility programs needed for reproducing the executable
|
||||
from it. However, as a special exception, the materials to be distributed
|
||||
need not include anything that is normally distributed (in either source or
|
||||
binary form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component itself
|
||||
accompanies the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license restrictions of
|
||||
other proprietary libraries that do not normally accompany the operating system.
|
||||
Such a contradiction means you cannot use both them and the Library together
|
||||
in an executable that you distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the Library side-by-side
|
||||
in a single library together with other library facilities not covered by
|
||||
this License, and distribute such a combined library, provided that the separate
|
||||
distribution of the work based on the Library and of the other library facilities
|
||||
is otherwise permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based on the
|
||||
Library, uncombined with any other library facilities. This must be distributed
|
||||
under the terms of the Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact that part of
|
||||
it is a work based on the Library, and explaining where to find the accompanying
|
||||
uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute the Library
|
||||
except as expressly provided under this License. Any attempt otherwise to
|
||||
copy, modify, sublicense, link with, or distribute the Library is void, and
|
||||
will automatically terminate your rights under this License. However, parties
|
||||
who have received copies, or rights, from you under this License will not
|
||||
have their licenses terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not signed
|
||||
it. However, nothing else grants you permission to modify or distribute the
|
||||
Library or its derivative works. These actions are prohibited by law if you
|
||||
do not accept this License. Therefore, by modifying or distributing the Library
|
||||
(or any work based on the Library), you indicate your acceptance of this License
|
||||
to do so, and all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the Library),
|
||||
the recipient automatically receives a license from the original licensor
|
||||
to copy, distribute, link with or modify the Library subject to these terms
|
||||
and conditions. You may not impose any further restrictions on the recipients'
|
||||
exercise of the rights granted herein. You are not responsible for enforcing
|
||||
compliance by third parties with this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent infringement
|
||||
or for any other reason (not limited to patent issues), conditions are imposed
|
||||
on you (whether by court order, agreement or otherwise) that contradict the
|
||||
conditions of this License, they do not excuse you from the conditions of
|
||||
this License. If you cannot distribute so as to satisfy simultaneously your
|
||||
obligations under this License and any other pertinent obligations, then as
|
||||
a consequence you may not distribute the Library at all. For example, if a
|
||||
patent license would not permit royalty-free redistribution of the Library
|
||||
by all those who receive copies directly or indirectly through you, then the
|
||||
only way you could satisfy both it and this License would be to refrain entirely
|
||||
from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any patents
|
||||
or other property right claims or to contest validity of any such claims;
|
||||
this section has the sole purpose of protecting the integrity of the free
|
||||
software distribution system which is implemented by public license practices.
|
||||
Many people have made generous contributions to the wide range of software
|
||||
distributed through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing to
|
||||
distribute software through any other system and a licensee cannot impose
|
||||
that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to be a
|
||||
consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in certain
|
||||
countries either by patents or by copyrighted interfaces, the original copyright
|
||||
holder who places the Library under this License may add an explicit geographical
|
||||
distribution limitation excluding those countries, so that distribution is
|
||||
permitted only in or among countries not thus excluded. In such case, this
|
||||
License incorporates the limitation as if written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new versions of
|
||||
the Lesser General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to address
|
||||
new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library specifies
|
||||
a version number of this License which applies to it and "any later version",
|
||||
you have the option of following the terms and conditions either of that version
|
||||
or of any later version published by the Free Software Foundation. If the
|
||||
Library does not specify a license version number, you may choose any version
|
||||
ever published by the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free programs
|
||||
whose distribution conditions are incompatible with these, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free Software
|
||||
Foundation, write to the Free Software Foundation; we sometimes make exceptions
|
||||
for this. Our decision will be guided by the two goals of preserving the free
|
||||
status of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
|
||||
THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
|
||||
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY
|
||||
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
|
||||
OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
|
||||
THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
|
||||
OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
|
||||
OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
|
||||
OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH
|
||||
HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest possible
|
||||
use to the public, we recommend making it free software that everyone can
|
||||
redistribute and change. You can do so by permitting redistribution under
|
||||
these terms (or, alternatively, under the terms of the ordinary General Public
|
||||
License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is safest
|
||||
to attach them to the start of each source file to most effectively convey
|
||||
the exclusion of warranty; and each file should have at least the "copyright"
|
||||
line and a pointer to where the full notice is found.
|
||||
|
||||
< one line to give the library's name and an idea of what it does. >
|
||||
|
||||
Copyright (C) < year > < name of author >
|
||||
|
||||
This library is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU Lesser General Public License as published by the Free
|
||||
Software Foundation; either version 2.1 of the License, or (at your option)
|
||||
any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this library; if not, write to the Free Software Foundation, Inc., 51
|
||||
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information
|
||||
on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your school,
|
||||
if any, to sign a "copyright disclaimer" for the library, if necessary. Here
|
||||
is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in
|
||||
|
||||
the library `Frob' (a library for tweaking knobs) written
|
||||
|
||||
by James Random Hacker.
|
||||
|
||||
< signature of Ty Coon > , 1 April 1990
|
||||
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
@@ -0,0 +1,468 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts as the
|
||||
successor of the GNU Library Public License, version 2, hence the version
|
||||
number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your freedom to share
|
||||
and change it. By contrast, the GNU General Public Licenses are intended to
|
||||
guarantee your freedom to share and change free software--to make sure the
|
||||
software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some specially
|
||||
designated software packages--typically libraries--of the Free Software Foundation
|
||||
and other authors who decide to use it. You can use it too, but we suggest
|
||||
you first think carefully about whether this license or the ordinary General
|
||||
Public License is the better strategy to use in any particular case, based
|
||||
on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use, not price.
|
||||
Our General Public Licenses are designed to make sure that you have the freedom
|
||||
to distribute copies of free software (and charge for this service if you
|
||||
wish); that you receive source code or can get it if you want it; that you
|
||||
can change the software and use pieces of it in new free programs; and that
|
||||
you are informed that you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid distributors
|
||||
to deny you these rights or to ask you to surrender these rights. These restrictions
|
||||
translate to certain responsibilities for you if you distribute copies of
|
||||
the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis or for
|
||||
a fee, you must give the recipients all the rights that we gave you. You must
|
||||
make sure that they, too, receive or can get the source code. If you link
|
||||
other code with the library, you must provide complete object files to the
|
||||
recipients, so that they can relink them with the library after making changes
|
||||
to the library and recompiling it. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the library,
|
||||
and (2) we offer you this license, which gives you legal permission to copy,
|
||||
distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that there is no
|
||||
warranty for the free library. Also, if the library is modified by someone
|
||||
else and passed on, the recipients should know that what they have is not
|
||||
the original version, so that the original author's reputation will not be
|
||||
affected by problems that might be introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of any free
|
||||
program. We wish to make sure that a company cannot effectively restrict the
|
||||
users of a free program by obtaining a restrictive license from a patent holder.
|
||||
Therefore, we insist that any patent license obtained for a version of the
|
||||
library must be consistent with the full freedom of use specified in this
|
||||
license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the ordinary GNU
|
||||
General Public License. This license, the GNU Lesser General Public License,
|
||||
applies to certain designated libraries, and is quite different from the ordinary
|
||||
General Public License. We use this license for certain libraries in order
|
||||
to permit linking those libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using a shared
|
||||
library, the combination of the two is legally speaking a combined work, a
|
||||
derivative of the original library. The ordinary General Public License therefore
|
||||
permits such linking only if the entire combination fits its criteria of freedom.
|
||||
The Lesser General Public License permits more lax criteria for linking other
|
||||
code with the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it does Less
|
||||
to protect the user's freedom than the ordinary General Public License. It
|
||||
also provides other free software developers Less of an advantage over competing
|
||||
non-free programs. These disadvantages are the reason we use the ordinary
|
||||
General Public License for many libraries. However, the Lesser license provides
|
||||
advantages in certain special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to encourage the
|
||||
widest possible use of a certain library, so that it becomes a de-facto standard.
|
||||
To achieve this, non-free programs must be allowed to use the library. A more
|
||||
frequent case is that a free library does the same job as widely used non-free
|
||||
libraries. In this case, there is little to gain by limiting the free library
|
||||
to free software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free programs
|
||||
enables a greater number of people to use a large body of free software. For
|
||||
example, permission to use the GNU C Library in non-free programs enables
|
||||
many more people to use the whole GNU operating system, as well as its variant,
|
||||
the GNU/Linux operating system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the users'
|
||||
freedom, it does ensure that the user of a program that is linked with the
|
||||
Library has the freedom and the wherewithal to run that program using a modified
|
||||
version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification
|
||||
follow. Pay close attention to the difference between a "work based on the
|
||||
library" and a "work that uses the library". The former contains code derived
|
||||
from the library, whereas the latter must be combined with the library in
|
||||
order to run.
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other program
|
||||
which contains a notice placed by the copyright holder or other authorized
|
||||
party saying it may be distributed under the terms of this Lesser General
|
||||
Public License (also called "this License"). Each licensee is addressed as
|
||||
"you".
|
||||
|
||||
A "library" means a collection of software functions and/or data prepared
|
||||
so as to be conveniently linked with application programs (which use some
|
||||
of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work which has
|
||||
been distributed under these terms. A "work based on the Library" means either
|
||||
the Library or any derivative work under copyright law: that is to say, a
|
||||
work containing the Library or a portion of it, either verbatim or with modifications
|
||||
and/or translated straightforwardly into another language. (Hereinafter, translation
|
||||
is included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for making modifications
|
||||
to it. For a library, complete source code means all the source code for all
|
||||
modules it contains, plus any associated interface definition files, plus
|
||||
the scripts used to control compilation and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not covered
|
||||
by this License; they are outside its scope. The act of running a program
|
||||
using the Library is not restricted, and output from such a program is covered
|
||||
only if its contents constitute a work based on the Library (independent of
|
||||
the use of the Library in a tool for writing it). Whether that is true depends
|
||||
on what the Library does and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's complete source
|
||||
code as you receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice and disclaimer
|
||||
of warranty; keep intact all the notices that refer to this License and to
|
||||
the absence of any warranty; and distribute a copy of this License along with
|
||||
the Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and you
|
||||
may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion of it,
|
||||
thus forming a work based on the Library, and copy and distribute such modifications
|
||||
or work under the terms of Section 1 above, provided that you also meet all
|
||||
of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices stating that
|
||||
you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no charge to all
|
||||
third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a table of
|
||||
data to be supplied by an application program that uses the facility, other
|
||||
than as an argument passed when the facility is invoked, then you must make
|
||||
a good faith effort to ensure that, in the event an application does not supply
|
||||
such function or table, the facility still operates, and performs whatever
|
||||
part of its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has a purpose
|
||||
that is entirely well-defined independent of the application. Therefore, Subsection
|
||||
2d requires that any application-supplied function or table used by this function
|
||||
must be optional: if the application does not supply it, the square root function
|
||||
must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If identifiable
|
||||
sections of that work are not derived from the Library, and can be reasonably
|
||||
considered independent and separate works in themselves, then this License,
|
||||
and its terms, do not apply to those sections when you distribute them as
|
||||
separate works. But when you distribute the same sections as part of a whole
|
||||
which is a work based on the Library, the distribution of the whole must be
|
||||
on the terms of this License, whose permissions for other licensees extend
|
||||
to the entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest your
|
||||
rights to work written entirely by you; rather, the intent is to exercise
|
||||
the right to control the distribution of derivative or collective works based
|
||||
on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library with
|
||||
the Library (or with a work based on the Library) on a volume of a storage
|
||||
or distribution medium does not bring the other work under the scope of this
|
||||
License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public License
|
||||
instead of this License to a given copy of the Library. To do this, you must
|
||||
alter all the notices that refer to this License, so that they refer to the
|
||||
ordinary GNU General Public License, version 2, instead of to this License.
|
||||
(If a newer version than version 2 of the ordinary GNU General Public License
|
||||
has appeared, then you can specify that version instead if you wish.) Do not
|
||||
make any other change in these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for that copy,
|
||||
so the ordinary GNU General Public License applies to all subsequent copies
|
||||
and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of the Library
|
||||
into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or derivative of
|
||||
it, under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you accompany it with the complete corresponding
|
||||
machine-readable source code, which must be distributed under the terms of
|
||||
Sections 1 and 2 above on a medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy from a designated
|
||||
place, then offering equivalent access to copy the source code from the same
|
||||
place satisfies the requirement to distribute the source code, even though
|
||||
third parties are not compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the Library, but
|
||||
is designed to work with the Library by being compiled or linked with it,
|
||||
is called a "work that uses the Library". Such a work, in isolation, is not
|
||||
a derivative work of the Library, and therefore falls outside the scope of
|
||||
this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library creates an
|
||||
executable that is a derivative of the Library (because it contains portions
|
||||
of the Library), rather than a "work that uses the library". The executable
|
||||
is therefore covered by this License. Section 6 states terms for distribution
|
||||
of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file that
|
||||
is part of the Library, the object code for the work may be a derivative work
|
||||
of the Library even though the source code is not. Whether this is true is
|
||||
especially significant if the work can be linked without the Library, or if
|
||||
the work is itself a library. The threshold for this to be true is not precisely
|
||||
defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data structure layouts
|
||||
and accessors, and small macros and small inline functions (ten lines or less
|
||||
in length), then the use of the object file is unrestricted, regardless of
|
||||
whether it is legally a derivative work. (Executables containing this object
|
||||
code plus portions of the Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may distribute
|
||||
the object code for the work under the terms of Section 6. Any executables
|
||||
containing that work also fall under Section 6, whether or not they are linked
|
||||
directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or link a "work
|
||||
that uses the Library" with the Library to produce a work containing portions
|
||||
of the Library, and distribute that work under terms of your choice, provided
|
||||
that the terms permit modification of the work for the customer's own use
|
||||
and reverse engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the Library
|
||||
is used in it and that the Library and its use are covered by this License.
|
||||
You must supply a copy of this License. If the work during execution displays
|
||||
copyright notices, you must include the copyright notice for the Library among
|
||||
them, as well as a reference directing the user to the copy of this License.
|
||||
Also, you must do one of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding machine-readable source
|
||||
code for the Library including whatever changes were used in the work (which
|
||||
must be distributed under Sections 1 and 2 above); and, if the work is an
|
||||
executable linked with the Library, with the complete machine-readable "work
|
||||
that uses the Library", as object code and/or source code, so that the user
|
||||
can modify the Library and then relink to produce a modified executable containing
|
||||
the modified Library. (It is understood that the user who changes the contents
|
||||
of definitions files in the Library will not necessarily be able to recompile
|
||||
the application to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the Library. A
|
||||
suitable mechanism is one that (1) uses at run time a copy of the library
|
||||
already present on the user's computer system, rather than copying library
|
||||
functions into the executable, and (2) will operate properly with a modified
|
||||
version of the library, if the user installs one, as long as the modified
|
||||
version is interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at least three years,
|
||||
to give the same user the materials specified in Subsection 6a, above, for
|
||||
a charge no more than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy from a designated
|
||||
place, offer equivalent access to copy the above specified materials from
|
||||
the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these materials or
|
||||
that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the Library" must
|
||||
include any data and utility programs needed for reproducing the executable
|
||||
from it. However, as a special exception, the materials to be distributed
|
||||
need not include anything that is normally distributed (in either source or
|
||||
binary form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component itself
|
||||
accompanies the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license restrictions of
|
||||
other proprietary libraries that do not normally accompany the operating system.
|
||||
Such a contradiction means you cannot use both them and the Library together
|
||||
in an executable that you distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the Library side-by-side
|
||||
in a single library together with other library facilities not covered by
|
||||
this License, and distribute such a combined library, provided that the separate
|
||||
distribution of the work based on the Library and of the other library facilities
|
||||
is otherwise permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based on the
|
||||
Library, uncombined with any other library facilities. This must be distributed
|
||||
under the terms of the Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact that part of
|
||||
it is a work based on the Library, and explaining where to find the accompanying
|
||||
uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute the Library
|
||||
except as expressly provided under this License. Any attempt otherwise to
|
||||
copy, modify, sublicense, link with, or distribute the Library is void, and
|
||||
will automatically terminate your rights under this License. However, parties
|
||||
who have received copies, or rights, from you under this License will not
|
||||
have their licenses terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not signed
|
||||
it. However, nothing else grants you permission to modify or distribute the
|
||||
Library or its derivative works. These actions are prohibited by law if you
|
||||
do not accept this License. Therefore, by modifying or distributing the Library
|
||||
(or any work based on the Library), you indicate your acceptance of this License
|
||||
to do so, and all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the Library),
|
||||
the recipient automatically receives a license from the original licensor
|
||||
to copy, distribute, link with or modify the Library subject to these terms
|
||||
and conditions. You may not impose any further restrictions on the recipients'
|
||||
exercise of the rights granted herein. You are not responsible for enforcing
|
||||
compliance by third parties with this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent infringement
|
||||
or for any other reason (not limited to patent issues), conditions are imposed
|
||||
on you (whether by court order, agreement or otherwise) that contradict the
|
||||
conditions of this License, they do not excuse you from the conditions of
|
||||
this License. If you cannot distribute so as to satisfy simultaneously your
|
||||
obligations under this License and any other pertinent obligations, then as
|
||||
a consequence you may not distribute the Library at all. For example, if a
|
||||
patent license would not permit royalty-free redistribution of the Library
|
||||
by all those who receive copies directly or indirectly through you, then the
|
||||
only way you could satisfy both it and this License would be to refrain entirely
|
||||
from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any patents
|
||||
or other property right claims or to contest validity of any such claims;
|
||||
this section has the sole purpose of protecting the integrity of the free
|
||||
software distribution system which is implemented by public license practices.
|
||||
Many people have made generous contributions to the wide range of software
|
||||
distributed through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing to
|
||||
distribute software through any other system and a licensee cannot impose
|
||||
that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to be a
|
||||
consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in certain
|
||||
countries either by patents or by copyrighted interfaces, the original copyright
|
||||
holder who places the Library under this License may add an explicit geographical
|
||||
distribution limitation excluding those countries, so that distribution is
|
||||
permitted only in or among countries not thus excluded. In such case, this
|
||||
License incorporates the limitation as if written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new versions of
|
||||
the Lesser General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to address
|
||||
new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library specifies
|
||||
a version number of this License which applies to it and "any later version",
|
||||
you have the option of following the terms and conditions either of that version
|
||||
or of any later version published by the Free Software Foundation. If the
|
||||
Library does not specify a license version number, you may choose any version
|
||||
ever published by the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free programs
|
||||
whose distribution conditions are incompatible with these, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free Software
|
||||
Foundation, write to the Free Software Foundation; we sometimes make exceptions
|
||||
for this. Our decision will be guided by the two goals of preserving the free
|
||||
status of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
|
||||
THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
|
||||
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY
|
||||
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
|
||||
OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
|
||||
THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
|
||||
OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
|
||||
OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
|
||||
OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH
|
||||
HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest possible
|
||||
use to the public, we recommend making it free software that everyone can
|
||||
redistribute and change. You can do so by permitting redistribution under
|
||||
these terms (or, alternatively, under the terms of the ordinary General Public
|
||||
License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is safest
|
||||
to attach them to the start of each source file to most effectively convey
|
||||
the exclusion of warranty; and each file should have at least the "copyright"
|
||||
line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the library's name and an idea of what it does.>
|
||||
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This library is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU Lesser General Public License as published by the Free
|
||||
Software Foundation; either version 2.1 of the License, or (at your option)
|
||||
any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this library; if not, write to the Free Software Foundation, Inc., 51
|
||||
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your school,
|
||||
if any, to sign a "copyright disclaimer" for the library, if necessary. Here
|
||||
is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in
|
||||
|
||||
the library `Frob' (a library for tweaking knobs) written
|
||||
|
||||
by James Random Hacker.
|
||||
|
||||
< signature of Ty Coon > , 1 April 1990
|
||||
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
@@ -0,0 +1,163 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates the terms
|
||||
and conditions of version 3 of the GNU General Public License, supplemented
|
||||
by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser General
|
||||
Public License, and the "GNU GPL" refers to version 3 of the GNU General Public
|
||||
License.
|
||||
|
||||
|
||||
|
||||
"The Library" refers to a covered work governed by this License, other than
|
||||
an Application or a Combined Work as defined below.
|
||||
|
||||
|
||||
|
||||
An "Application" is any work that makes use of an interface provided by the
|
||||
Library, but which is not otherwise based on the Library. Defining a subclass
|
||||
of a class defined by the Library is deemed a mode of using an interface provided
|
||||
by the Library.
|
||||
|
||||
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an Application
|
||||
with the Library. The particular version of the Library with which the Combined
|
||||
Work was made is also called the "Linked Version".
|
||||
|
||||
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the Corresponding
|
||||
Source for the Combined Work, excluding any source code for portions of the
|
||||
Combined Work that, considered in isolation, are based on the Application,
|
||||
and not on the Linked Version.
|
||||
|
||||
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the object
|
||||
code and/or source code for the Application, including any data and utility
|
||||
programs needed for reproducing the Combined Work from the Application, but
|
||||
excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License without
|
||||
being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a facility
|
||||
refers to a function or data to be supplied by an Application that uses the
|
||||
facility (other than as an argument passed when the facility is invoked),
|
||||
then you may convey a copy of the modified version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to ensure
|
||||
that, in the event an Application does not supply the function or data, the
|
||||
facility still operates, and performs whatever part of its purpose remains
|
||||
meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of this License
|
||||
applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from a header
|
||||
file that is part of the Library. You may convey such object code under terms
|
||||
of your choice, provided that, if the incorporated material is not limited
|
||||
to numerical parameters, data structure layouts and accessors, or small macros,
|
||||
inline functions and templates (ten or fewer lines in length), you do both
|
||||
of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the Library
|
||||
is used in it and that the Library and its use are covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that, taken together,
|
||||
effectively do not restrict modification of the portions of the Library contained
|
||||
in the Combined Work and reverse engineering for debugging such modifications,
|
||||
if you also do each of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that the Library
|
||||
is used in it and that the Library and its use are covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during execution, include
|
||||
the copyright notice for the Library among these notices, as well as a reference
|
||||
directing the user to the copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this License,
|
||||
and the Corresponding Application Code in a form suitable for, and under terms
|
||||
that permit, the user to recombine or relink the Application with a modified
|
||||
version of the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the Library. A
|
||||
suitable mechanism is one that (a) uses at run time a copy of the Library
|
||||
already present on the user's computer system, and (b) will operate properly
|
||||
with a modified version of the Library that is interface-compatible with the
|
||||
Linked Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise be required
|
||||
to provide such information under section 6 of the GNU GPL, and only to the
|
||||
extent that such information is necessary to install and execute a modified
|
||||
version of the Combined Work produced by recombining or relinking the Application
|
||||
with a modified version of the Linked Version. (If you use option 4d0, the
|
||||
Installation Information must accompany the Minimal Corresponding Source and
|
||||
Corresponding Application Code. If you use option 4d1, you must provide the
|
||||
Installation Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the Library side
|
||||
by side in a single library together with other library facilities that are
|
||||
not Applications and are not covered by this License, and convey such a combined
|
||||
library under terms of your choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based on the
|
||||
Library, uncombined with any other library facilities, conveyed under the
|
||||
terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it is a work
|
||||
based on the Library, and explaining where to find the accompanying uncombined
|
||||
form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of the
|
||||
GNU Lesser General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to address
|
||||
new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library as you
|
||||
received it specifies that a certain numbered version of the GNU Lesser General
|
||||
Public License "or any later version" applies to it, you have the option of
|
||||
following the terms and conditions either of that published version or of
|
||||
any later version published by the Free Software Foundation. If the Library
|
||||
as you received it does not specify a version number of the GNU Lesser General
|
||||
Public License, you may choose any version of the GNU Lesser General Public
|
||||
License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide whether
|
||||
future versions of the GNU Lesser General Public License shall apply, that
|
||||
proxy's public statement of acceptance of any version is permanent authorization
|
||||
for you to choose that version for the Library.
|
||||
@@ -0,0 +1,12 @@
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 3 of
|
||||
the license or (at your option) at any later version that is
|
||||
accepted by the membership of KDE e.V. (or its successor
|
||||
approved by the membership of KDE e.V.), which shall act as a
|
||||
proxy as defined in Section 14 of version 3 of the license.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
@@ -0,0 +1,12 @@
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 3 of the license or (at your option) any later version
|
||||
that is accepted by the membership of KDE e.V. (or its successor
|
||||
approved by the membership of KDE e.V.), which shall act as a
|
||||
proxy as defined in Section 6 of version 3 of the license.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
@@ -0,0 +1,7 @@
|
||||
Commercial License Usage
|
||||
Licensees holding valid commercial Qt licenses may use this file in
|
||||
accordance with the commercial license agreement provided with the
|
||||
Software or, alternatively, in accordance with the terms contained in
|
||||
a written agreement between you and The Qt Company. For licensing terms
|
||||
and conditions see https://www.qt.io/terms-conditions. For further
|
||||
information use the contact form at https://www.qt.io/contact-us.
|
||||
@@ -0,0 +1,21 @@
|
||||
The Qt Company Qt LGPL Exception version 1.1
|
||||
|
||||
As an additional permission to the GNU Lesser General Public License version 2.1, the object code form of a "work that uses the Library" may incorporate material from a header file that is part of the Library. You may distribute such object code under terms of your choice, provided that:
|
||||
|
||||
(i) the header files of the Library have not been modified; and
|
||||
|
||||
(ii) the incorporated material is limited to numerical parameters, data structure layouts, accessors, macros, inline functions and templates; and
|
||||
|
||||
(iii) you comply with the terms of Section 6 of the GNU Lesser General Public License version 2.1.
|
||||
|
||||
Moreover, you may apply this exception to a modified version of the Library, provided that such modification does not involve copying material from the Library into the modified Library's header files unless such material is limited to
|
||||
|
||||
(i) numerical parameters;
|
||||
|
||||
(ii) data structure layouts;
|
||||
|
||||
(iii) accessors; and
|
||||
|
||||
(iv) small macros, templates and inline functions of five lines or less in length.
|
||||
|
||||
Furthermore, you are not required to apply this additional permission to a modified version of the Library.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user