Skip to content

Project Charter

This charter is the canonical statement of intent for schoolbus.

Identity

schoolbus is a pedagogical inspection library for machine communication protocols. It exists to make the communication systems behind vehicles, aircraft, industrial machines, marine systems, spacecraft, sensors, ECUs, embedded controllers, avionics computers, field devices, and safety-critical systems legible to capable software and systems engineers.

The project treats machine protocols as observable systems, executable artifacts, engineering tradeoffs, timing systems, authority structures, and operational interfaces.

The project is intentionally:

  • pedagogical
  • inspection-oriented
  • source-grounded
  • simulation-friendly
  • explanation-heavy
  • explicit about uncertainty and simplification

The project is intentionally not:

  • a production-certified stack
  • a standards-conformance suite
  • a vendor SDK replacement
  • a vehicle exploitation toolkit
  • a reverse-engineering piracy archive
  • a complete implementation of every protocol

Design Philosophy

Concrete first. Abstractions emerge from repeated implementation pressure.

Prefer explicit data models, readable field extraction, inspectable bit operations, deterministic examples, transparent simplifications, and educational clarity.

Avoid ceremonial architecture, speculative abstraction, universal protocol inheritance trees, enterprise-framework aesthetics, excessive plugin systems, and early over-generalization.

The ideal interaction pattern is:

thing = Thing.from_raw(...)
thing.show_fields()
thing.explain()

Not:

GlobalFactoryRegistryProvider(...)

Pedagogical Ladder

The project is organized around this conceptual ladder:

flowchart TD bits["Bits"] --> fields["Fields"] fields --> units["Units"] units --> containers["Frames, words, or sentences"] containers --> messages["Messages or transactions"] messages --> signals["Signals"] signals --> observations["Observations"] observations --> state["State"] state --> inference["Inference"]

All major protocol work should map onto this ladder where possible. Not every protocol uses every layer.

Examples:

Protocol Dominant layer
UART framing
CAN frame transport
J1939 semantic message vocabulary
ARINC 429 labeled word transport
MIL-STD-1553 command/response transactions
UDS interrogative diagnostics
DBC semantic description layer
MDF/MF4 capture/log persistence

Protocol Taxonomy

Documentation and code should distinguish these categories clearly:

Category Examples
Electrical interface RS-232, RS-485
Physical layer CAN PHY, 100BASE-T1
Framing layer UART
Data bus CAN, ARINC 429
Transaction protocol MIL-STD-1553
Diagnostic protocol UDS
Semantic vocabulary J1939
Description format DBC
Capture format MDF/MF4
Observer/inference layer freshness and state logic

Do not present electrical signaling, framing, semantic dictionaries, capture formats, and full application protocols as if they were the same kind of object.

Source Policy

Public documentation must stand on public source metadata, official public material, tooling references, and clearly marked synthetic artifacts. Private research notes are not shipped and cannot serve as reader-verifiable authority.

The repository may include metadata, canonical URLs, public summaries, public tutorials, open-source implementation references, generated examples, and synthetic traces.

The repository must not include pirated standards PDFs, scraped proprietary content, or vendor IP copied into source code, tests, docs, notebooks, or samples.

Pedagogical simplifications must be named in comments, docs, or explanations when they could otherwise be mistaken for full conformance.

Explainability Contract

Every major protocol object should implement:

explain() -> str

Every major protocol object should also expose important decoded values through:

show_fields()

Good explanations teach, contextualize, identify assumptions, avoid unexplained acronyms, and make uncertainty visible.

Bad:

PGN 61444, SPN 190.

Good:

This J1939 identifier carries EEC1 (Electronic Engine Controller 1), which commonly
includes engine speed information.

Safety Policy

schoolbus is educational. It should avoid unsafe operational attack tooling, real exploit walkthroughs, bypass tooling, unauthorized ECU manipulation guidance, and examples that transmit against real vehicles, aircraft, vessels, industrial systems, or embedded targets.

Security discussion should focus on trust assumptions, observability, stale or impossible state, replay concepts, protocol-era threat models, and synthetic lab examples.

Documentation And Testing Expectations

Documentation is a first-class deliverable. It should optimize for readability, rigor, explicit assumptions, educational sequencing, and executable examples.

Tests should verify field extraction, bit ordering, parity, checksums, arbitration behavior, transaction decoding, explainability output stability, documentation examples, atlas loading, and sample-trace decoding where those surfaces exist.

Extensibility Rules

Protocol packages should expose transport units, field extraction, encoding or decoding where appropriate, explainability, toy simulation, offline sample fixtures, and passive observer examples.

Protocols should remain mostly independent. Avoid forcing incompatible protocols into identical interfaces. Do not introduce UniversalProtocol, AbstractTransportLayerFactory, GenericBusManager, or giant plugin registries until repeated implementation pressure justifies them.

Shared contracts should be structural capabilities, not mandatory base classes. The protocol catalog may advertise capabilities such as explainability, field inspection, arbitration, framing, transactions, signals, and observations. Tutorial factories should create deterministic synthetic examples for learning, not auto-detect or decode arbitrary operational traffic.