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

4.8 KiB

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