freepdfeditor/docs/adr
ai-ad4 067bb7c362 feat(adr-0005): Rust for image-codec leaf decoders; resolve M0 Rust-vs-C++ decision (§15)
ADR-0005 records the decision deferred in ADR-0003: Rust (staticlib, C ABI)
for the image-codec leaf decoders where the CVE history concentrates
(OpenJPEG ~40 buffer-overflow CVEs incl. 2024, several 'as used in PDFium');
C++ throughout elsewhere. Spike F measures the build-friction cost empirically
(~10s cargo build, one .a link, ASan-clean FFI) rather than estimating it.

- docs/adr/0005-rust-leaf-decoders.md: decision + CVE survey + evidence
- docs/adr/0003 + README: mark deferred portion superseded by ADR-0005
- spike/F_rust_ffi_probe: Rust staticlib leaf + C++ driver, bounded (ptr,len)
  FFI matching §7.2; builds clean under ASan+UBSan
- .gitignore: ignore cargo target/ (keep Cargo.lock for reproducibility)
2026-07-27 10:42:57 +00:00
..
0001-render-what-you-will-save.md chore: initial repository scaffold (§14 steps 1-3, 9) 2026-07-25 20:14:22 +00:00
0002-surgical-re-emission.md chore: initial repository scaffold (§14 steps 1-3, 9) 2026-07-25 20:14:22 +00:00
0003-memory-safety-posture.md feat(adr-0005): Rust for image-codec leaf decoders; resolve M0 Rust-vs-C++ decision (§15) 2026-07-27 10:42:57 +00:00
0004-two-process-trust-boundary.md chore: initial repository scaffold (§14 steps 1-3, 9) 2026-07-25 20:14:22 +00:00
0005-rust-leaf-decoders.md feat(adr-0005): Rust for image-codec leaf decoders; resolve M0 Rust-vs-C++ decision (§15) 2026-07-27 10:42:57 +00:00
README.md feat(adr-0005): Rust for image-codec leaf decoders; resolve M0 Rust-vs-C++ decision (§15) 2026-07-27 10:42:57 +00:00

README.md

Architecture Decision Records

Architecture decision records (ADRs) live here, numbered, and immutable once accepted (§13.4 of docs/plan.md). To change an accepted decision, write a new ADR that supersedes the earlier one and reference it from both files.

Format

Each ADR is a single Markdown file NNNN-short-title.md with:

  • Status: Proposed | Accepted | Superseded by NNNN | Withdrawn
  • Date: ISO 8601
  • Context: why this decision is being made now
  • Decision: what we decided
  • Consequences: what follows — positive, negative, and neutral
  • Alternatives considered: what we did not choose, and why

Seeded at M0

Per §13.4 and §14 step 9, the following ADRs exist from M0: