Offline differential replay for syzkaller programs across OS kernels.
SyzABI takes a corpus of *.syz programs, compiles them into reproducible testcase binaries, runs them simultaneously on a reference kernel (Linux) and a candidate kernel (Asterinas, StarryOS, ArceOS, etc.), normalizes the resulting syscall traces, compares the outputs, and produces actionable divergence reports.
Core Concept
Every workflow follows the same pattern:
syz programs → testcase binaries → run on reference + candidate → compare traces → report
The interface is unified: every workflow is driven by make <command> WORKFLOW=<name>.
Side
Typical kernel
Role
reference
Linux
Ground truth
candidate
Asterinas / StarryOS / ArceOS / Linux
System under test
Quick Start
1. Bootstrap once
make bootstrap # Install pinned Go toolchain
make init-layout # Create directory scaffolding
2. Prepare target source (example: Asterinas)
git clone https://github.com/asterinas/asterinas.git third_party/asterinas
git -C third_party/asterinas checkout main
3. Generate or import corpus
make generate-corpus
make import-corpus
4. Run
# Default: Asterinas smoke, 100 cases, 4 jobs
make run
# Or fully explicit
make run WORKFLOW=asterinas CAMPAIGN=smoke LIMIT=100 JOBS=4
Supported Workflows
Workflow
Purpose
Comparison
baseline
Validate replay framework
Linux vs Linux
asterinas
Differential replay
Linux vs Asterinas
asterinas_scml
SCML-aware filtering + preflight
Linux vs Asterinas
tgoskits_starryos
TGOSKits StarryOS integration
Linux vs StarryOS
tgoskits_arceos_smoke
TGOSKits ArceOS smoke / PoC
Linux vs ArceOS
Workflow Guides
Asterinas
One-shot:
make run
# or
ASTERINAS_JOBS=80 make run WORKFLOW=asterinas CAMPAIGN=smoke LIMIT=100
Step by step:
make filter-corpus
make derive WORKFLOW=asterinas
make prepare-target WORKFLOW=asterinas
make build WORKFLOW=asterinas
make run WORKFLOW=asterinas CAMPAIGN=smoke LIMIT=50 JOBS=4
make analyze WORKFLOW=asterinas
make report WORKFLOW=asterinas
Baseline
make filter-corpus
make build WORKFLOW=baseline
make run WORKFLOW=baseline CAMPAIGN=smoke LIMIT=100
make run WORKFLOW=baseline CAMPAIGN=full LIMIT=1000
make analyze WORKFLOW=baseline
make report WORKFLOW=baseline
SCML
make build-asterinas-scml-manifest
make derive WORKFLOW=asterinas_scml
make preflight-workflow WORKFLOW=asterinas_scml
python3 orchestrator/scheduler.py --workflow asterinas_scml --campaign smoke --limit 100 --jobs 8
python3 tools/render_summary.py --workflow asterinas_scml
SyzABI
SyzABI takes a corpus of
*.syzprograms, compiles them into reproducible testcase binaries, runs them simultaneously on a reference kernel (Linux) and a candidate kernel (Asterinas, StarryOS, ArceOS, etc.), normalizes the resulting syscall traces, compares the outputs, and produces actionable divergence reports.Core Concept
Every workflow follows the same pattern:
The interface is unified: every workflow is driven by
make <command> WORKFLOW=<name>.referencecandidateQuick Start
1. Bootstrap once
2. Prepare target source (example: Asterinas)
3. Generate or import corpus
4. Run
Supported Workflows
baselineasterinasasterinas_scmltgoskits_starryostgoskits_arceos_smokeWorkflow Guides
Asterinas
One-shot:
Step by step:
Baseline
SCML
TGOSKits — StarryOS
Prerequisites:
SYZABI_ENABLE_TGOSKITS=1SYZABI_TGOSKITS_DIR=/path/to/tgoskitsrustc,cargo)riscv64-linux-musl-gccqemu-system-riscv64Preflight and healthcheck:
Smoke campaign:
Scale campaign:
For detailed host prerequisites, PATH setup, and troubleshooting, see
docs/targets/tgoskits-starryos.md.TGOSKits — ArceOS
Prerequisites:
SYZABI_ENABLE_TGOSKITS=1SYZABI_TGOSKITS_DIR=/path/to/tgoskitsPreflight and healthcheck:
Experimental single-case campaign:
For details, see
docs/targets/tgoskits-arceos.md.System Requirements
Host tools
bashpython3makegitcurltargccstraceFor Asterinas workflows
dockerqemu-system-x86_64/dev/kvm(recommended for speed)For TGOSKits StarryOS
qemu-system-riscv64riscv64-linux-musl-gccNotes
make bootstrapinstalls the pinned Go toolchain intoartifacts/toolchains/go/current/go.SYZABI_ENABLE_TGOSKITS=1and require an external TGOSKits checkout pointed to bySYZABI_TGOSKITS_DIR.What the Runner Does
syz-prog2cturns each*.syzprogram into a standalone C binary.NO_DIFF— behavior matchesBASELINE_INVALID— reference side failed (infrastructure issue)WEAK_SPEC_OR_ENV_NOISE— expected environmental differenceUNSUPPORTED_FEATURE— candidate does not implement the syscallBUG_LIKELY— semantic divergence detectedImportant Outputs
Asterinas
eligible_programs/targets/asterinas/asterinas/default.jsonlbuild/targets/asterinas/asterinas/testcases/artifacts/runs/targets/asterinas/asterinas/artifacts/targets/asterinas/build-info.jsonreports/targets/asterinas/asterinas/campaign-results.jsonlreports/targets/asterinas/asterinas/summary.jsonreports/targets/asterinas/asterinas/summary.mdreports/targets/asterinas/asterinas/failure-report.jsonBaseline
eligible_programs/targets/linux/baseline/default.jsonlbuild/targets/linux/baseline/testcases/artifacts/runs/targets/linux/baseline/reports/targets/linux/baseline/summary.jsonTGOSKits StarryOS
artifacts/runs/targets/tgoskits_starryos/tgoskits_starryos/reports/targets/tgoskits_starryos/tgoskits_starryos/summary.jsonWhen investigating failures, the first files to inspect are usually:
reports/targets/<target>/<workflow>/summary.jsonreports/targets/<target>/<workflow>/campaign-results.jsonlcandidate/console.logunderartifacts/runs/targets/<target>/<workflow>/Repository Layout
Version Pins
syzkaller5b92003d577daa0766edda7ed533d75e1ac545ffasterinas/asterinas:0.17.1-20260317The exact Asterinas revision is resolved from the configured workflow path during preparation.
Design Goals
make run WORKFLOW=...should cover the full pipeline.JOBSshould scale without corruption.