flowrs-engine/crates/flowrs-iface/PROVENANCE.md
flowRS fd958c0547 flowRS engine, cut from flowRS 3451b065
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 19:04:39 -05:00

61 lines
4.8 KiB
Markdown

# Provenance of flowrs-iface
Everything here is written for flowRS (Apache-2.0) except the parts below, which are Rust
ports of permissively licensed reference code, made under the flowRS porting policy (port the
algorithm, keep the notice, record it here).
## Ports
| flowRS file | Ported from | Licence |
|---|---|---|
| `src/ros/rihs.rs` | `rosidl_generator_type_description/__init__.py` 5.2.1 (`ros2/rosidl`), as shipped in `ros-lyrical-rosidl-generator-type-description` 5.2.1: the field type table, the service/action derivation, the reference closure and `calculate_type_hash` | Apache-2.0, Copyright 2023 Open Source Robotics Foundation, Inc. |
| `src/ros/msg.rs`, `src/ros/mod.rs` | `rosidl_adapter/parser.py` 5.2.1 (`ros2/rosidl`): `parse_message_string`, `extract_file_level_comments`, `process_comments` (the `[unit]` rule), `parse_value_string`, `parse_primitive_value_string`, `parse_string_array_value_string`, `find_matching_end_quote`, the name patterns; and `rosidl_adapter/msg/__init__.py` (the `.msg` → IDL type map: `char` → `uint8`, `byte` → `octet`) | Apache-2.0, Copyright 2014-2018 Open Source Robotics Foundation, Inc. |
| `src/ros/msg.rs`, `src/ros/rihs.rs` | `rosidl_parser/definition.py` 5.2.1 (`ros2/rosidl`): the `Service` event message and the `Action` derived types and suffixes | Apache-2.0, Copyright Open Source Robotics Foundation, Inc. |
| `src/ros/idl.rs` | Reads the IDL that `rosidl_adapter/resource/*.idl.em` generates (the placeholder member, `<Struct>_Constants` modules, array typedefs, the tuple-repr defaults); the parser itself is written for flowRS | Apache-2.0 (the templates it reads the output of) |
The Apache License 2.0 text is the repository's `LICENSE`. Python's `json.dumps` escaping
(`ensure_ascii`) and `textwrap.dedent` behaviour are reimplemented from their documented
behaviour, not ported.
## Written from specifications, not ported
| flowRS file | From | Note |
|---|---|---|
| `src/mavlink/crc.rs` | the MAVLink serialization guide (mavlink.io, "CRC_EXTRA calculation") and the X.25 CRC (CRC-16/MCRF4XX) | No pymavlink or mavgen code (LGPLv3) was read for it; pymavlink is only run out of process as the test oracle behind `fixtures/mavlink/crc_extra.tsv` |
| `src/mavlink/mod.rs`, `src/mavlink/units.rs` | the MAVLink XML schema documentation (mavlink.io, "Message Definitions") and the MIT XML itself | The unit table is flowRS's: each MAVLink name mapped to a UCUM code written as UCUM publishes it, and a scale |
| `src/uorb.rs` | PX4's uORB documentation (docs.px4.io, "uORB Message Documentation") | — |
| `src/dbc/` | the DBC grammar as `can-dbc` (MIT OR Apache-2.0) parses it, which flowRS links for reading | The writer is flowRS's |
| `src/proto.rs` | the protobuf language specification (protobuf.dev) | — |
| `src/arrow.rs` | Arrow's canonical extension types (`arrow.fixed_shape_tensor`, arrow.apache.org) | Built on `arrow-schema` (Apache-2.0) |
## Data
`fixtures/ros-lyrical` holds unmodified interface files from 23 ROS 2 Lyrical packages: 21
under Apache-2.0 and 2 (`tf2_msgs`, `unique_identifier_msgs`) under BSD-3-Clause. Sources,
digests and per-package licences: `fixtures/ros-lyrical/README.md` and `MANIFEST.tsv`.
`fixtures/mavlink` (MIT), `fixtures/dbc` (MIT, comma.ai opendbc), `fixtures/uorb`
(BSD-3-Clause, PX4) and `fixtures/px4_msgs` (BSD-3-Clause, PX4's px4_msgs at two release
branches, what `src/uorb/skew.rs` is tested against) hold small unmodified files of the corpora the projections are measured
on; each directory's `README.md`, `MANIFEST.tsv` and `LICENSE` give sources, digests and
licence texts. `fixtures/mavlink/units.tsv` and `fixtures/mavlink/crc_extra.tsv` are numbers
derived from the pinned MAVLink corpus (by `tools/projections_corpus.py units`, and by
pymavlink run out of process through `tools/mavlink_crc_oracle.py`). The full corpora are
pinned in `tests/corpus/pins/` and fetched on demand.
## Units
`src/unit.rs` ships no UCUM table and no QUDT data. It parses UCUM's case-sensitive grammar
and resolves the atoms it knows against a table of SI dimensions and conversion factors
written for flowRS, keyed by the UCUM code that names each unit. flowRS-only units are in
the `flowrs:` namespace, never minted as UCUM codes. A model may carry a QUDT IRI a user
supplies. See the repository `NOTICE`.
## Dependencies added for the projections
| Crate | Licence | Why |
|---|---|---|
| `roxmltree` 0.21 | MIT OR Apache-2.0 | MAVLink XML, no_std |
| `can-dbc` 10.0.0 (feature `dbc`), with `can-dbc-pest` 0.8, `pest` 2.9 | MIT OR Apache-2.0 | DBC parsing |
| `arrow-schema` 60 (feature `arrow`; already in the workspace) | Apache-2.0 | Arrow schemas |
| `protox` 0.10, `prost-reflect` 0.16 (dev only), with `protox-parse`, `logos`, `prost-types`, `miette`, `stacker`, `psm` | MIT OR Apache-2.0; `prost-types` and `miette` Apache-2.0 | The tests compile every protobuf projection and read its options back |