Experimental ELF64 → ABO converter for Annwyn applications.
═════════════════════════════════════════════════════════
abo-builder converts ELF64 executables into the ABO (Application/Annwyn Bundle Object) format used by Annwyn.
The tool is responsible for:
✓ Parsing ELF64 binaries
✓ Extracting loadable segments
✓ Building ABO containers
✓ Embedding application metadata
✓ Generating deterministic UUIDs
✓ Validating ABO files
✓ Inspecting existing bundles
The produced bundles are intended to be loaded by the Annwyn runtime.
═════════════════════════════════════════════════════════
⟦ ABO v0 ⟧
The current format contains:
• Header
• Manifest
• Segment table
• Segment data
+-------------------+
| Header |
+-------------------+
| Manifest |
+-------------------+
| Segment Table |
+-------------------+
| Segment Data |
+-------------------+
ABO v0 is still experimental and may change significantly.
═════════════════════════════════════════════════════════
⟦ Early Development ⟧
Current features include:
• ELF64 parsing
• PT_LOAD extraction
• Segment conversion
• Manifest embedding
• Deterministic UUID generation
• Bundle validation
• Bundle inspection
This repository is currently an experimentation platform rather than a stable packaging tool.
═════════════════════════════════════════════════════════
- ELF64 parser
- ET_EXEC support
- ET_DYN support
- Segment extraction
- Manifest support
- Deterministic UUID generation
- ABO validation
- ABO dumping
- Improved validation
- Better diagnostics
- Rich metadata
- WASM payload support
- Compression
- Signature support
- Dependency metadata
- ABI versioning
═════════════════════════════════════════════════════════
cargo build --release═════════════════════════════════════════════════════════
abo-builder init.elf init.aboabo-builder init.elf init.abo --manifest manifest.txtabo-builder init.elf init.abo \
--name init \
--version 0.1.0 \
--cap-req IpcEndpoint:SEND \
--cap-exp service://init \
--sandbox no_network═════════════════════════════════════════════════════════
Validate an existing bundle:
abo-builder --check init.aboInspect its contents:
abo-builder --dump init.abo═════════════════════════════════════════════════════════
⟦ KEY=VALUE ⟧
Example:
NAME=init
VERSION=0.1.0
CAP_REQ=IpcEndpoint:SEND
CAP_REQ=Memory:MAP
CAP_EXP=service://init
SANDBOX=no_network
SANDBOX=no_filesystem
Supported directives:
| Directive | Description |
|---|---|
NAME |
Component name |
VERSION |
Component version |
CAP_REQ |
Required capability |
CAP_EXP |
Exposed service |
SANDBOX |
Sandbox restriction |
═════════════════════════════════════════════════════════
Input binaries should:
• Be ELF64
• Target x86_64
• Contain PT_LOAD segments
• Be compiled as ET_EXEC or ET_DYN
Typical build command:
cargo build --target x86_64-unknown-noneFor PIE executables, the runtime currently assumes a load base of:
0x00400000
which must remain synchronized with the kernel.
═════════════════════════════════════════════════════════
Contributions, discussions, ideas, criticism, and questions are welcome.
Please keep in mind that:
• Format compatibility is more important than features.
• Simplicity is preferred over complexity.
• Changes must remain synchronized with the kernel loader.
• Backward compatibility should be considered whenever possible.
═════════════════════════════════════════════════════════
• annwyn-kernel
• annwyn-runtime
• annwyn-sdk
• annwyn-docs
═════════════════════════════════════════════════════════
Licensed under either of:
-
MIT License
-
Apache License 2.0
at your option.