COOLJAPAN OÜ / OxiAutoRS
OxiAutoRS — AUTOSAR Classic + Adaptive

Fifteen proofs. Eleven solved. Four unsolved, and named.

A Pure Rust AUTOSAR Classic and Adaptive platform in one workspace — RTE, VFB, OSEK OS, MCAL, BSW, ara::com, ara::crypto, UDS, SOME/IP and Uptane OTA. Every harness below carries either the time a solver took to discharge it or the memory ceiling that stopped it. Six earlier harnesses carried neither, because they proved nothing; in September those were deleted rather than counted.

33 crates 773,587 lines Classic + Adaptive Kani 0.67 · CBMC 6.8 Not ASIL-D certified
Proof runoxiautors-formal · kani 0.67.0 · cbmc 6.8.0
ItemCountStatus
Harnesses claiming a solve we never ran0Purged
Harnesses that cannot fail0All guarded
Proof bounds left in a footnote0All printed
Unbounded CBMC loop unwinds0All bounded
ASIL-D certificates held0None
Harnesses with a measured solve0of 15 authored
Fifteen harnesses are authored in oxiautors-formal. Eleven have a VERIFICATION:- SUCCESSFUL line this machine actually produced, with the solve time printed below wherever one was measured. Four do not, and are listed as unsolved rather than as pending. Seventeen guard tests mutate each property’s oracle and assert the property then fails — a proof that cannot fail proves nothing. Bounds printed
Clause 01Landscape

Four platforms, one certificate, and nobody doing formal verification.

This is our own competitive table, reproduced with the row that goes against us left in. Three of the four axes favour Rust. One does not, and it is the one a Tier 1 will ask about first.

PlatformLanguageMemory safetyISO 26262 ASIL-DFormal verificationClassic + Adaptive
AUTOSAR ClassicCManualEstablishedNoneClassic only
Adaptive APC++RAII onlyPartialNoneAdaptive only
Vector MICROSARC / C++ManualCertifiedNoneSeparate products
OxiAutoRSRustCompile-timeNot certified11 solved Kani harnesses of 15; 5 kernel-checked lemmasOne workspace, partial spec coverage

MICROSAR is certified and OxiAutoRS is not. There is no version of that sentence that helps us, so it is at the top of the page instead of the bottom. What the table does show is that the formal-verification column is empty for all three incumbents, and that Classic and Adaptive being separate products is a procurement fact rather than a technical necessity. Whether those two things outweigh a certificate is your decision, and it depends entirely on where you are in the programme.

Note what our own cell does not say. It does not say fifteen harnesses; it says the eleven that a solver actually discharged. The other four are named in the proof section, with the memory ceiling that killed each one.

Clause 02Platform

What is in the thirty-three crates.

Classic and Adaptive against the same core types, in one workspace, with one build.

Classic platform
  • OSEK OS with timing protection and the priority-ceiling protocol
  • RTE and VFB routing
  • MCAL drivers: ADC, CAN, DIO, DMA, ETH, FlexRay, GPT, I²C, ICU, LIN, MCU, PORT, PWM, SPI, WDT
  • BSW COM and memory stacks
  • E2E Profiles
  • ARXML code generation
Adaptive platform
  • ara::com with SOME/IP service discovery, fuzzed at 10,000 proptest cases per property
  • ara::exec, ara::diag, ara::phm
  • ara::crypto with ML-KEM and ML-DSA under FIPS-203 and FIPS-204, plus a vehicle PKI over RustCrypto and rustls
  • ara::update with Uptane/TUF OTA, delta patching and A/B boot slots
Safety and vehicle
  • ISO 14229 UDS security access
  • ASIL decomposition algebra
  • Fault-tree cut-set analysis per NUREG-0492 and IEC 61025
  • 6-state EKF and UKF with NIS chi-square gating (χ²₂ at 99% = 9.21)
  • Perception, planning, powertrain and vehicle-dynamics crates
Clause 03Proof

Every harness, and exactly what it covers.

Formal verification is the easiest thing in this industry to imply and the hardest to check. Fifteen harnesses are authored in oxiautors-formal. Every row below is one of exactly two things and nothing in between: a solve this project’s machine actually performed, or an honest “authored, not solved here.” Where a run was timed, the wall time is on the row; the two E2E harnesses were discharged in an earlier round and carry a verdict without a re-measured time. Machine: 24 GB shared, CBMC capped at 7 GiB resident and 40 minutes per run.

Solved — 11 harnesses with a measured VERIFICATION:- SUCCESSFUL

WDT-1proof_wdt_deadline_checkpoint_is_exact  · 0.35 sDrives the shipped WatchdogTimer, not a model of one. Symbolic tick values bounded to 64 ns. Stated as an iff, so a one-sided implementation cannot satisfy it.
WDT-2proof_wdt_supervise_detects_a_hung_task  · 0.26 sSame shipped timer, same bound. Supervision reports a hung task exactly when one is hung.
WDT-3proof_wdt_is_expired_agrees_with_supervise  · 0.17 sThe two public queries can never disagree about the same timer state.
WDT-4proof_wdt_supervise_never_rearms  · 0.32 sSupervision is observation only. It cannot silently clear a missed deadline.
WDT-5proof_wdt_logical_order_is_enforced  · 0.49 sCheckpoint ordering holds over every symbolic tick sequence within the bound.
MPU-1proof_mpu_region_validate_programmability  · 0.23 sMpuRegion::validate accepts a descriptor iff the hardware could actually program it — size a power of two, base aligned to it.
MPU-2proof_add_validated_region_rejects_unprogrammable  · 0.19 sNo unprogrammable region survives admission, in either order of the validate/add pair.
MPU-3proof_partition_disjoint_isolation  · 6.60 sThe interval lemma, and labelled as exactly that. It carries no ASIL claim — the previous version of this module claimed one its own types could not support, and that sentence is gone.
MPU-4proof_partition_table_insert_rejects_overlap  · 833.5 s, peak 6.6 GB, --solver minisatThe real freedom-from-interference result. PartitionTable::insert rejects a candidate iff it overlaps an admitted partition — both directions, against an independently written oracle, with every partition’s ASIL left symbolic over Qm..=D. It asserts the strictly stronger “no admitted pair shares an address,” of which the ASIL-D case is a subset.
E2E-1verify_e2e_profile1_no_overflowBounded. 8-byte buffer, length 2 to 8, offset 0 to 4, offset + length ≤ 8, kani::unwind(9) on the CRC loop.
E2E-2verify_e2e_profile2_no_overflowBounded. Same envelope, plus a symbolic 16-entry data_id_list.

Authored, not solved on this machine — 4 harnesses

MPU-5proof_partition_table_asil_freedom_from_interference  · not solvedPeaked at 7,230 MB, then at 7,172 MB on a halved window; killed by the 7 GiB budget both times. The property itself is not left open — MPU-4 above asserts a strictly stronger statement over an input space that contains every ASIL-D-versus-lower pairing. This harness states the corollary explicitly for a certification reader; a verifier does not need it.
OSEK-1proof_pcp_priority_law_and_preemption  · not solvedPriority-ceiling law and preemption over a symbolic four-action trace.
OSEK-2proof_pcp_no_priority_inversion  · not solvedUnlike the harness it replaced, this one has resources, acquire/release and blocking in the model at all.
OSEK-3proof_pcp_deadlock_free  · not solvedKilled at 7,219 MB after Runtime Symex 574 s, 4.57 M program steps, 145,819 VCCs. The bottleneck is program size, not input domain: slice-iterator walks in the state observer, which CBMC expands with a pointer check per iteration. Two fixes are identified and untried.

The three OSEK harnesses call the same trace runner and differ only in which counters they assert, so their solve costs are near-identical. Solving one would be a strong indication about the others and not a verification of them. This page will not blur those two.

Kernel-checked lemmas — oxilean

OL-1asil_d_decompositionKernel-checked and attested.
OL-2sr_port_round_tripKernel-checked and attested. Cross-checked against the shipping SenderReceiverPort.
OL-3vfb_routing_deterministicKernel-checked and attested. Cross-checked against the shipping VfbRouter.
OL-4cs_request_response_livenessKernel-checked and attested.
OL-5e2e_p4_integrity  · no longer blockedThis page previously listed it as blocked, and it was: oxilean 0.1.2 reduced a Nat bit-operation only when both arguments were already literals, so the CRC fold was stuck at its first step. 0.1.3 lifted that, and the kernel now reduces the full 96-step CRC32P4 fold (poly 0xF4ACFB13 applied reflected) over the CRC-covered bytes of a protected E2E frame. Discharged at a concrete frame — a closed rfl — not universally quantified over payloads. The ∀-form is still not dischargeable, and the module says so and demonstrates it against the live kernel.

Here is what changed since the last version of this page, which said nine of nine passing. An adversarial review went back through those nine and found that six of them proved nothing. Three drove a WatchdogState enum that exists nowhere in the product — the shipped crate exposes WatchdogTimer and SupervisionMode and never that type — and two of those three were not even symbolic. The three OSEK harnesses were tautologies: one asked the solver to prove ¬(A ∧ B) inside a branch that had already falsified A; one fed a three-task array whose last two entries were ready = false; one computed the exact predicate it then assumed and asserted. There was no resource, no acquire, no release and no blocking anywhere in that file, so “no priority inversion” and “no deadlock” were not being modelled at all. All six are deleted.

A second review, the same day, found something worse: some of the replacement source files carried solve results this machine had never produced. A comment above the OSEK harnesses read “MiniSat solves them well inside the budget.” An independent run was killed at 7,219 MB. That comment is now a SOLVE STATUS: NOT SOLVED line naming the measurement that refuted it. Two documented “falsifying mutations” also turned out not to falsify anything, and were replaced with mutations that do — each one pinned by a guard test that runs the harness’s own property against the mutated oracle and asserts it fails. All fifteen harnesses now carry one.

The OSEK model’s correspondence to the shipping kernel used to be prose, which meant a kernel change could silently invalidate the harnesses. It is now executable: oxiautors-bsw-os is a dev-dependency of the formal crate, and every trace of the bounded search is replayed through the model and through the real Scheduler and resource::{get_resource, release_resource}, comparing the verdict, the error class, the running task, every dynamic priority, every held-resource LIFO and the ready-queue occupancy after every step — 243 configurations × 6,561 four-action traces. Within that bounded space the priority-ceiling properties are statements about the shipping kernel, not only about a model of it. It does not discharge the three unsolved harnesses, and it is bounded exactly as its own constants say.

oxilean is an in-house, homegrown pure-Rust prover and kernel for the Calculus of Inductive Constructions. It is not the Lean 4 toolchain and has no relationship to mathlib; lean and lake are not installed anywhere in this project. proof_certificate.rs renders certificate text — it is a document generator, not an attestation service. Sixteen further Kani harnesses live in oxiautors-core, oxiautors-rte and oxiautors-fusa; this project’s measurement log records no CBMC solve for any of them, so none is counted above.

Clause 04Status

Engineering prototype. Read this before the price.

Nothing in this section contradicts the section above. The eleven solves are real and the four failures to solve are real. What does not exist is anyone official who has agreed with us.

11 of 15 Kani harnesses in oxiautors-formal, run locally with CBMC 6.8.0Measured solve, times published
3 OSEK priority-ceiling harnesses + 1 ASIL partition harnessNot solved. Killed by a 7 GiB memory budget.
6 harnesses removed in the September reviewDeleted. They proved nothing.
5 of 5 oxilean lemmasKernel-checked and attested
e2e_p4_integrity, universally quantified over payloadsConcrete frame only. ∀-form not dischargeable.
OSEK model vs. the shipping bsw-os kernelCross-checked, 243 × 6,561 traces
Kani in CINot wired. cargo kani setup is a local step.
16 further Kani harnesses in core, rte and fusaNo solve recorded. Not counted anywhere above.
ISO 26262 ASIL-D certification by any bodyNone
TÜV or equivalent sign-offNone
Qualified AURIX / TC4x hardware, HighTec ASIL-D Rust toolchainNot integrated
Formally-verified RTE, RTE deadlock freedomRoadmap. Not results.
AUTOSAR specification coveragePartial. Assess per crate.

Four crates in the workspace are placeholders and should not be counted as capability by anyone evaluating this: oxiautors-cloud, oxiautors-python, oxiautors-twin and oxiautors-hil are between 36 and 43 lines each — unchanged by the September work. They are in the crate list because removing them would be a different kind of dishonesty. Also note that the kani-verifier crate in Cargo.lock is the crates.io shim, a dev-dependency of oxiautors-formal; the Kani compiler and CBMC themselves come from cargo kani setup, and a fresh CI runner has to repeat that. And cargo kani -p oxiautors-formal with no filter is no longer a sub-30-minute job, because one solved harness alone costs 833 seconds.

Clause 05Licence

Priced in public. The incumbent is not.

Vector quotes MICROSAR on application. That means you cannot find out whether an AUTOSAR platform is affordable without first telling a competitor's sales team what you are building. Annual terms, per vehicle programme, invoiced once.

Evaluation
US$5,00030 days · full source

Payable in advance. Source access within one business day of receipt.

Credited in full against a Platform or Programme licence. Complete workspace, all verification artefacts, and the status section above in full detail. Non-commercial evaluation use only. No sales contact unless you ask for it.

Platform
US$40,000per year · one vehicle programme

Source licence for one vehicle programme, unlimited ECUs and unlimited units. Verification artefacts regenerated per release: the Kani run log with its bounds, the oxilean attestations, and a CycloneDX SBOM. Five business day response.

Programme
US$110,000per year · all programmes

All vehicle programmes, a named engineer, participation in your ISO 26262 work products, and support for the version you ship for the vehicle lifetime. Source escrow on request.

Priced per vehicle programme — not per ECU, not per unit, not per seat. No royalty on vehicles shipped, no runtime fee, no audit clause. The number is on this page because the incumbent's is not, and because you should be able to work out whether this is affordable before you tell anyone what you are building. What the number does not buy is a certificate. Read the status section again before you decide it is a bargain.

Clause 06Provenance

The proofs were the defect. We went looking, and we found it in our own work.

The other products in this ecosystem close this page with a stack tree — nine years of replacing C, one layer at a time, until there was nothing foreign underneath. OxiAutoRS contains almost none of that stack. It takes one crate from the ecosystem, oxilean, and otherwise stands on RustCrypto and rustls. The RTE, the VFB, the OSEK scheduler with its timing protection and priority ceilings, the MCAL layer, the E2E profiles and the whole ara:: stack were written in this workspace against the AUTOSAR documents.

So the provenance claim here is not about depth. It is about what a supplier does when the verification turns out to be the thing that is broken. In July we installed Kani and found two harnesses that had never executed at all — one orphaned from the module tree, one with an unbounded unwind that ran forever. We fixed those and published nine of nine. In September we went back and asked a harder question: not do they run, but do they prove anything. Six did not. They are deleted. Then we asked the same question of the replacements, and found source comments asserting solve results no machine here had produced. Those are corrected, and the measurements that refute them are quoted in the source.

Every one of those defects was in our verification rather than in the product, and every one was invisible for as long as nobody adversarially reviewed it. That is the entire argument for this page existing in this form.

OxiAutoRS 33 crates · 284,416 lines of Rust ├─ RTE · VFB · SWC written here, from AUTOSAR Classic ├─ OSEK OS · MCAL · BSW written here — timing protection, priority ceiling ├─ ara::com/exec/diag/crypto/phm/update written here, from Adaptive ├─ E2E profiles · UDS · SOME/IP written here, from the specifications └─ reused ├─ OxiLean in-house CIC kernel — oxiautors-formal only │ └─ OxiZ SMT, pulled in by OxiLean, not called directly ├─ RustCrypto AES-GCM, SHA-2, P-256, ML-KEM, ML-DSA └─ rustls TLS for ara::com └─ Rust core. #![no_std] on the L1 and L2 layers.

That is why solve times are printed on this page instead of a claim of formal verification. A bounded proof that tells you its bounds — eight-byte buffers, sixty-four-nanosecond windows, four-action traces — is worth more to a safety case than an unbounded claim that does not. And a harness listed as unsolved is worth more than one listed as passing on the strength of a comment nobody checked.

Most of the ecosystem is public on GitHub under Apache-2.0. The AUTOSAR platform is the part we licence.

Clause 07Next

Send us the row that stops you.

Most conversations about this platform end on one line of the status section — usually the certification row, sometimes the MCAL coverage for a specific part, occasionally the four harnesses that do not solve. Send that line and the ECU you have in mind. You will get back what is implemented for that target, what is not, and whether the honest answer is that you should buy MICROSAR this programme and talk to us about the next one. One business day, no qualification call.