|
| 1 | +# Paper Sketch — Zenodo / arXiv Submission |
| 2 | + |
| 3 | +**Working Title:** *OPSM: Trust-First Package Management for the Ecosystem-of-Ecosystems Era* |
| 4 | +**Alt Title:** *Beyond Language Silos: Inclusive, Formally-Verified Cross-Ecosystem Dependency Management* |
| 5 | +**Venue target:** arXiv cs.SE or cs.PL; deposit to Zenodo for DOI |
| 6 | +**Audience:** PL/SE researchers, package manager implementors, security practitioners |
| 7 | +**Format:** ~8 000 words, conference-paper style; no IEEE/ACM overhead needed for arXiv/Zenodo |
| 8 | +**Status:** SKETCH — not yet written; route to CHATGPT for prose, CLAUDE for formal claims |
| 9 | + |
| 10 | +--- |
| 11 | + |
| 12 | +## 1. The Core Argument (one paragraph) |
| 13 | + |
| 14 | +Modern projects are not monolingual. A typical mid-2020s system combines a Rust core, a |
| 15 | +Deno/ReScript frontend, Elixir coordination services, Julia batch scripts, and Zig |
| 16 | +FFI bridges — and that is before counting the niche languages in embedded subsystems |
| 17 | +(Ada safety core, Idris2 proof layer, Gleam actor network). Yet every package manager |
| 18 | +available today is language-local: Cargo serves Rust, Hex serves Elixir, npm serves |
| 19 | +JavaScript, each with its own trust model, its own resolver, its own vulnerability feed. |
| 20 | +The result is *N* separate supply-chain attack surfaces, *N* separate pinning disciplines, |
| 21 | +*N* separate audit processes — for one logical project. We call this the |
| 22 | +**ecosystem-of-ecosystems problem**. OPSM is our answer: a single CLI with 101 registry |
| 23 | +adapters, a unified trust pipeline from provenance generation to post-quantum attestation, |
| 24 | +a formally-verified resolver, and a Human-Assisted Registry that enfranchises languages |
| 25 | +whose communities are too small to operate a package index. |
| 26 | + |
| 27 | +--- |
| 28 | + |
| 29 | +## 2. Structure / Section Map |
| 30 | + |
| 31 | +### §1 Introduction |
| 32 | +- The polyglot shift: data from GitHub Language Statistics, TIOBE polyglot monorepos |
| 33 | +- Supply-chain incidents that crossed language boundaries (Log4Shell cascade, |
| 34 | + node-ipc, eslint-scope, PyPI typosquat → downstream Rust builds) |
| 35 | +- Gap: no cross-ecosystem trust standard; SLSA is language-agnostic in principle but |
| 36 | + per-ecosystem in practice |
| 37 | +- Contribution list (bullet form, verifiable against OPSM implementation) |
| 38 | + |
| 39 | +### §2 Background and Related Work |
| 40 | +- Language-local PMs: Cargo, npm/Deno, pip, Hex, pub (Dart), pub.dev, RubyGems, |
| 41 | + Hackage — what each does well and what it cannot see |
| 42 | +- Cross-ecosystem tools that exist: Nix/Guix (good: reproducibility; gap: language |
| 43 | + semantics opaque to resolver), Renovate/Dependabot (good: multi-ecosystem awareness; |
| 44 | + gap: no trust pipeline, no verification, read-only) |
| 45 | +- Supply-chain security standards: SLSA, SBOM (SPDX/CycloneDX), Sigstore, IANA |
| 46 | + package-metadata specs, OpenSSF Scorecard |
| 47 | +- PubGrub resolver: what it guarantees vs what ad-hoc SAT/backtracking cannot |
| 48 | + |
| 49 | +### §3 The Ecosystem-of-Ecosystems Problem (formalism + examples) |
| 50 | + |
| 51 | +**Definition.** An *ecosystem* E is a tuple (R, V, M) where R is a registry, |
| 52 | +V is a version scheme (Semver, PEP 440, Go MVS, etc.), and M is a manifest format |
| 53 | +(Cargo.toml, package.json, mix.exs, etc.). An *ecosystem-of-ecosystems project* P |
| 54 | +is a project whose dependency graph D spans ≥2 distinct ecosystems. |
| 55 | + |
| 56 | +**Claim 1.** For any P with ecosystems {E₁, ..., Eₙ}, the union of attack surfaces |
| 57 | +is at least Σᵢ|trust_assumptions(Eᵢ)| — there is no sub-additive interaction without |
| 58 | +a shared trust root. |
| 59 | + |
| 60 | +**Claim 2.** Resolver correctness across Eᵢ requires version-scheme translation |
| 61 | +(e.g. Semver ↔ PEP 440) plus a monotonicity invariant that PubGrub can maintain |
| 62 | +but greedy resolvers cannot. |
| 63 | + |
| 64 | +**Examples:** real incidents (with CVEs) where a vulnerability in ecosystem Eᵢ |
| 65 | +propagated through a cross-ecosystem build graph to Eⱼ. |
| 66 | + |
| 67 | +### §4 OPSM Architecture |
| 68 | + |
| 69 | +4.1 **Registry Layer** (101 adapters) |
| 70 | +- 8 first-class adapters (Crates, npm, Hex, PyPI, RubyGems, Go, Hackage, pub) |
| 71 | +- 93 plugin adapters (asdf plugins, language-specific custom registries) |
| 72 | +- Uniform adapter interface: `fetch_versions/2`, `fetch_manifest/2`, |
| 73 | + `fetch_tarball/3`, `verify_checksum/2` |
| 74 | +- ETS-based caching with TTL; federation propagation |
| 75 | + |
| 76 | +4.2 **Unified Resolver** (PubGrub over V) |
| 77 | +- Version scheme normalisation layer: `Semver`, `Pep440`, `GoMVS` → `ComparableVersion` |
| 78 | +- Cross-ecosystem conflict detection: when Eᵢ and Eⱼ transitively share a native dep |
| 79 | + (e.g. OpenSSL), OPSM detects the diamond and applies the strictest version bound |
| 80 | +- Property-based testing: ∀ inputs, PubGrub terminates and produces a minimal solution |
| 81 | + (QuickCheck / StreamData proofs) |
| 82 | + |
| 83 | +4.3 **Trust Pipeline** (5 microservices) |
| 84 | +- `claim-forge` (Rust): SLSA Level 3 provenance generation, ed25519+Dilithium5 signing |
| 85 | +- `checky-monkey` (Rust): tarball integrity, SBOM extraction, CycloneDX validation |
| 86 | +- `palimpsest-license` (Rust/Elixir): SPDX expression compatibility matrix, |
| 87 | + PMPL/MPL/AGPL/MIT/Apache interactions verified |
| 88 | +- `oikos` (Elixir): sustainability scoring — 8 dimensions (maintenance, bus factor, |
| 89 | + funding, responsiveness, test coverage, security posture, docs quality, governance) |
| 90 | +- `cicd-hyper-a` (Rust): publication + federation, SLSA attestation anchoring |
| 91 | + |
| 92 | +4.4 **Post-Quantum Hardening** |
| 93 | +- Motivation: harvest-now-decrypt-later against package signatures |
| 94 | +- Dilithium5 + Ed25519 hybrid; Kyber-1024 KEM for key exchange; SPHINCS+ for |
| 95 | + time-stamp commitments |
| 96 | +- Implemented as Rust NIF called from Elixir; benchmarks show < 2ms overhead |
| 97 | + for typical package verification |
| 98 | + |
| 99 | +4.5 **Human-Assisted Registry (HAR)** |
| 100 | +- Problem: minority-language ecosystems (Pony, Lobster, Pharo, GDScript, Idol, etc.) |
| 101 | + have no centralised registry; they distribute via git + manual instructions |
| 102 | +- HAR: three agentic discovery agents (GitHub scraper, web crawler, mirror finder) |
| 103 | + that build a registry record with human curation step before acceptance |
| 104 | +- Inclusion claim: any language that has ≥1 public package can participate without |
| 105 | + infrastructure investment; HAR provides the indexing layer |
| 106 | +- Governance: curation committee model; RFC process for new language onboarding |
| 107 | + |
| 108 | +4.6 **Manifest Interoperability** |
| 109 | +- 10 input formats → unified internal representation → 7 output formats |
| 110 | +- Round-trip fidelity: what is preserved vs what is lossy (documented per format) |
| 111 | +- Lock-file generation: deterministic across OPSM versions |
| 112 | + |
| 113 | +### §5 Formal Guarantees and Verification |
| 114 | +- PubGrub properties: completeness, minimality, termination — proven via StreamData |
| 115 | +- License compatibility: SPDX expression decision procedure proven correct for |
| 116 | + a subset of SPDX (excluding GPL linking edge cases; explicitly out of scope) |
| 117 | +- SSRF and DoS prevention: verified block at the resolver boundary |
| 118 | +- What we do NOT prove (honesty): we cannot verify upstream registry honesty; |
| 119 | + trust pipeline mitigates but does not eliminate |
| 120 | + |
| 121 | +### §6 Evaluation |
| 122 | + |
| 123 | +6.1 **Correctness** (547 core + 40 property + 49 integration tests) |
| 124 | +- Resolver correctness vs npm/pip on their own test suites (cross-ecosystem cases) |
| 125 | +- Trust pipeline false positive/negative rates on known-good and known-bad packages |
| 126 | + |
| 127 | +6.2 **Performance** |
| 128 | +- Resolver: compared to `npm install`, `cargo build`, `mix deps.get` on equivalent |
| 129 | + dependency graphs; OPSM overhead breakdown |
| 130 | +- Trust pipeline: per-package latency distribution; cache hit rates |
| 131 | + |
| 132 | +6.3 **Inclusion** |
| 133 | +- Languages onboarded via HAR: how many, time-to-first-package |
| 134 | +- Comparison: how many of those languages have any tooling in Nix/Guix/Renovate |
| 135 | + |
| 136 | +6.4 **Security** |
| 137 | +- Supply chain simulation: inject a known-malicious package; OPSM detects via |
| 138 | + claim-forge provenance mismatch in N% of cases |
| 139 | + |
| 140 | +### §7 Limitations and Future Work |
| 141 | +- Resolver completeness for circular cross-ecosystem deps (currently rejected) |
| 142 | +- HAR governance scalability (human curation bottleneck) |
| 143 | +- Plugin system sandboxing (subprocess boundary for untrusted registry adapters) |
| 144 | +- Integration with Guix/Nix channel infrastructure (OPSM as frontend) |
| 145 | +- Formal SLSA Level 4 upgrade (requires hermetic build environment) |
| 146 | + |
| 147 | +### §8 Conclusion |
| 148 | +- The ecosystem-of-ecosystems problem is structural, not incidental |
| 149 | +- OPSM demonstrates it is solvable at acceptable overhead |
| 150 | +- Open source (PMPL-1.0-or-later / MPL-2.0 fallback); HAR governance model documented |
| 151 | + |
| 152 | +--- |
| 153 | + |
| 154 | +## 3. Key Claims (must be backed by evidence before submission) |
| 155 | + |
| 156 | +| Claim | Evidence needed | Status | |
| 157 | +|-------|-----------------|--------| |
| 158 | +| PubGrub correctly resolves cross-ecosystem deps where greedy fails | Failing test case + OPSM resolution | Needs construction | |
| 159 | +| Trust pipeline catches N% of SLSA-violating packages | Simulation or real-world corpus | Needs benchmark | |
| 160 | +| HAR reduces time-to-first-package for minority languages to < 1 day | Case studies (Pony? Lobster?) | Needs documentation | |
| 161 | +| Post-quantum signing overhead < 2ms at p99 | Benchmark in claim-forge | Claimed; needs formal measurement | |
| 162 | +| License compatibility matrix is sound for SPDX core | Formal proof or exhaustive case analysis | Needs proof or scope statement | |
| 163 | + |
| 164 | +--- |
| 165 | + |
| 166 | +## 4. Assignment |
| 167 | + |
| 168 | +| Task | Assigned to | |
| 169 | +|------|-------------| |
| 170 | +| Full prose draft (§1, §2, §8) | CHATGPT | |
| 171 | +| Formalism (§3, §5) | CLAUDE | |
| 172 | +| Architecture section (§4) | CLAUDE (from EXPLAINME.adoc) | |
| 173 | +| Evaluation data collection | Jonathan + CLAUDE (run benchmarks) | |
| 174 | +| Figures (architecture diagram, trust pipeline flow) | VIBE | |
| 175 | +| Bibliography | CHATGPT | |
| 176 | +| arXiv/Zenodo submission | Jonathan (manual) | |
| 177 | + |
| 178 | +--- |
| 179 | + |
| 180 | +## 5. Notes from Past Discussions |
| 181 | + |
| 182 | +The following design choices emerged from the long discussions that preceded OPSM v2: |
| 183 | + |
| 184 | +- **"Package manager as CI gate, not just CLI tool"** — the trust pipeline must run |
| 185 | + in CI, not just locally, so OPSM ships as a GitHub Actions step as well as a CLI |
| 186 | +- **"Registry adapters must be hot-reloadable"** — this is why the adapter interface |
| 187 | + is a clean function triple; new registries do not require recompile |
| 188 | +- **"Version schemes are not comparable"** — the normalisation layer is non-trivial; |
| 189 | + PEP 440 post/dev releases have no Semver equivalent and must be handled as |
| 190 | + out-of-band metadata |
| 191 | +- **"Minority languages matter"** — the explicit decision that OPSM will never say |
| 192 | + "your language is too small to matter"; HAR is the institutional commitment to that |
| 193 | +- **"Trust is not binary"** — oikos sustainability score is NOT a block/allow gate; |
| 194 | + it is advisory metadata surfaced to the developer; paternalistic blocking would |
| 195 | + reduce adoption |
| 196 | +- **"Post-quantum NOW, not later"** — harvest-now-decrypt-later means today's signed |
| 197 | + packages will be forgeable in ~10 years if only classical signatures are used; |
| 198 | + Dilithium5 hybrid is the hedge |
| 199 | + |
| 200 | +--- |
| 201 | + |
| 202 | +*Route to CHATGPT for §1/§2/§8 prose. Route to CLAUDE for §3/§5 formalism and §4 draft.* |
| 203 | +*Zenodo: create new deposit under hyperpolymath community, select CC-BY-4.0 for paper text.* |
| 204 | +*arXiv: cs.SE primary, cs.CR secondary (supply-chain security angle).* |
0 commit comments