Inhaltsverzeichnis

Lyx OS – LBF: Lyx Binary Format

Das Lyx Binary Format (LBF) ist das native ausführbare Binärformat von Lyx OS. Es ersetzt ELF/PE für alle Programme die mit lyxc –target=lyxos kompiliert werden, und ist von Grund auf für KI-native Architekturen und das Island & Ocean File System (IOFS) entworfen.

Version: 1.1 · Magic: LYX! (0x4C 0x59 0x58 0x21)

LBF ist das ausführbare Binärformat von Lyx OS. Anders als ELF oder PE wird ein LBF-Binary auf nativem IOFS ohne eine einzige Speicher-Kopie ausgeführt — der Kernel trägt die physischen Disk-Adressen direkt in die CPU-Seitentabelle ein. Block 0 (Genesis-Block) enthält zusätzlich einen strukturierten KI-Kontext, der dem Betriebssystem vor der ersten Ausführung mitteilt was das Programm tut und welche Rechte es benötigt.

Anwendungen entwickeln · Kernel-Interna · Übersicht


0. Implementierungsstand (nachgemessen 2026-08-27 mit lyxc 1.1.11B)

Zwei Emit-Modi — NICHT verwechseln:

Flag-Kombination Erzeugtes Format Magic Zweck
lyxc prog.lyx --target=lyxos Natives LYX! (x86-64-Maschinencode) LYX! (0x4C595821) Produktiv — läuft auf Lyx OS
lyxc prog.lyx --target=lyxos --emit=lbf IR-Bytecode LBF\0 LBF\0 (0x4C424600) Simulation/Test — kein nativer Code

Der Rest dieser Seite beschreibt das native LYX!-Format (Produktionspfad).

Was heute trägt

Noch offen


1. Warum ein neues Binärformat?

ELF und PE tragen jahrzehntelangen Ballast: komplexe Relokationstabellen, dynamische Linker, Sektions-Parsing zur Laufzeit — und keinerlei semantische Selbstbeschreibung. LBF bricht damit auf drei Ebenen:

Physisch: LBF ist exakt auf das 4096-Byte-Page-Raster der NVMe-Hardware und der CPU ausgerichtet. Auf nativem IOFS lädt der Kernel keine Segmente in den RAM — er trägt die physischen Sektoradressen (LBAs) direkt in die Page Tables (CR3) ein. Die CPU feuert den Maschinencode ohne eine einzige Kopie.

Semantisch: Block 0 (der Genesis-Block) enthält einen strukturierten KI-Kontext-Pool, der der System-KI vor der ersten Ausführung mitteilt: was das Programm tut, welche Hardware-Erweiterungen es benötigt, welche Abhängigkeiten es deklariert, und ob die kryptografische Vertrauenskette intakt ist.

Dual-Portabel: Auf Legacy-Dateisystemen verhält sich LBF wie eine flache, sequentielle Binärdatei (POSIX-Loader lbf_run). Auf nativem IOFS injiziert der Kernel die 4-KB-Blöcke direkt als Datenknoten in den Graphen. Dasselbe Binary, zwei Lademodi, null Overhead.


2. Zwei Layout-Modi

Modus A — Striktes Alignment (Standard)

Jede logische Sektion (.text, .data, .rodata) beginnt an einer physischen 4096-Byte-Grenze. Optimal für große, monolithische Anwendungen: maximale Page-Table-Mapping-Performance, jeder Block direkt als IOFS-Page importierbar.

Block 0:  Genesis-Block (4096 Bytes)
Block 1:  .text [0]
Block 2:  .text [1]
Block 3:  .rodata [0]   ← neue 4-KB-Grenze, eigene Page
Block 4:  .data [0]     ← neue 4-KB-Grenze, eigene Page

Modus B — Sub-Page Packing

 
Ein Flag dafür gibt es nicht. --lbf-packed wird auch von lyxc 1.1.11B abgewiesen: lyxc: unbekannter Schalter '--lbf-packed' — mit dem Verweis auf lyxc --help. Der folgende Abschnitt beschreibt den vorgesehenen Modus, nicht den heutigen Stand — --target=lyxos erzeugt Modus A.

Für Kleinstprogramme und Microservices. Sektionen mit identischen Zugriffsrechten werden in dieselbe 4-KB-Page gepackt. Erst wenn sich die Schutzrechte ändern, beginnt ein neuer Block.

Packing-Regel: .text (R/X) und .rodata (R) können in eine gemeinsame Page. .data (R/W) erzwingt immer eine neue 4-KB-Grenze.

Block 0:  Genesis-Block (4096 Bytes)
Block 1:  .text + .rodata zusammen (beide R, ≤ 4032 Bytes)
Block 2:  .data [0]     ← Grenze wegen R/W

Der Compiler setzt lbf_flags |= LBF_FLAGS_PACKED im Genesis-Header. Der Loader (POSIX und IOFS) liest dieses Bit und wendet die korrekten Schutzrechte anhand des Section-Descriptor-TLV (Typ 0x08) pro Sub-Segment an.


3. Genesis-Block

 
Hier weichen Entwurf und Umsetzung voneinander ab. Die Byte-Tabelle weiter unten ist die Entwurfsfassung aus der Formatspezifikation. Was lyxc heute erzeugt und was kernel/lbf_exec.lyx liest, sieht anders aus — beides steht hier, damit niemand aus der falschen Tabelle liest.

Umsetzung: was heute in der Datei steht

Jeder 4096-Byte-Block beginnt mit einem 64-Byte-Blockkopf; darauf folgen 4032 Byte Nutzlast. Das gilt auch für Block 0 — die Genesis-Felder liegen also hinter dem Blockkopf.

Datei-Offset Feld (Nutzlast-Versatz) Größe Bedeutung
0x0000 magic 4 „LYX!“
0x0040 content_type (+0x00) 1 1 = ausführbar
0x0041 target_arch (+0x01) 1 1 = x86-64
0x0044 entry_point (+0x04) 8 volle virtuelle Adresse, normal 0x400000
0x0058 stack_size (+0x18) 4 Stapelgröße in Byte
0x00AC tlv_offset (+0x6C) 2 Anfang des TLV-Pools, Vorgabe 0x0080
0x00C0 TLV-Pool (+0x80) Rest Type-Length-Value, siehe unten

Nachgemessen an einem Programm mit @capabilities([fs.read, hardware.block]), übersetzt mit lyxc 1.1.11B:

content_type 1   arch 1   entry 0x400000   stack_size 131072   tlv_offset 0x80

typ 5 len 8   CAPS 0x41
typ 8 len 2   0000
typ 9 len 8   SECTION_MAP start_block=1 count=2 typ=1 prot=5
typ 9 len 8   SECTION_MAP start_block=2 count=2 typ=2 prot=4
typ 9 len 8   SECTION_MAP start_block=3 count=2 typ=3 prot=3

Die Typnummern der Umsetzung weichen von der Entwurfsliste in Abschnitt 4 ab:

Typ Umsetzung (kernel/lbf_exec.lyx) Entwurfsliste
5 CAPABILITIES (u64) EXT_META_PTR
9 SECTION_MAP: start_block(u32), count(u16), type(u8), prot(u8) reserviert für DWARF-Unwind
7 — (nicht erzeugt) CAPABILITIES

Im SECTION_MAP-Eintrag wertet der Kernel heute ein Bit aus: prot Bit 1 (LBF_PROT_WRITE) entscheidet, ob die Seiten beschreibbar eingehängt werden. Sektionstyp 4 ist .bss — dafür stehen keine Daten in der Datei, der Kernel nullt den Bereich.


Entwurfsfassung: 96-Byte-Header + 4000-Byte-Pool

Diese Tabelle beschreibt die geplante Fassung, nicht den heutigen Stand. Block 0 als vollständiges Kontrollzentrum: 96-Byte-Header gefolgt von einem 4000-Byte-TLV-Pool.

┌─────────────────────────────────────────────────────────────────┐
│  0x0000–0x000F  Core Machine Header          (16 Bytes)         │
│  0x0010–0x005B  Compiler Provenance Block    (76 Bytes)         │
│  0x005C–0x005F  Layout Flags & KI-Offset     (4 Bytes)          │
├─────────────────────────────────────────────────────────────────┤
│  0x0060–0x0FFF  KI-Semantik-Register / TLV-Pool (4000 Bytes)   │
└─────────────────────────────────────────────────────────────────┘

Vollständige Byte-Tabelle

Offset Größe Typ Feld Beschreibung
0x0000 4 Char[4] magic „LYX!“ (0x4C 0x59 0x58 0x21)
0x0004 1 uint8 format_version LBF-Format-Version: 0x01
0x0005 1 uint8 target_arch 0x01=x86-64, 0x02=ARM64, 0x03=RISC-V
0x0006 2 uint16 os_version Mindest-Kernel-Version (0x0100 = v1.0)
0x0008 8 uint64 entry_point Virtuelle CPU-Startadresse
0x0010 16 uint8[16] compiler_name „lyxc“ + 12 Bytes Padding
0x0020 4 uint32 compiler_version Major«16 | Minor«8 | Patch
0x0024 8 uint64 compiled_at Kompilierzeitpunkt (µs seit Unix-Epoch)
0x002C 16 uint8[16] compiler_instance_sn UUID der Compiler-Instanz (RFC 4122 v4)
0x003C 32 uint8[32] source_sha256 SHA-256 aller .lyx-Eingabedateien (konkateniert)
0x005C 2 uint16 lbf_flags Bit 0: LBF_FLAGS_PACKED; Bits 1–15: Reserviert
0x005E 2 uint16 ki_context_offset Byte-Offset zum TLV-Bereich; Standard: 0x0060
0x0060 4000 uint8[] ki_context TLV-Pool (Typen 0x01–0x0F)

con LBF_FLAGS_PACKED : uint16 := 1

con LBF_ARCH_X86_64  : uint8 := 0x01
con LBF_ARCH_ARM64   : uint8 := 0x02
con LBF_ARCH_RISCV   : uint8 := 0x03

Dateistruktur ab Block 1

Block 0 folgen die Code- und Daten-Blöcke. Jeder Block ist exakt 4096 Bytes, ohne eigenen Block-Header.

BLOCK 0    Genesis-Block
BLOCK 1+   .text [0..N]    R/X — Maschinencode
BLOCK N+1  .rodata [0..]   R   — Konstanten, String-Literale
BLOCK M+1  .data [0..]     R/W — initialisierte globale Variablen
BLOCK K+1  .bss             R/W — Kernel setzt auf 0, kein Inhalt auf Disk

Im Modus B können .text + .rodata in einem gemeinsamen Block stehen; die Aufteilung steht im Section-Descriptor-TLV (Typ 0x08).


4. TLV-Framework (KI-Semantik-Register)

Der 4000-Byte-Pool ab Offset 0x0060 verwendet eine Type-Length-Value-Struktur:

[Type: uint8 (1 Byte)] [Length: uint16 LE (2 Bytes)] [Value: Length Bytes]
Overhead pro Eintrag: 3 Bytes

Reichen 4000 Bytes nicht aus, verweist TLV 0x05 (EXT_META_PTR) auf eine Continuation-IOFS-Page. Das Framework ist damit für beliebig komplexe Programme unbegrenzt erweiterbar.

 
Die Nummern in diesem Abschnitt sind die Entwurfsfassung. Umgesetzt sind heute Typ 5 = CAPABILITIES und Typ 9 = SECTION_MAP; lyxc 1.1.11B erzeugt genau diese beiden (dazu einen leeren Typ 8). Die Zuordnung steht in Abschnitt 3 unter „Umsetzung„; der Kernel liest sie in kernel/lbf_exec.lyx.

Typen 0x09–0x0F sind im Entwurf reserviert: 0x09 (DWARF-Unwind-Frame) und 0x0A (Debug-Symboltabelle) sind für v1.2 geplant (siehe Versionstabelle). Typen 0x0B–0x0F sind unbelegt und dürfen von Custom-Toolchains genutzt werden, sofern ein Vendor-Präfix in HUMAN_INTENT (TLV 0x01) deklariert ist.

TLV 0x01 — HUMAN_INTENT

Payload: UTF-8-Freitext, max. 512 Bytes.

Enthält die semantische Beschreibung des Programms. Der Compiler extrahiert ihn aus /‑Doc-Comments über main():

/// Berechnet die CRC32C-Prüfsumme für Speichermedien im IOFS.
/// Liest Eingabe von stdin, gibt Prüfsumme als Hex auf stdout aus.
fn main(): int64 { ... }
Nutzen: * Shell gibt dem User ad-hoc Hilfe ohne Man-Pages * Semantische Firewall prüft Intent gegen angefragte Rechte * IOFS Omni-Ingest indexiert ihn für Timeline-Suche * Lyra kündigt dem User an was das Programm tut, bevor sys_acc_action ausgeführt wird ==== TLV 0x02 — DEP_HASH_GRAPH ==== Payload: Array aus Dependency-Deskriptoren à 52 Bytes. Jeder Eintrag enthält: SHA-256 des Dependency-Quellcodes (32 Bytes), Mindest-Version (4 Bytes) und Kurzname/Alias (16 Bytes). Auf IOFS übersetzt der Dependency-Resolver die SHA-256-Hashes via Hash-Index in LPIDs und webt Graph-Kanten (Gewicht 0xD001) in den Genesis-Knoten — kein Linker-Lauf. ==== TLV 0x03 — SYM_INTERFACE ==== Payload: Array aus kryptografisch verifizierten Funktions-Bindungen. Jeder Eintrag enthält Funktionsname, Parameter-Typen, Rückgabetyp, einen Contract-Hash (SHA-256 der erlaubten Ziel-Insel) und optional den Public Key des erwarteten Signierers. Verhindert Late-Binding-Angriffe: Ein identischer Funktionsname reicht nicht — der Contract-Hash oder Public Key muss übereinstimmen. ==== TLV 0x04 — ISA_EXTENSIONS ==== Payload: uint64 Bitmaske der benötigten CPU-Instruktionserweiterungen.
con LBF_ISA_AVX2    : uint64 := 1    // Intel AVX2 (256-bit SIMD)
con LBF_ISA_AVX512  : uint64 := 2    // Intel AVX-512 (512-bit SIMD)
con LBF_ISA_ARM_NEON: uint64 := 4    // ARM NEON / AdvSIMD
con LBF_ISA_AMX     : uint64 := 8    // Intel AMX (KI-Beschleunigung)
con LBF_ISA_SVE     : uint64 := 16   // ARM SVE/SVE2
con LBF_ISA_RISCV_V : uint64 := 32   // RISC-V Vector Extension
con LBF_ISA_AES_NI  : uint64 := 64   // x86 AES-NI (Hardware-Verschlüsselung)
con LBF_ISA_SHA_NI  : uint64 := 128  // x86 SHA-NI (Hardware-Hashing)
Beim Start gleicht die KI diese Maske gegen die CPUID-Register des Kernels ab. Bei Inkompatibilität wird die Ausführung sicher abgefangen statt einen
SIGILL-Trap zu riskieren. ==== TLV 0x05 — EXT_META_PTR ==== Payload: uint64 LPID (IOFS) oder Block-Index (POSIX). Verweist auf eine Continuation-Page mit weiteren TLV-Daten wenn die 4000 Bytes des Genesis-Blocks erschöpft sind. ==== TLV 0x06 — SOURCE_MAP ==== Payload: Git-Commit-SHA1 (20 Bytes), IOFS-LPID (8 Bytes) oder UTF-8-URI (variabel). Ermöglicht dem Kernel-Tracer, CPU-Register und Maschinencode-Zustände direkt in lesbaren Lyx-Quellcode zurückzuübersetzen. Lyra kann bei Abstürzen die verursachende Quellcode-Zeile direkt benennen. ==== TLV 0x07 — CAPABILITIES ==== Payload: uint64 Bitmaske der benötigten Kernel-Rechte.
con LBF_CAP_FS_READ       : uint64 := 1
con LBF_CAP_FS_WRITE      : uint64 := 2
con LBF_CAP_NET_SOCKET    : uint64 := 4
con LBF_CAP_PROC_SPAWN    : uint64 := 8
con LBF_CAP_KI_EMBED      : uint64 := 16
con LBF_CAP_KI_GRAPH_WRITE: uint64 := 32
con LBF_CAP_SANDBOX_ACCESS: uint64 := 64
con LBF_CAP_AUDIO_MIC     : uint64 := 128
con LBF_CAP_PRIVILEGED    : uint64 := 9223372036854775808   // Bit 63
Der Compiler leitet diese Maske automatisch aus den verwendeten
import-Statements ab (z.B. import std.net.socketLBF_CAP_NET_SOCKET). Die Semantische Firewall prüft: Fordert das Binary Capabilities an die sein deklarierter HUMAN_INTENT nicht rechtfertigt? ==== TLV 0x08 — SECTION_DESCRIPTOR ==== Payload: Array aus Section-Deskriptoren à 8 Bytes. ^ Offset ^ Größe ^ Feld ^ Beschreibung ^ | 0x00 | 2 | block_start | Erster Block-Index dieser Sektion | | 0x02 | 2 | block_count | Anzahl Blöcke (oder Sub-Block-Anteil im Packed-Modus) | | 0x04 | 1 | section_type | 0x01=.text, 0x02=.data, 0x03=.rodata, 0x04=.bss | | 0x05 | 1 | protection | Bitmaske: 0x01=Read, 0x02=Write, 0x04=Execute | | 0x06 | 2 | byte_offset | Im Modus B: Startoffset innerhalb des Blocks (0 im Modus A) | —- ===== 5. Vertrauenskette (5 Schichten) ===== LBF implementiert Supply-Chain-Security durch fünf übereinander liegende Sicherheitsschichten: ^ Schicht ^ Mechanismus ^ Angriff der verhindert wird ^ | 1 — Bit-Rot | SHA-256 über alle Quelldateien (source_sha256) | Stille Bit-Korruption auf Disk | | 2 — Source-Herkunft | source_sha256 bricht wenn Maschinencode geändert wird | Nachträgliche Code-Manipulation | | 3 — Compiler-Vertrauen | Blacklist kompromittierter Compiler-UUIDs in der IOFS Panic-Sandbox | Kompromittierte Build-Toolchain | | 4 — Contract-Linking | TLV 0x03 (SYM_INTERFACE): Contract-Hash oder Public Key muss stimmen | Late-Binding-Angriffe via Namens-Kollision | | 5 — Intent-Kohärenz | Semantische Firewall prüft HUMAN_INTENT gegen CAPABILITIES | Tarnung von Malware als harmlose App | Prüfreihenfolge beim LBF-Import auf IOFS:
1. Genesis-Block lesen; format_version prüfen (== 0x01)
2. Compiler-UUID gegen Blacklist prüfen
3. ISA_EXTENSIONS gegen CPUID des Kernels prüfen
4. Intent + Capabilities auf Kohärenz prüfen (Semantische Firewall)
5. DEP_HASH_GRAPH auflösen → Dependency-LPIDs via Hash-Index
6. SYM_INTERFACE-Contracts verifizieren
7. IOFS-Pages für alle Blöcke anlegen, Graph-Kanten weben
—- ===== 6. Zero-Load auf nativem IOFS ===== Das Herzstück des Formats: auf IOFS wird kein Segment in den RAM kopiert. > Hintergrund für Junior-Entwickler:
CR3 ist das CPU-Register das auf die Seitentabelle (Page Table) des laufenden Prozesses zeigt — es bestimmt welche virtuellen Adressen auf welche physischen RAM-Seiten zeigen. LBA (Logical Block Address) ist die physische Sektor-Adresse auf der NVMe-SSD. PTE (Page Table Entry) ist ein einzelner Eintrag in dieser Tabelle. CPUID ist eine x86-Instruktion mit der die CPU ihre eigenen Fähigkeiten (AVX, AES-NI usw.) meldet.
1. Kernel liest Genesis-Block (IOFS-Page Typ=0x04)
   → Vertrauenskette durchlaufen
   → ISA_EXTENSIONS gegen CPUID validieren

2. Kernel erstellt neues CR3-Page-Table-Root

3. Section-Descriptor-TLV (0x08) bestimmt VA-Layout:
   .text:   0x0000000000400000 + block_index × 4096
   .rodata: folgt direkt nach .text
   .data:   folgt direkt nach .rodata
   .bss:    kein Block auf Disk — Kernel alloziert zeroed Frames

4. Für jeden Block (Block 1..N):
   lba = lip_get(block_lpid)      → O(1) LIP-Übersetzung
   pte.phys_addr = lba × 4096    → LBA direkt als physische Adresse
   pte.flags     = section.prot  → R/W/X via NX-Bit
   PTE in CR3 schreiben          → kein Kopieren, kein Parsen

5. Stack allozieren (Kernel-Default: 128 KB)

6. CPU springt zu entry_point
   → Alle Pages bereits gemappt — kein erster Page-Fault
   → Kein ELF-Interpreter, kein ld.so, kein Relokations-Loop
Ladezeit: O(n) mit n = Anzahl Blöcke, ausschließlich O(1)-LIP-Lookups und PTE-Schreibvorgänge. Kein Parser, kein Segment-Allokator. —- ===== 7. POSIX-Lademodus ===== Auf Linux, macOS und Windows läuft LBF über den Kompatibilitätslader
lbf_run. Die semantischen Sicherheitsschichten (Semantische Firewall, Graph-Kanten) entfallen; lbf_run ist ein Entwicklungs- und Portabilitätspfad, kein Produktionspfad.
1. Prüfe Magic "LYX!" an Byte 0
2. format_version prüfen (== 0x01)
3. Compiler-UUID gegen ~/.lyx/compiler_blacklist.bin prüfen
4. ISA_EXTENSIONS gegen CPUID prüfen
5. Section-Descriptor-TLV (0x08) auslesen
6. Blöcke 1..N via mmap() mit korrekten Schutzrechten mappen:
   .text:   PROT_READ | PROT_EXEC
   .rodata: PROT_READ
   .data:   PROT_READ | PROT_WRITE
   .bss:    mmap(MAP_ANON) → zeroed
7. DEP_HASH_GRAPH → POSIX-Pfad-Auflösung via LD_LIBRARY_PATH
8. Springe zu entry_point
—- ===== 8. IOFS-Integration ===== Beim Import via
lbf_import legt der Kernel für jeden 4-KB-LBF-Block eine IOFS-Page an: * Block 0 (Genesis): IOFS-Page Typ=0x04 (LBF_Executable), CRC32C über gesamte Page, LPID gesetzt * Blöcke 1..N (Code/Daten): IOFS-Pages Typ=0x02 (Data) Graph-Kanten verbinden die Blöcke und Abhängigkeiten:
con IOFS_EDGE_LBF_CHAIN : int64 := 0xB001   // Genesis → Block 1 → Block 2 → ...
con IOFS_EDGE_LBF_DEP   : int64 := 0xD001   // Genesis → externe Bibliotheks-Genesis
IOFS-Page vs. LBF-Genesis: Beide tragen
LYX! an Byte 0. Die Unterscheidung erfolgt über Byte 0x0004: Wert 0x01 = LBF Genesis-Block (format_version); Wert 0x020xFF = IOFS-Page-Typ. —- ===== 9. Compiler-Flags und CLI =====
# Natives LYX! (Maschinencode) — Produktionspfad
lyxc main.lyx --target=lyxos -o main.lbf

# IR-Bytecode LBF\0 — NUR Simulation/Test, kein nativer Code!
lyxc main.lyx --target=lyxos --emit=lbf -o main.lbf.ir

# Cross-Compilation
lyxc main.lyx --target=arm64 -o main_arm.lbf

# Debug-LBF (TLV 0x06 zeigt auf lokale .lyx-Dateien)
lyxc main.lyx --target=lyxos --debug -o main.lbf

# Genesis-Block, TLV-Pool und Sektionen inspizieren
lbfdump -x main.lbf

# IR-Bytecode disassemblieren
lbfdump -d main.lbf.ir
→ Alle Optionen des Inspektors: lbfdump <box gh> > Diese früher hier genannten Aufrufe gibt es nicht (erneut nachgemessen mit lyxc 1.1.11B): > > *
--lbf-packed (Sub-Page-Packing, Modus B) und --isa=… — beide werden mit unbekannter Schalter und Exit 2 abgewiesen. > * Die Werkzeuge lbf_dump, lbf_run und lbf_import sind nicht installiert. Für die Inspektion gibt es lbfdump; eine Prüf-Option für CI (--verify-only) hat es nicht — der Genesis-Block nennt aber die gespeicherte CRC32C, die sich mit -f ablesen lässt. </box> —- ===== 10. Versionierung ===== ^ Version ^ Inhalt ^ | v1.0 | Erster Entwurf: Genesis-Header, TLV-Framework, Zero-Load auf IOFS | | v1.1 | Aktuell. Magic „LYX!“, 96-Byte-Header, Modus A/B, ISA_EXTENSIONS, SYM_INTERFACE, EXT_META_PTR, SOURCE_MAP, Vertrauenskette auf 5 Schichten | | v1.2 | TLV 0x0A: Debug-Symboltabelle. Achtung: 0x09 ist in der Umsetzung bereits als SECTION_MAP belegt — der geplante DWARF-Unwind-Frame braucht eine andere Nummer | | v1.3 | Multi-Arch-Fat-Binaries (x86-64 + ARM64 in einer Datei) | | v2.0 | LAB (Lyx AI Binary): Genesis-Block enthält ausführbares LLM-Gewichts-Fragment | Letzte Aktualisierung: 2026-06-25 Letzte Aktualisierung: 2026-08-27 — Stand gegen lyxc 1.1.11B und kernel/lbf_exec.lyx nachgemessen: mehrere Sektionen und W^X sind umgesetzt (SECTION_MAP-TLV, Schreibbarkeitskarte je Seite), die Rechte kommen fail-closed aus der CAPABILITIES''-TLV. Genesis-Layout der Umsetzung ergänzt (64-Byte-Blockkopf, Felder ab +0x40, TLV-Pool ab 0xC0) und von der Entwurfsfassung getrennt; abweichende TLV-Nummern (5 statt 7, 9 statt reserviert) benannt.