Booil Jung

Fast DDS의 Rust 지원 래퍼 개발

본 보고서의 첫 번째 장에서는 eProsima Fast DDS를 위한 고품질 Rust 래퍼 개발이 단순한 기술적 시도를 넘어, 현대의 안전 필수(Safety-Critical) 시스템 소프트웨어 개발 패러다임 변화에 대응하는 전략적 과제임을 논증한다. 이는 분산 시스템의 핵심 요소인 DDS의 위상과 시스템 프로그래밍의 미래로 부상한 Rust의 가치를 결합하여, 차세대 시스템의 안정성과 생산성을 극대화하기 위한 필연적 과정이다.

데이터 분산 서비스(Data Distribution Service, DDS)는 객체 관리 그룹(Object Management Group, OMG)이 정의한 실시간 시스템을 위한 데이터 중심의 발행-구독(Publish-Subscribe) 통신 프로토콜 표준이다.1 DDS의 핵심 아키텍처는 예측 가능하고, 확장 가능하며, 신뢰성 있는 정보 분배를 목표로 설계되었다.1 이러한 특성 덕분에 DDS는 다양한 미션 크리티컬 산업 분야에서 중추적인 역할을 수행하고 있으며, 특히 eProsima의 Fast DDS는 그 선두에 있다.

Fast DDS의 전략적 중요성은 주요 고성장 생태계에서의 표준 채택 현황을 통해 명확히 드러난다.

이러한 사실들은 Fast DDS가 단순히 여러 DDS 구현체 중 하나가 아니라, 로보틱스와 자동차라는 가장 중요하고 빠르게 성장하는 실시간 시스템 분야에서 사실상의 표준 통신 패브릭(fabric)으로 자리 잡았음을 보여준다. 이 강력한 네트워크 효과는 새로운 기술이나 프로그래밍 언어가 해당 분야에 진입하기 위한 전제 조건을 만든다. 즉, Rust가 이들 분야에서 성공적으로 채택되기 위해서는, 지배적인 DDS 구현체인 Fast DDS와의 최상급 통합(first-class integration)이 필수적이다. 따라서 fast-dds-rs 래퍼 개발은 Rust의 생태계를 이들 핵심 산업으로 확장하기 위한 매우 중요한 기반 기술 확보 프로젝트라 할 수 있다. 이것은 DDS를 대체하는 것이 아니라, 이미 산업 표준으로 자리 잡은 통신 인프라 위에서 더 안전한 애플리케이션을 구축할 수 있도록 지원하는 것이다.

Rust는 시스템 프로그래밍 언어의 오랜 난제였던 성능과 안전성 사이의 트레이드오프(trade-off)를 해결하며 등장했다. C++와 동등한 수준의 성능을 제공하면서도, 언어 차원에서 메모리 안전성을 보장하는 Rust의 특징은 DDS가 사용되는 안전 필수 시스템의 요구사항과 정확히 일치한다.

DDS가 주로 사용되는 로보틱스 및 자동차 산업의 핵심 과제는 신뢰성, 보안, 그리고 실시간 성능이다. Microsoft와 Google의 보고에 따르면, 대규모 C++ 코드베이스에서 발생하는 심각한 보안 취약점의 약 70%가 메모리 안전성 문제에서 기인한다.17 Rust의 설계 철학은 바로 이 가장 큰 실패의 원인을 직접적으로 겨냥한다. 따라서 Rust를 채택하는 것은 단순히 개발자의 선호도를 넘어, 복잡한 소프트웨어 프로젝트의 리스크를 근본적으로 줄이는 전략적 엔지니어링 결정이다. Rust의 가파른 학습 곡선이라는 비용 21은, 디버깅 시간의 획기적인 단축과 메모리 문제로 인한 치명적인 런타임 실패 가능성의 감소라는 더 큰 이익으로 상쇄된다.

Fast DDS는 매우 견고하게 설계된 C++ 라이브러리이지만, C++ 언어 자체의 한계로부터 완전히 자유로울 수는 없다. 실제로 CVE(Common Vulnerabilities and Exposures) 데이터베이스를 분석해 보면, Fast DDS를 포함한 여러 DDS 구현체에서 힙 오버플로, 잘못된 메모리 해제(bad-free), 악의적인 패킷으로 인한 프로세스 충돌 등 심각한 메모리 관련 취약점들이 보고된 바 있다.23 이는 정확히 Rust가 방지하도록 설계된 종류의 오류들이다.

DDS의 기반이 되는 RTPS(Real-Time Publish-Subscribe) 프로토콜 계층 또한 취약점의 원인이 될 수 있다. 예를 들어, Wireshark의 RTPS 분석기에서 메모리 누수 취약점이 발견된 사례가 있다.25 Rust 래퍼가 C++ 구현 자체를 수정할 수는 없지만, C++ 라이브러리와 상호작용하는 애플리케이션 코드를 메모리 안전하게 만들어 전체적인 공격 표면(attack surface)을 줄일 수 있다.

DDS는 인증 및 암호화를 위한 보안 플러그인을 제공하지만 1, 많은 취약점은 인증되지 않은 디스커버리(discovery) 패킷을 파싱하는 과정에서 발생한다. Rust의 강력한 오류 처리와 메모리 안전성은 이러한 종류의 공격에 대해 애플리케이션 계층을 훨씬 더 견고하게 만든다.

이러한 분석은 Rust 래퍼가 일종의 ‘안전 경계(safety boundary)’ 또는 ‘방화벽’ 역할을 할 수 있음을 시사한다. 만약 기반 C++ 라이브러리에 취약점이 존재하더라도, 래퍼를 통해 구축된 Rust 애플리케이션은 Rust의 대여 검사기(borrow checker)에 의해 보호된다. C++ 계층의 메모리 오염이 Rust 애플리케이션의 안전한(safe) 컴포넌트 메모리를 임의로 손상시키는 것을 방지할 수 있다. 이 경우, unsafe 키워드가 사용되는 FFI(Foreign Function Interface) 경계만이 감사가 필요한 핵심 영역이 되며, 이는 C++로 작성된 전체 애플리케이션을 감사하는 것에 비해 범위가 대폭 축소된다.

결론적으로, fast-dds-rs 래퍼 개발의 가장 중요한 전략적 이점은 ‘리스크 완화’이다. 이를 통해 조직은 기능이 풍부하고 고도로 최적화된 산업 표준 미들웨어인 Fast DDS를 계속 활용하면서도, 애플리케이션 로직은 증명 가능한 메모리 안전성을 제공하는 언어로 구축할 수 있다. 이는 양쪽의 장점을 모두 취하는 최적의 전략이다.

Rust 래퍼를 설계하기에 앞서, 대상이 되는 C++ 라이브러리인 Fast DDS의 아키텍처와 설계 관용구(idiom)를 심층적으로 이해하는 것은 필수적이다. 이 장에서는 Fast DDS의 구조를 수직적으로 분해하여 각 계층의 역할과 핵심 컴포넌트들의 상호작용 방식을 분석한다.

Fast DDS는 명확하게 구분된 계층형 아키텍처를 채택하고 있다.27 각 계층은 특정 역할을 수행하며, 상위 계층은 하위 계층의 복잡성을 추상화한다.

Fast DDS가 명시적으로 두 개의 API 계층, 즉 사용 편의성을 위한 고수준 DDS 계층과 세밀한 제어를 위한 저수준 RTPS 계층을 제공한다는 점은 1 래퍼 설계에 직접적인 영향을 미친다. 포괄적인 Rust 래퍼 역시 이러한 이중 API 구조를 반영해야 한다. 고수준의 관용적인 Rust 래퍼는 DDS C++ API를 대상으로 하여 안전하고 편리한 사용 경험을 제공해야 한다. 동시에, 저수준의, 아마도 더 많은

unsafe 코드를 포함하는 모듈을 통해 RTPS API를 노출함으로써, DDS 추상화를 우회해야 하는 전문가 사용자의 요구를 충족시킬 수 있다. 이는 C++ 라이브러리의 설계 철학을 Rust 래퍼에서도 계승하는 것이다.

Fast DDS의 API는 여러 핵심 엔티티들의 상호작용을 통해 구성된다. 이들 엔티티의 생성, 소멸, 그리고 소유권 관계를 이해하는 것이 래퍼 설계의 핵심이다.

C++ API는 엄격한 팩토리 패턴을 따른다. PublisherDomainParticipant로부터 생성되고 29, DataWriterPublisher로부터 생성된다.30 소멸 과정 역시 이 계층 구조를 따른다. 예를 들어, DataWriterPublisher::delete_datawriter() 멤버 함수를 통해 소멸된다.30 이는 C++ 세계에서 엄격한 소유권 및 생명주기(lifetime) 계층 구조를 형성한다.

Rust 래퍼는 이 구조를 반드시 존중해야 한다. Rust의 DataWriter 래퍼 구조체는 단순히 C++ DataWriter 객체를 가리키는 포인터만 가질 수 없다. Drop 트레이트 구현 시 소멸 작업을 수행하기 위해 C++ Publisher 객체가 필요하므로, 자신을 생성한 Publisher 래퍼에 대한 참조(또는 Arc와 같은 스마트 포인터)를 함께 보유해야 한다. 이는 DataWriter들이 아직 살아있는 동안 Publisher가 먼저 소멸되는 것을 방지하기 위해 Rust의 생명주기 명시(lifetime annotation)를 신중하게 관리해야 함을 의미하며, 이는 Rust의 소유권 시스템이 빛을 발하는 완벽한 사용 사례이다.

Fast DDS의 동작은 몇 가지 핵심 메커니즘에 의해 구동된다. 이들을 Rust 환경으로 자연스럽게 이식하는 것이 래퍼의 주요 과제 중 하나이다.

C++ 개발 환경은 IDL 중심적이다. 그러나 Rust 래퍼를 사용하는 Rust 개발자는 Java 도구(Fast-DDS-Gen)를 실행하고 생성된 C++ 코드를 수동으로 통합하는 방식을 원하지 않을 것이다. 이는 상당한 사용성의 장벽을 만든다. 따라서 진정으로 관용적인 fast-dds-rs 래퍼는 타입 관리를 위한 자체적인 해결책을 제시해야 한다. 이는 다음과 같은 중요한 설계 결정으로 이어진다:

  1. serde 활용: RustDDS의 사례처럼 2, 사용자가

    #를 붙인 Rust 구조체를 정의하도록 하는 방식이다. 이 경우 래퍼는 Fast DDS의 동적 타입(DynamicTypes) 기능을 34 활용하여 런타임에 이 타입들을 등록하고 사용해야 한다. 이 방식은 유연하지만 성능 오버헤드가 발생할 수 있다.

  2. Rust 기반 IDL 코드 생성기 개발: 더 발전된 해결책은 IDL 파일을 파싱하여 필요한 #[repr(C)] Rust 구조체와 이를 Fast DDS의 정적 타입 시스템에 등록하기 위한 FFI 글루(glue) 코드를 자동으로 생성하는 proc-macrobuild.rs 스크립트를 만드는 것이다. 이는 최상의 성능과 C++ DDS 개발자에게 친숙한 작업 흐름을 제공하지만, 상당한 개발 노력이 필요하다.

Fast DDS는 리스너(listener) 클래스에 기반한 이벤트 주도 모델을 사용한다. 이 모델을 Rust의 현대적인 비동기 패러다임과 어떻게 조화시킬 것인지는 래퍼의 품질을 결정하는 중요한 요소이다.

이러한 C++의 리스너 패턴은 전형적인 객체 지향 콜백 메커니즘이다. 그러나 현대의 관용적인 Rust는 tokio와 같은 실행기(executor)를 사용하는 async/await 패러다임을 강력하게 선호한다. 리스너 인터페이스를 1대 1로 직접 래핑하는 것은 Rust 개발자에게 매우 이질적이며, 광범위한 Rust async 생태계와 통합하기도 어렵다.

따라서 고품질의 래퍼는 이러한 패러다임의 불일치를 해소해야 한다. 권장되는 패턴은 내부적으로 단 하나의 일반적인(generic) C++ 리스너를 구현하는 것이다. 이 리스너의 on_data_available 콜백은 사용자 코드를 직접 실행하는 대신, 수신된 데이터를 스레드 안전한 채널(예: tokio::mpsc::channel)을 통해 전송하는 역할만 한다. 그리고 Rust API는 이 채널의 수신단을 async Stream으로 노출한다. 이렇게 하면 사용자는 while let Some(sample) = stream.next().await와 같은 자연스럽고 관용적인 async 루프에서 새로운 메시지를 기다릴 수 있으며, 다른 async 작업과도 원활하게 통합할 수 있다. 이는 C++의 “푸시(push)” 모델(콜백)을 Rust의 “풀(pull)” 모델(Stream)로 변환하는 효과적인 방법이다.

이 장에서는 FFI(Foreign Function Interface)의 기술적 과제를 심층적으로 다룬다. 일반적인 원칙에서 나아가, Fast DDS와 같이 복잡한 C++ 라이브러리를 래핑할 때 발생하는 구체적이고 어려운 문제들을 분석한다.

Rust와 다른 언어 간의 상호운용성은 대부분 C 언어의 애플리케이션 바이너리 인터페이스(Application Binary Interface, ABI)를 공통분모로 삼는다. 이는 C++와 상호작용할 때도 기본적으로 적용되는 원칙이다.

FFI의 기준이 C ABI이지만, Fast DDS는 C++ 라이브러리이므로 C에는 없는 C++ 고유의 기능들을 처리해야 하는 복잡한 문제에 직면한다.

이러한 문제들은 Rust에서 복잡한 C++ API를 직접 래핑하는 것이 거의 불가능하거나 매우 불안정함을 시사한다. 이 문제를 해결하기 위한 가장 견고하고 일반적인 패턴은 별도의 C++ “심(shim)” 또는 “어댑터(adapter)” 계층을 만드는 것이다. 이 심 계층은 복잡한 C++ 기능들을 단순한 extern "C" 인터페이스로 변환하여 Rust가 쉽게 소비할 수 있도록 제공한다. 예를 들어, Rust가 DataWriter<MyType>이라는 템플릿 클래스를 직접 다루는 대신, 심 계층은 MyType_DataWriter_new(), MyType_DataWriter_write(), MyType_DataWriter_delete()와 같이 C와 호환되는 시그니처를 가진 함수들을 노출한다.

결론적으로, 래퍼 개발은 단순히 Rust 프로젝트가 아니라, 작지만 매우 중요한 C++ 컴포넌트를 포함하는 작업이 된다. 이 심 계층이 실질적인 FFI 경계가 되어, 복잡한 C++ 관용구를 bindgen이나 cxx와 같은 도구가 쉽게 처리할 수 있는 단순한 C 스타일 함수로 변환해준다. 이는 Rust 측의 복잡성을 크게 줄이고, 가장 어려운 FFI 로직을 작은 C++ 파일 안에 격리시키는 효과를 가져온다.

심 계층을 통해 인터페이스가 단순화되더라도, 두 언어 간의 관용적 차이를 메우기 위한 몇 가지 핵심 패턴이 필요하다.

불투명 포인터 역참조, void*로부터의 캐스팅, FFI 함수 호출 등 이 모든 패턴들은 unsafe 블록을 필요로 한다. 좋은 래퍼의 핵심 원칙은 이 모든 필수적인 unsafe 로직을 래퍼 크레이트 내부에 완벽하게 봉인하고, 최종 사용자에게는 100% 안전한(safe) 고수준 API만을 노출하는 것이다.

결국 래퍼의 주된 가치는 이러한 ‘불안전성의 캡슐화’에 있다. fast-dds-rs의 사용자는 일반적인 작업을 위해 unsafe 블록을 작성할 필요가 전혀 없어야 한다. 래퍼 개발자의 유지보수 부담은 자신이 사용한 unsafe 코드가 Rust와 Fast DDS의 모든 불변성을 위반하지 않고 건전(sound)하다는 것을 증명하는 데 있다. 이는 매우 높은 기준이며, miri와 같은 도구를 포함한 광범위한 테스트를 요구한다.52

이 장에서는 FFI 바인딩을 생성하고 구조화하는 방법에 대한 핵심적인 구현 전략을 집중적으로 논의한다. 이는 래퍼 개발의 성패를 좌우할 수 있는 가장 중요한 기술적 결정이다.

Rust 생태계에서는 FFI 바인딩을 두 개의 크레이트로 분리하는 것이 일반적인 관례이다.53

이러한 관심사의 분리는 다른 크레이트가 필요에 따라 원시 바인딩에 직접 의존할 수 있게 해준다. 또한 빌드 스크립트의 복잡성과 unsafe 코드를 격리시키며, 고수준 크레이트와 저수준 크레이트가 독립적으로 버전을 관리할 수 있게 한다.53

-sys 크레이트는 빌드 시 코드를 다운로드해서는 안 되며, 시스템에 설치된 라이브러리를 찾거나 벤더링된(vendored) 소스 코드를 직접 빌드해야 한다.55

pkg-config와 같은 도구를 사용하여 라이브러리를 찾고, 다른 빌드 스크립트가 사용할 수 있도록 헤더와 라이브러리 경로를 노출하는 것이 모범 사례이다.55

Fast DDS는 방대하고 복잡한 API를 가지고 있다. 순수한 bindgen 접근 방식은 안전하게 래핑하기에 엄청난 노력이 필요하다. 순수한 cxx 접근 방식은 Fast DDS API의 더 복잡한 부분(예: 커스텀 보안 플러그인, XTypes 인트로스펙션)에서 한계에 부딪힐 가능성이 높다. 따라서 어느 한 가지 도구만으로는 완벽한 해결책이 될 수 없다.

가장 실용적이고 효과적인 길은 하이브리드 전략을 채택하는 것이다.

  1. bindgen을 통한 기반 구축: fast-dds-sys 크레이트 내에서 bindgen을 사용하여 (필요시 C 심 계층을 통해) 전체 Fast DDS API에 대한 원시적이고 unsafe한 바인딩을 생성한다. 이는 완전한 기반을 제공하며 API의 어떤 부분도 접근 불가능하지 않도록 보장한다. 최종 사용자의 libclang 의존성을 피하기 위해 생성된 코드는 저장소에 커밋한다.
  2. cxx를 통한 안전한 코어 구축: 가장 일반적으로 사용되는 80%의 API(참여자 생성, 발행/구독, 기본 QoS, 데이터 쓰기/읽기 등)에 대해서는 cxx를 사용하여 안전하고 견고하며 검증된 브릿지를 구축한다. 이 cxx 브릿지는 고수준 fast-dds 크레이트 내에 위치하며, 내부적으로는 fast-dds-sysunsafe 함수를 호출한다.
  3. 점진적 기능 확장: 이 접근법을 통해 고수준 래퍼는 초기부터 핵심 기능에 대해 완전히 안전한 API를 노출할 수 있다. -sys 크레이트의 더 고급적이거나 복잡한 기능들은 시간이 지남에 따라 점진적으로 래핑하여 안전한 API로 노출하거나, 해당 기능이 필요한 전문가 사용자를 위해 unsafe 함수로 남겨둘 수 있다. 이는 초기 개발 속도, 장기적인 안전성, 그리고 API 완전성 사이의 균형을 맞추는 최적의 방법이다.

다음 표는 앞서 논의된 FFI 래퍼 생성 전략들의 장단점을 요약하여 하이브리드 전략의 타당성을 뒷받침한다.

특성 bindgen (순수) cxx (순수) 제안된 하이브리드 전략
안전성 보장 낮음 (모든 바인딩이 unsafe) 높음 (핵심 상호작용이 안전함) 높음 (핵심 API는 cxx로, 나머지는 캡슐화)
API 완전성 높음 (전체 API 표면 생성 가능) 중간 (지원되는 C++ 기능에 제한) 높음 (bindgen으로 전체 기반 확보)
초기 개발 노력 중간 (자동 생성되나, 래핑 필요) 높음 (수동 브릿지 정의 필요) 중간 (cxx로 시작, 점진적 확장)
유지보수 비용 높음 (수동 래퍼의 광범위한 업데이트) 낮음 (컴파일 시 검증) 중간 (코어는 낮고, 확장은 점진적)
빌드 시 의존성 높음 (libclang 필요) 또는 취약함 낮음 낮음 (미리 생성된 -sys 바인딩 사용)
관용적 API 지원 낮음 (수동으로 구현해야 함) 높음 (내장 타입 지원) 높음 (cxx의 장점 활용)
C++ 기능 지원 높음 (C 심을 통해 거의 모든 것 가능) 제한적 높음 (두 도구의 장점 결합)

이 표는 의사 결정자가 주요 도구 옵션 간의 트레이드오프를 명확하게 이해하는 데 도움을 준다. 제안된 하이브리드 전략이 어떻게 다른 두 접근 방식의 강점(예: cxx의 높은 안전성과 bindgen의 높은 완전성)을 결합하는지 보여줌으로써, 아키텍처 결정의 근거를 강력하게 제시한다.

이전 장들의 분석을 바탕으로, 이 장에서는 fast-dds-rs 래퍼 라이브러리에 대한 구체적인 설계를 제시한다. 이는 분석을 실행 가능한 계획으로 전환하는 과정이다.

Rust FFI 관례에 따라 프로젝트를 두 개의 크레이트로 구성한다.

C++ API의 패턴들을 Rust 개발자에게 친숙하고 안전한 형태로 변환하는 것이 핵심 목표이다.

사용자가 일반적인 Rust 구조체를 정의하여 DDS 통신에 원활하게 사용하는 것이 최종 목표이다. 이를 위해 다음과 같은 해결책을 제안한다.

다음 표는 API 설계의 “번역 가이드” 역할을 하며, 래퍼의 가치를 명확히 보여준다.

Fast DDS C++ 패턴 관용적 fast-dds-rs 패턴
ReturnCode_t create_datawriter(...) Publisher::create_datawriter(...) -> Result<DataWriter, Error>
DataReaderListener 클래스와 가상 on_data_available Subscriber::into_stream() -> impl Stream<Item = Sample>
DDS::DataReaderQos 구조체 직접 조작 QosPolicy::default().reliable().history(...) 빌더 패턴
writer->write(&sample) writer.write(sample)?
reader->take_next_sample(...) 루프 stream.next().await -> Option<Sample>

이 표는 “관용적 변환”이라는 추상적인 개념을 구체적이고 실체적인 예시로 보여줌으로써, 래퍼가 어떻게 복잡한 DDS 작업을 단순화하는지 명확하게 전달한다.

이 마지막 장에서는 앞선 모든 분석을 종합하여 전략적 결론을 도출하고, 프로젝트의 미래에 대한 전망을 제시한다.

4장에서 분석한 내용을 바탕으로, 하이브리드 전략을 공식적으로 권장한다. 즉, bindgen을 사용하여 포괄적인 fast-dds-sys 크레이트를 생성하되, 핵심 기능에 대해서는 fast-dds 크레이트 내에서 선별된 cxx 브릿지를 사용하여 주된 안전한 API를 구축하고, -sys 크레이트의 더 많은 unsafe 함수들을 시간이 지남에 따라 점진적으로 래핑하는 방식이다. 이는 안전성, 완전성, 그리고 관리 가능한 개발 노력 사이에서 최상의 균형을 제공한다.

거대한 프로젝트를 관리 가능한 단계로 나누어 제시한다.

성공적인 오픈소스 프로젝트는 코드뿐만 아니라 커뮤니티와 거버넌스에 의해서도 좌우된다.

궁극적으로, 이 래퍼의 성공은 긍정적인 피드백 루프를 만들 수 있다. 더 많은 로보틱스 개발자들이 Rust를 안전하고 쉽게 사용할 수 있게 되면, ROS 생태계 내에 더 많은 Rust 기반 도구와 라이브러리가 등장할 것이다. 이는 다시 Rust를 더욱 매력적인 선택지로 만들고, 잠재적으로 ROS 2에서 C++ 및 Python과 동등한 수준의 공식 지원 언어(Tier 1 language)로 격상시키는 계기가 될 수 있다. 이 래퍼에 대한 투자는 Rust 로보틱스 생태계 전체의 미래에 대한 투자이며, 그 성공은 수십억 달러 규모 산업의 주요 기술 전환을 가속화할 잠재력을 지니고 있다.

  1. eProsima Fast DDS, accessed July 8, 2025, https://fast-dds.docs.eprosima.com/
  2. Atostek/RustDDS: Rust implementation of Data Distribution … - GitHub, accessed July 8, 2025, https://github.com/Atostek/RustDDS
  3. The Importance of Robust Architecture in DDS Implementations and Best Practices, accessed July 8, 2025, https://www.eprosima.com/index.php/company-all/news/338-robust-architecture-dds-implementation
  4. eProsima/Fast-DDS: The most complete DDS - Proven: Plenty of success cases. Looking for commercial support? Contact info@eprosima.com - GitHub, accessed July 8, 2025, https://github.com/eProsima/Fast-DDS
  5. eProsima/Fast-DDS-docs: Documentation of eProsima Fast DDS. Looking for commercial support? Contact info@eprosima.com - GitHub, accessed July 8, 2025, https://github.com/eProsima/Fast-DDS-docs
  6. ROS 2 (Robot Operating System): overview and key points for robotics software Robotnik ®, accessed July 8, 2025, https://robotnik.eu/ros-2-robot-operating-system-overview-and-key-points-for-robotics-software/
  7. Rust for Robots, Part 1: Why Rust for Robotics? - Tangram Visions Blog, accessed July 8, 2025, https://www.tangramvision.com/blog/why-rust-for-robots
  8. DDS adopted into all AUTOSAR packages and platforms … - eeNews Europe, accessed July 8, 2025, https://www.eenewseurope.com/en/dds-adopted-into-all-autosar-packages-and-platforms/
  9. AUTOSAR and DDS: A Fresh Approach to Enabling Flexible Vehicle …, accessed July 8, 2025, https://www.rti.com/blog/fresh-approach-to-enabling-flexible-vehicle-architectures
  10. Connectivity at the Core: The Status of DDS in AUTOSAR - RTI, accessed July 8, 2025, https://www.rti.com/blog/status-of-dds-in-autosar
  11. The Real Backbone of SDVs Is Data : RTI on the Future of DDS, accessed July 8, 2025, https://www.autoelectronics.co.kr/article/articleView.asp?idx=6234
  12. Safety Mechanisms Using the DDS Middleware in Software-Defined Cars, accessed July 8, 2025, https://www.nxp.com/company/about-nxp/smarter-world-blog/BL-SAFETY-MECHANISMS
  13. Streamlining Zonal Architecture with DDS and TSN - RTI, accessed July 8, 2025, https://www.rti.com/blog/streamlining-zonal-architecture-with-dds-and-tsn
  14. Zonal-network architecture deployment in vehicle. - ResearchGate, accessed July 8, 2025, https://www.researchgate.net/figure/Zonal-network-architecture-deployment-in-vehicle_fig2_364504427
  15. Internet of Things - eProsima, accessed July 8, 2025, https://www.eprosima.com/middleware/sectors/internet-of-things
  16. Rust vs C++: Performance, Safety, and Use Cases Compared - CodePorting, accessed July 8, 2025, https://www.codeporting.com/blog/rust_vs_cpp_performance_safety_and_use_cases_compared
  17. Rust vs C++ for Embedded Systems: A Comprehensive Comparison (2025) - CPP Cat, accessed July 8, 2025, https://cppcat.com/rust-vs-c-for-embedded-systems/
  18. Rust Vs C++ Performance: When Speed Matters - BairesDev, accessed July 8, 2025, https://www.bairesdev.com/blog/when-speed-matters-comparing-rust-and-c/
  19. Rust vs C++ Performance - YouTube, accessed July 8, 2025, https://www.youtube.com/watch?v=WnMin9cf78g
  20. Interoperability - Rust API Guidelines, accessed July 8, 2025, https://rust-lang.github.io/api-guidelines/interoperability.html
  21. Building a ROS2 node in Rust! - Mike Likes Robots, accessed July 8, 2025, https://mikelikesrobots.github.io/blog/ros2-rust-node/
  22. Rust vs C/C++: is Rust better than C/C++ or is a “skill issue”? - Stack Overflow, accessed July 8, 2025, https://stackoverflow.com/beta/discussions/78239270/rust-vs-c-c-is-rust-better-than-c-c-or-is-a-skill-issue
  23. Fast Dds CVEs and Security Vulnerabilities - OpenCVE, accessed July 8, 2025, https://www.opencve.io/cve?vendor=eprosima&product=fast_dds
  24. Multiple Data Distribution Service (DDS) Implementations (Update A) - CISA, accessed July 8, 2025, https://www.cisa.gov/news-events/ics-advisories/icsa-21-315-02
  25. CVE-2020-26420 - Security Bug Tracker - Debian, accessed July 8, 2025, https://security-tracker.debian.org/tracker/CVE-2020-26420
  26. CVE-2020-26420 : Memory leak in RTPS protocol dissector in Wireshark 3.4.0 and 3.2.0 to 3.2.8 all - CVE Details, accessed July 8, 2025, https://www.cvedetails.com/cve/CVE-2020-26420/
    1. Library Overview - 3.2.2 - eProsima Fast DDS, accessed July 8, 2025, https://fast-dds.docs.eprosima.com/en/stable/fastdds/library_overview/library_overview.html
  27. Fast DDS Documentation, accessed July 8, 2025, https://media.readthedocs.org/pdf/eprosima-fast-rtps/latest/eprosima-fast-rtps.pdf
  28. FastDDS Publisher and Subscriber won’t match in demo code - Stack Overflow, accessed July 8, 2025, https://stackoverflow.com/questions/78090303/fastdds-publisher-and-subscriber-wont-match-in-demo-code
  29. Fast-DDS-docs/docs/fastdds/dds_layer/publisher/dataWriter/createDataWriter.rst at master, accessed July 8, 2025, https://github.com/eProsima/Fast-DDS-docs/blob/master/docs/fastdds/dds_layer/publisher/dataWriter/createDataWriter.rst
  30. Fast-DDS-docs/docs/fastdds/dds_layer/subscriber/dataReader/createDataReader.rst at master - GitHub, accessed July 8, 2025, https://github.com/eProsima/Fast-DDS-docs/blob/master/docs/fastdds/dds_layer/subscriber/dataReader/createDataReader.rst
  31. 1.4.3. Fast DDS - Vulcanexus Topic Intercommunication, accessed July 8, 2025, https://docs.vulcanexus.org/en/iron/rst/tutorials/core/deployment/dds2vulcanexus/dds2vulcanexus_topic.html
  32. fastrtps: how to use DDS history on publish/subscribe level? - Stack Overflow, accessed July 8, 2025, https://stackoverflow.com/questions/60094952/fastrtps-how-to-use-dds-history-on-publish-subscribe-level
  33. Fast DDS Spy Documentation, accessed July 8, 2025, https://fast-dds-spy.readthedocs.io/_/downloads/en/stable/pdf/
  34. 3.4.5. DataReaderListener - 3.2.2 - eProsima Fast DDS, accessed July 8, 2025, https://fast-dds.docs.eprosima.com/en/v3.2.2/fastdds/dds_layer/subscriber/dataReaderListener/dataReaderListener.html
  35. Foreign Function Interface - Secure Rust Guidelines, accessed July 8, 2025, https://anssi-fr.github.io/rust-guide/07_ffi.html
  36. FFI - The Rustonomicon - Rust Documentation, accessed July 8, 2025, https://doc.rust-lang.org/nomicon/ffi.html
  37. Item 34: Control what crosses FFI boundaries - Effective Rust, accessed July 8, 2025, https://effective-rust.com/ffi.html
  38. FFI patterns #1 - Complex Rust data structures exposed seamlessly to C++ Words, accessed July 8, 2025, https://crisal.io/words/2020/02/28/C++-rust-ffi-patterns-1-complex-data-structures.html
  39. Foreign Function Interface / A Guide to Porting C and C++ code to Rust - locka99, accessed July 8, 2025, https://locka99.gitbooks.io/a-guide-to-porting-c-to-rust/content/features_of_rust/ffi.html
  40. Rust FFI and bindgen: Integrating Embedded C Code in Rust, accessed July 8, 2025, https://blog.theembeddedrustacean.com/rust-ffi-and-bindgen-integrating-embedded-c-code-in-rust
  41. rust-bindgen/book/src/tutorial-3.md at main - GitHub, accessed July 8, 2025, https://github.com/rust-lang/rust-bindgen/blob/master/book/src/tutorial-3.md
  42. Native C++ FFI in the same manner as D / Issue #5853 / rust-lang/rust - GitHub, accessed July 8, 2025, https://github.com/rust-lang/rust/issues/5853
  43. Support inheriting from pure virtual classes / Issue #200 / google …, accessed July 8, 2025, https://github.com/google/autocxx/issues/200
  44. Rust and C++ virtual functions - Reddit, accessed July 8, 2025, https://www.reddit.com/r/rust/comments/dym88t/rust_and_c_virtual_functions/
  45. Rust/C++ Interop Part 1 - Just the Basics - Tyler Weaver, accessed July 8, 2025, https://tylerjw.dev/posts/rust-cpp-interop/
  46. rust-ffi-guide/book/basic_request.md at master - GitHub, accessed July 8, 2025, https://github.com/Michael-F-Bryan/rust-ffi-guide/blob/master/book/basic_request.md
  47. Wrapping a Rust struct in a C++ class - Stack Overflow, accessed July 8, 2025, https://stackoverflow.com/questions/32188582/wrapping-a-rust-struct-in-a-c-class
  48. Idiomatic Rust for wrapping callback based C libraries? - Reddit, accessed July 8, 2025, https://www.reddit.com/r/rust/comments/npehj9/idiomatic_rust_for_wrapping_callback_based_c/
  49. Rust program calling Rust method from C++ code - help - Rust Users Forum, accessed July 8, 2025, https://users.rust-lang.org/t/rust-program-calling-rust-method-from-c-code/54450
  50. C FFI Questions: rust methods in callbacks - help - The Rust Programming Language Forum, accessed July 8, 2025, https://users.rust-lang.org/t/c-ffi-questions-rust-methods-in-callbacks/28489
  51. Lessons learned from a successful Rust rewrite, accessed July 8, 2025, https://gaultier.github.io/blog/lessons_learned_from_a_successful_rust_rewrite.html
  52. First ffi project: what can I improve? - code review - The Rust Programming Language Forum, accessed July 8, 2025, https://users.rust-lang.org/t/first-ffi-project-what-can-i-improve/127759
  53. Exposing FFI from the Rust library - svartalf, accessed July 8, 2025, https://svartalf.info/posts/2019-03-01-exposing-ffi-from-the-rust-library/
  54. Using C libraries in Rust: make a sys crate, accessed July 8, 2025, https://kornel.ski/rust-sys-crate
  55. How to make a -sys crate? - help - The Rust Programming Language Forum, accessed July 8, 2025, https://users.rust-lang.org/t/how-to-make-a-sys-crate/13767
  56. Smoother C/Rust interop with existing libraries. / Issue #481 / rust-embedded/wg - GitHub, accessed July 8, 2025, https://github.com/rust-embedded/wg/issues/481
  57. The problem of safe FFI bindings in Rust - Abubalay, accessed July 8, 2025, https://www.abubalay.com/blog/2020/08/22/safe-bindings-in-rust
  58. How does rust bindgen work - Reddit, accessed July 8, 2025, https://www.reddit.com/r/rust/comments/5y24yc/how_does_rust_bindgen_work/
  59. sjames/cyclonedds-sys: Rust binding to cyclone-dds https … - GitHub, accessed July 8, 2025, https://github.com/sjames/cyclonedds-sys
  60. Tutorial - Rust C++ - CXX, accessed July 8, 2025, https://cxx.rs/tutorial.html
  61. Rust ❤️ C++, accessed July 8, 2025, https://cxx.rs/
  62. cxx - Rust - Docs.rs, accessed July 8, 2025, https://docs.rs/cxx/latest/cxx/
  63. cxx - Rust - Docs.rs, accessed July 8, 2025, https://docs.rs/cxx
  64. CXX - safe FFI between Rust and C++ - Android GoogleSource, accessed July 8, 2025, https://android.googlesource.com/platform/external/rust/cxx/+/16d23589cd6c3bdf2a38ded1ddc7eae725517397/README.md
  65. I made a table comparing Rust bindings for Qt : r/rust - Reddit, accessed July 8, 2025, https://www.reddit.com/r/rust/comments/x30ayi/i_made_a_table_comparing_rust_bindings_for_qt/
  66. How we wrap external C and C++ libraries in Rust - Evolve Benchmarking, accessed July 8, 2025, https://www.evolvebenchmark.com/blog-posts/how-we-wrap-external-c-and-cpp-libraries-in-rust
  67. A first look at ROS~2 applications written in asynchronous Rust - ResearchGate, accessed July 8, 2025, https://www.researchgate.net/publication/392133870_A_first_look_at_ROS2_applications_written_in_asynchronous_Rust
  68. A first look at ROS 2 applications written in asynchronous Rust - arXiv, accessed July 8, 2025, https://arxiv.org/html/2505.21323v1
  69. [Literature Review] A first look at ROS~2 applications written in asynchronous Rust, accessed July 8, 2025, https://www.themoonlight.io/en/review/a-first-look-at-ros2-applications-written-in-asynchronous-rust
  70. Governance - Rust Programming Language, accessed July 8, 2025, https://www.rust-lang.org/governance
  71. Leadership and Governance Open Source Guides, accessed July 8, 2025, https://opensource.guide/leadership-and-governance/
  72. Contributing - Rust Existing C++ - Google, accessed July 8, 2025, https://google.github.io/autocxx/contributing.html
  73. ROS2 Performance: rclpy is 30x-100x slower than rclcpp - Robotics Stack Exchange, accessed July 8, 2025, https://robotics.stackexchange.com/questions/98772/ros2-performance-rclpy-is-30x-100x-slower-than-rclcpp
  74. ROS 2 Performance Benchmarking - ROS General - Open Robotics Discourse, accessed July 8, 2025, https://discourse.ros.org/t/ros-2-performance-benchmarking/44382