# 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, `_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 |