Booil Jung

RustDDS

RustDDS를 온전히 이해하기 위해서는 그 근간을 이루는 두 가지 핵심 기술, 즉 데이터 분산 서비스(DDS) 표준과 러스트(Rust) 프로그래밍 언어에 대한 선행적 고찰이 필수적이다. 이 두 기술의 융합은 RustDDS의 설계 철학, 기술적 장단점, 그리고 전략적 가치를 결정하는 핵심 요소로 작용한다.

데이터 분산 서비스(Data Distribution Service, DDS)는 객체 관리 그룹(Object Management Group, OMG)이 관리하는 기계 대 기계(M2M) 통신을 위한 미들웨어 표준이다.1 이 표준은 항공우주, 국방, 자율주행차, 로보틱스, 의료 기기 등 미션 크리티컬(mission-critical) 시스템에서 요구되는 확장 가능하고, 실시간성이 보장되며, 신뢰성 높은 고성능 데이터 교환을 목표로 설계되었다.2 2001년에 개발이 시작되어 여러 버전을 거치며 발전해 온 DDS는 그 성숙도와 안정성을 입증받은 기술이다.2

DDS의 근본적인 아키텍처 패러다임은 데이터 중심의 발행-구독 모델에 기반한다.

DDS API를 구성하는 핵심 객체는 다음과 같다.

서비스 품질(QoS)은 DDS의 핵심 기능으로, 통신 행위를 정교하게 제어하는 메커니즘이다.

DDSI-RTPS(Real-Time Publish-Subscribe Protocol) 와이어 프로토콜은 RTI, eProsima, OpenDDS 등 서로 다른 벤더의 DDS 구현체들이 원활하게 통신할 수 있도록 보장하는 핵심 요소다.6 “Shapes” 데모는 이러한 상호운용성을 시연하고 테스트하기 위한 사실상의 표준으로 사용된다.1

이러한 특성들을 종합해 볼 때, DDS는 단순한 메시지 전달 시스템을 넘어선다. ‘글로벌 데이터 공간’, 키를 가진 토픽, 인스턴스 개념, 그리고 DURABILITYHISTORY 같은 풍부한 QoS 정책의 조합은 DDS를 ‘움직이는 데이터베이스(database in motion)’로 이해하게 만든다. read, take와 같은 API는 전통적인 메시지 큐의 send/receive보다 데이터베이스의 CRUD 작업에 더 가깝다. 이는 DDS가 단순 통신 프로토콜이 아니라 실시간 시스템의 상태를 관리하고 동기화하는 프레임워크임을 시사하며, MQTT나 ZeroMQ와 같은 다른 미들웨어와의 근본적인 차이점을 형성한다.11

러스트는 성능, 안정성, 생산성이라는 세 가지 핵심 가치를 제공하는 현대적인 시스템 프로그래밍 언어다.26 C/C++의 성능 수준을 유지하면서, 이들 언어에서 흔히 발생하는 특정 유형의 버그들을 원천적으로 제거하는 것을 목표로 설계되었다.27

러스트가 C/C++와 동등한 수준의 성능을 낼 수 있는 이유는 다음과 같다.

러스트 혁신의 핵심은 메모리 안전성을 보장하는 독특한 모델에 있다.

소유권과 빌림 규칙은 자연스럽게 멀티스레드 프로그래밍으로 확장된다. 공유된 가변 상태를 원천적으로 방지함으로써, 컴파일러는 동시성 시스템에서 가장 다루기 어려운 버그 중 하나인 데이터 경쟁(data race)을 제거한다. 이를 통해 개발자들은 훨씬 더 큰 확신을 가지고 병렬 코드를 작성할 수 있다.28

러스트의 현대적인 툴체인은 생산성을 높이는 핵심 요소다.

러스트의 엄격한 컴파일러, 특히 빌림 검사기는 단순한 안전 기능을 넘어선다. 이는 개발자가 데이터 흐름, 소유권, 상태 관리에 대해 더 엄격하게 생각하도록 강제하는 설계 도구 역할을 한다. C++와 같은 언어에서는 포인터와 참조를 자유롭게 전달할 수 있지만, 바로 그 자유가 댕글링 포인터나 반복자 무효화와 같은 수많은 런타임 오류의 근원이 된다.37 러스트는 이러한 개발자의 규율을 컴파일러에 내재화했다.26 소유권이 모호하거나 별칭 규칙(aliasing rules)이 위반된 코드는 컴파일을 거부한다. 따라서 DDS와 같이 복잡한 프로토콜을 러스트로 구현하는 것은 단순히 API를 번역하는 행위가 아니다. 언어 자체가 제공하는 규율은 견고하고 동시성 높은 실시간 시스템을 구축하는 데 매우 유익하며, 그 결과물은 메모리 안전성을 넘어 아키텍처적으로도 더 견고해지는 경향이 있다.

이 파트에서는 일반적인 기술 논의에서 벗어나 RustDDS 구현체 자체를 심층적으로 분석한다. 프로젝트의 핵심 설계 철학, API 구조, 그리고 DDS 표준을 러스트다운 방식으로 어떻게 변환했는지에 초점을 맞춘다.

RustDDS는 핀란드의 로보틱스 및 ROS2 전문 기업인 Atostek Oy가 개발한 순수 러스트 기반의 DDS 구현체다.1 이 프로젝트는 Apache 2.0 라이선스로 공개되어 있다.38

RustDDS 설계의 가장 중요한 특징은 API 철학에 있다.

프로젝트 문서에 따르면, 동적 발견, 신뢰성 QoS, 이력 QoS, UDP 기반 RTPS, 그리고 with_keyno_key 토픽과 같은 핵심 기능은 안정적으로 구현되어 있다. 더 진보된 QoS 정책이나 공유 메모리 전송과 같은 기능의 구현 상태도 확인된다.1

RustDDS의 설계 결정들, 즉 mio, Serde, 제네릭, Result/Option의 사용은 DDS 전용 메커니즘을 독립적으로 재창조하기보다 기존의 러스트 생태계와 깊이 통합하려는 전략적 선택을 보여준다. 이는 러스트 프로그래머에게 익숙한 개발 경험과 생태계 호환성이 주는 이점이 DDS 표준 API와의 불일치로 인한 비용보다 크다는 판단에 기반한다. 러스트 개발자는 Serde를 통해 데이터 타입 호환성을 쉽게 확보하고 13,

mio를 통해 tokio와 같은 비동기 런타임의 이벤트 루프 모델을 자연스럽게 이해할 수 있다.13 이는 러스트에 이미 투자한 팀에게 RustDDS를 매력적인 선택지로 만들지만, 다른 언어로 DDS를 경험한 개발자에게는 기존 지식을 1:1로 적용할 수 없어 새로운 학습 곡선을 요구하는 계산된 트레이드오프다.

간단한 발행자와 구독자를 설정하는 과정은 다음과 같다.

  1. DomainParticipant를 생성한다.13
  2. Topic을 생성한다.13
  3. Publisher 및/또는 Subscriber를 생성한다.13
  4. PublisherTopic으로부터 DataWriter를 생성한다.13
  5. SubscriberTopic으로부터 DataReader를 생성한다.13

다음은 이 흐름을 보여주는 간단한 코드 예시다.13

Rust

use rustdds::*;
use rustdds::no_key::{DataReader, DataWriter};
use serde::{Serialize, Deserialize};

#
struct SomeType { a: i32 }

let domain_participant = DomainParticipant::new(0).unwrap();
let qos = QosPolicyBuilder::new()
   .reliability(policy::Reliability::Reliable { max_blocking_time: Duration::from_millis(100) })
   .build();

let publisher = domain_participant.create_publisher(&qos).unwrap();
let subscriber = domain_participant.create_subscriber(&qos).unwrap();

let some_topic = domain_participant.create_topic(
    "SomeTopic".to_string(),
    "SomeType".to_string(),
    &qos,
    TopicKind::NoKey,
).unwrap();

let writer = publisher.create_datawriter_no_key::<SomeType, CDRSerializerAdapter<SomeType>>(
    &some_topic,
    None,
).unwrap();

let mut reader = subscriber.create_datareader_no_key::<SomeType, CDRDeserializerAdapter<SomeType>>(
    &some_topic,
    None,
).unwrap();

러스트 구조체를 RustDDS에서 사용 가능하게 만드는 과정은 다음과 같다.

  1. 사용자 데이터 구조체에 serde::Serializeserde::Deserialize를 파생(derive)시킨다.
  2. WithKey 토픽을 사용할 경우, 해당 구조체에 rustdds::Keyed 트레이트를 구현한다.13
  3. DataWriter/DataReader 생성 시, 제네릭 타입 파라미터로 CDRSerializerAdapter<MyType> 또는 CDRDeserializerAdapter<MyType>를 지정한다.13

I/O 이벤트를 처리하는 방법은 다음과 같이 나뉜다.

read()(데이터를 빌려오며 리더 캐시에 남겨둠)와 take()(데이터를 이동시키며 캐시에서 제거함)의 의미적 차이는 DDS의 핵심 개념이다.13 또한 ReadCondition::not_read()와 같은 다양한 읽기/가져오기 조건을 사용할 수 있다.42

RustDDS의 API는 강력하지만, DDS 개념과 저수준 비동기 러스트(mio)에 익숙하지 않은 사용자에게는 학습 곡선이 가파를 수 있다. 실제로 한 사용자는 간단한 단일 프로세스 예제를 두 개의 프로세스로 분리하는 데 어려움을 겪었고, mio 기반의 복잡한 예제에 혼란을 느꼈다고 보고했다.41 개발자의 답변에 따르면, 고수준 비동기 프레임워크를 사용하지 않는 한 프로세스 간 통신에는 mio 기반의 폴링 루프가 필수적이다.41 이는 ‘Hello, World’ 수준의 예제에서 실제 분산 애플리케이션으로 넘어가는 데 상당한 개념적 도약이 필요함을 시사한다. 따라서 신규 사용자는 가능하면 mio의 복잡성을 추상화하는 async/await 스트림 기반 API로 시작하는 것이 권장된다.

이 파트에서는 RustDDS를 더 넓은 기술적, 경쟁적 환경에 위치시킨다. 주요 경쟁자와 비교하고, 핵심적인 ROS2 생태계에서의 역할을 평가하며, 성능 프로파일을 분석한다.

순수 러스트 DDS 구현체 시장에는 RustDDS와 Dust-DDS라는 두 주요 경쟁자가 존재한다. 두 프로젝트는 동일한 목표를 추구하지만, 근본적인 설계 철학과 기술적 선택에서 뚜렷한 차이를 보인다. 이는 잠재적 사용자가 기술을 선택할 때 신중하게 고려해야 할 중요한 트레이드오프를 제시한다.

기능 RustDDS (Atostek 개발) Dust-DDS (S2E Software Systems 개발)
개발 철학 러스트다운(Rust-Idiomatic): “러스트 개념과 관례를 사용한 기능적 동등성”을 추구.1 러스트 개발자 경험을 우선시한다. 표준 준수(Standard-Conforming): OMG DDS 표준 API를 최대한 가깝게 따르는 것을 목표로 한다.43
핵심 비동기 모델 mio 기반 폴링: mio 라이브러리 기반의 비동기 I/O. 고수준 async 스트림 래퍼를 제공한다.13 액터 모델과 tokio: tokio 런타임 기반의 내부 액터 모델을 사용한다.14
unsafe 코드 정책 성능이나 FFI를 위해 필요한 경우 unsafe 코드를 사용한다 (명시적인 no_unsafe 선언 없음). #![forbid(unsafe_code)]: 순수하고 안전한 러스트 구현을 명시적으로 보장한다.45
이벤트 처리 API DDS의 Listener/WaitSet을 mio 폴링 또는 async 스트림으로 대체한다.40 표준 DDS Listener/WaitSet API(트레이트)와 완전한 async API를 모두 제공한다.14
데이터 타입 정의 DataReader/DataWriter에 제네릭을 사용하고, 키가 있는 타입에는 Keyed 트레이트를 요구한다.13 데이터 타입 자체에 추가 트레이트를 사용해 키와 표현을 정의하며, DdsType 파생 매크로를 제공한다.43

‘러스트다운’ 접근 방식과 ‘표준 준수’ 접근 방식은 서로 다른 개발팀에 각기 다른 장단점을 제공한다. RustDDS의 접근 방식은 기존 러스트 개발자들이 Serde, mio, Result 등 익숙한 도구와 패턴을 그대로 활용할 수 있게 하여 학습 곡선을 낮추고 생태계와의 통합을 용이하게 한다. 반면, Dust-DDS의 접근 방식은 C++나 Java 등 다른 언어로 DDS를 사용해 본 개발자들이 기존의 지식과 개념(Listener, WaitSet 등)을 더 직접적으로 적용할 수 있게 해준다.

RustDDS의 mio 기반 구조는 특정 비동기 런타임에 종속되지 않는 유연성을 제공하지만, 개발자가 직접 이벤트 루프를 관리해야 하는 부담이 있다. Dust-DDS의 tokio 기반 액터 모델은 tokio 생태계와 긴밀하게 통합되어 강력한 동시성 처리를 제공하지만, tokio 런타임 사용이 전제된다. 액터 모델은 잠금(locking)과 관련된 교착 상태(deadlock) 위험을 줄이는 데 도움이 될 수 있다.14

Dust-DDS의 no_unsafe 보증은 매우 중요한 차별점이다.45 이는 코드베이스 전체에서 unsafe 블록의 사용을 금지함으로써 컴파일러가 보장하는 메모리 안전성을 100% 신뢰할 수 있음을 의미한다. 이는 감사나 공식적인 검증이 요구되는 고도의 안전 필수(safety-critical) 또는 보안 시스템에서 결정적인 이점이 될 수 있다.

데이터 타입을 정의하고 이벤트를 처리하는 개발자 경험은 두 라이브러리 간에 차이가 있다. RustDDS는 제네릭과 트레이트를 조합하는 방식을, Dust-DDS는 파생 매크로와 타입 자체에 부가된 트레이트를 사용하는 방식을 채택하여 43, 각기 다른 수준의 추상화와 유연성을 제공한다.

RustDDS는 DDSI-RTPS 와이어 프로토콜을 준수함으로써 주요 C/C++ DDS 벤더인 RTI Connext, eProsima FastRTPS, OpenDDS 등과 성공적으로 상호 운용됨이 입증되었다.1 이는 RustDDS가 기존의 이기종 DDS 시스템에 통합될 수 있음을 의미한다.

RustDDS의 전략적 위치는 네이티브 러스트 ROS2 생태계에서 두드러진다.

ros2_rustrclrust와 같은 대안적인 러스트 클라이언트 라이브러리도 존재하지만, 이들은 일반적으로 C/C++ 라이브러리(rcl, rmw)를 래핑(wrapping)하는 방식이므로 ros2-client와 같은 ‘순수 러스트’ 솔루션은 아니다.39

RustDDS의 가장 중요한 전략적 가치는 범용 DDS 구현체로서가 아니라, 네이티브 러스트-온-ROS2 생태계를 가능하게 하는 특정 기술이라는 점에서 찾을 수 있다. 로보틱스 커뮤니티는 ROS2를 통해 DDS를 표준으로 채택했고 5, 러스트의 안전성과 성능에 대한 관심이 이 분야에서 증가하고 있다.38 C/C++ 스택에 의존하지 않는 진정한 네이티브 러스트 애플리케이션을 구축하려면 순수 러스트 클라이언트 라이브러리가 필요하며, ros2-client가 그 역할을 한다.39 그리고 ros2-client는 RustDDS를 기반으로 한다.39 따라서 RustDDS는 이 틈새 시장이지만 성장하는 분야에서 핵심적인 역할을 하며, 그 발전은 로보틱스에서 러스트의 성공과 궤를 같이할 것이다.

연구 자료에 RustDDS에 대한 직접적인 벤치마크는 없지만, 그 성능 프로파일은 여러 근거를 통해 긍정적으로 예측할 수 있다.

사용자가 직접 RustDDS의 성능을 측정하고자 할 때 고려해야 할 모범 사례는 다음과 같다.

DDS, Zenoh, Kafka, MQTT 간의 성능 비교 벤치마크에 따르면 12, 일부 시나리오에서는 Zenoh가 더 빠를 수 있지만, DDS는 Kafka나 MQTT와 같은 브로커 기반 시스템보다 P2P, 저지연 통신에서 월등히 높은 성능을 보인다. 이는 잘 구현된 러스트 버전의 DDS가 매우 높은 성능을 제공할 것이라는 주장을 뒷받침한다.

보고서의 마지막 파트에서는 분석 내용을 종합하여 RustDDS 프로젝트에 대한 전체적인 평가를 제공하고, 잠재적 도입자를 위한 실행 가능한 조언을 제시한다.

RustDDS 프로젝트의 건전성은 여러 지표를 통해 긍정적으로 평가된다.

공개된 이슈와 토론을 통해 현재 커뮤니티가 다루고 있는 도전 과제나 한계를 파악할 수 있다.41 앞서 언급된 학습 곡선과 문서화의 간극이 대표적인 예다.

RustDDS에 대한 공식적인 ROADMAP.md는 없지만, 미래 방향은 여러 단서를 통해 추론할 수 있다.

RustDDS는 실용적이고 러스트다운 API를 갖춘, 성숙하고 활발하게 개발되는 순수 러스트 DDS 구현체다. 그 핵심 전략적 가치는 네이티브 러스트-온-ROS2 생태계를 가능하게 하는 기술이라는 데 있다. 경쟁 구도에는 표준 준수와 절대적인 메모리 안전성을 우선시하는 Dust-DDS가 있으며, 이는 다른 유효한 설계적 트레이드오프를 보여준다.

기술 리더를 위한 실행 가능한 지침은 다음과 같다.

  1. Atostek/RustDDS: Rust implementation of Data Distribution … - GitHub, accessed July 8, 2025, https://github.com/Atostek/RustDDS
  2. Data Distribution Service - Wikipedia, accessed July 8, 2025, https://en.wikipedia.org/wiki/Data_Distribution_Service
  3. DDS Portal – Data Distribution Services, accessed July 8, 2025, https://www.dds-foundation.org/
  4. Industrial Protocols: Fundamentals of Data Distribution Service (DDS), accessed July 8, 2025, https://www.racoman.com/blog/industrial-protocols/fundamentals-of-data-distribution-service-dds
  5. DDS Middleware. What is DDS middleware: by Huseyin Kutluca Software Architecture Foundations Medium, accessed July 8, 2025, https://medium.com/software-architecture-foundations/dds-middleware-1af525f69753
  6. What’s in the DDS Standard? - DDS Foundation, accessed July 8, 2025, https://www.dds-foundation.org/omg-dds-standard/
  7. en.wikipedia.org, accessed July 8, 2025, https://en.wikipedia.org/wiki/Data_Distribution_Service#:~:text=DDS%20is%20a%20networking%20middleware,)%20and%20publish%20%22samples%22. and publish “samples”.)
  8. Introduction to DDS - eProsima, accessed July 8, 2025, https://www.eprosima.com/developer-resources/whitepapers/dds
  9. What is DDS? - DDS Foundation, accessed July 8, 2025, https://www.dds-foundation.org/what-is-dds-3/
  10. Introduction to DDS (Data Distribution Service): Real-Time Data Communication Made Easy!, accessed July 8, 2025, https://erhanbakirhan.medium.com/introduction-to-dds-data-distribution-service-real-time-data-communication-made-easy-d6f4badddd6f
  11. Navigating IIoT Protocols: Comparing DDS and MQTT - RTI, accessed July 8, 2025, https://www.rti.com/blog/comparing-dds-and-mqtt
  12. Comparing the Performance of Zenoh, MQTT, Kafka, and DDS, accessed July 8, 2025, https://zenoh.io/blog/2023-03-21-zenoh-vs-mqtt-kafka-dds/
  13. rustdds - Rust - Docs.rs, accessed July 8, 2025, https://docs.rs/rustdds
  14. Introducing Dust DDS - A native Rust implementation of the Data Distribution Service (DDS) middleware - S2E Software Systems, accessed July 8, 2025, https://www.s2e-systems.com/resources/articles/introducing_dust_dds/
    1. Keys and Instances - RTI Connext Getting Started documentation - RTI Community, accessed July 8, 2025, https://community.rti.com/static/documentation/connext-dds/current/doc/manuals/connext_dds_professional/getting_started_guide/csharp/intro_keys_instances.html
  15. Chapter 11 Quality of Service (QoS) - RTI Community, accessed July 8, 2025, https://community.rti.com/static/documentation/connext-dds/current/doc/manuals/connext_dds_professional/users_manual/users_manual/Quality_of_Service__QoS_.htm
  16. Quality of Service (QoS) Policies [DDS Foundation Wiki], accessed July 8, 2025, https://www.omgwiki.org/ddsf/doku.php?id=ddsf:public:guidebook:06_append:glossary:q:quality_of_service_qos_policies
  17. QoS Data Distribution Service (DDS) Community RTI Connext Users, accessed July 8, 2025, https://community.rti.com/glossary/qos
  18. Interoperability RustDDS x OpenDDS by Alghani - Medium, accessed July 8, 2025, https://medium.com/@alghani63/interoperability-rustdds-x-opendds-7cf77fef7164
  19. rustdds::policy - Rust - Docs.rs, accessed July 8, 2025, https://docs.rs/rustdds/latest/rustdds/policy/index.html
  20. Quality of Service - OpenDDS 3.28.1, accessed July 8, 2025, https://opendds.readthedocs.io/en/dds-3.28.1/devguide/quality_of_service.html
  21. Quality of Service - OpenDDS 3.27.0, accessed July 8, 2025, https://opendds.readthedocs.io/en/dds-3.27/devguide/quality_of_service.html
    1. Quality of Service - The Data Distribution Service Tutorial, accessed July 8, 2025, https://download.zettascale.online/www/docs/Vortex/html/ospl/DDSTutorial/qos.html
  22. Validation of interoperability of products compliant with OMG DDS-RTPS standard. - GitHub, accessed July 8, 2025, https://github.com/omg-dds/dds-rtps
  23. ZeroMQ vs. DDS Software: What’s the Difference? RTI, accessed July 8, 2025, https://www.rti.com/blog/2017/04/20/why-would-anyone-use-dds-over-zeromq
  24. Rust Programming Language, accessed July 8, 2025, https://www.rust-lang.org/
  25. Why use Rust? - Reddit, accessed July 8, 2025, https://www.reddit.com/r/rust/comments/1j8wnrk/why_use_rust/
  26. Why Rust is the most admired language among developers - The GitHub Blog, accessed July 8, 2025, https://github.blog/developer-skills/programming-languages-and-frameworks/why-rust-is-the-most-admired-language-among-developers/
  27. Why is Rust Language Becoming Popular and Should You Learn it? - Emeritus, accessed July 8, 2025, https://emeritus.org/blog/coding-rust-programming-language/
  28. Rust: The Future of Memory-Safe Software Development Bitrock, accessed July 8, 2025, https://bitrock.it/blog/rust-the-future-of-memory-safe-software-development.html
  29. Rust: Exploring Its Benefits for System-Level Programming - Blue Coding, accessed July 8, 2025, https://www.bluecoding.com/post/rust-exploring-its-benefits-for-system-level-programming
  30. How beneficial is the memory safety in rust programming language, and why didn’t other system languages like C++ include such a feature? Does it have some side effects? If yes, like what? - Quora, accessed July 8, 2025, https://www.quora.com/How-beneficial-is-the-memory-safety-in-rust-programming-language-and-why-didnt-other-system-languages-like-C-include-such-a-feature-Does-it-have-some-side-effects-If-yes-like-what
  31. Memory-Safe Programming Languages and National Cybersecurity: - A Technical Review of Rust by Adnan Masood, PhD. Medium, accessed July 8, 2025, https://medium.com/@adnanmasood/memory-safe-programming-languages-and-national-cybersecurity-a-technical-review-of-rust-fbf7836e44b8
  32. Rust Documentation, accessed July 8, 2025, https://doc.rust-lang.org/
  33. rustdds - crates.io: Rust Package Registry, accessed July 8, 2025, https://crates.io/crates/rustdds/0.8.2/dependencies
  34. rustdds - crates.io: Rust Package Registry, accessed July 8, 2025, https://crates.io/crates/rustdds/0.11.2
  35. What are the unique benefits of Rust over C++? - Reddit, accessed July 8, 2025, https://www.reddit.com/r/rust/comments/13tw26c/what_are_the_unique_benefits_of_rust_over_c/
  36. RustDDS - Atostek, accessed July 8, 2025, https://atostek.com/en/services/rust-dds/
  37. ROS2 client library based on RustDDS - GitHub, accessed July 8, 2025, https://github.com/Atostek/ros2-client/
  38. rustdds - crates.io: Rust Package Registry, accessed July 8, 2025, https://crates.io/crates/rustdds
  39. Tutorial/Example of two separate processes communicating using RustDDS? #168 - GitHub, accessed July 8, 2025, https://github.com/jhelovuo/RustDDS/discussions/168
  40. DataReader in rustdds::dds::with_key - Rust - Docs.rs, accessed July 8, 2025, https://docs.rs/rustdds/latest/rustdds/dds/with_key/struct.DataReader.html
  41. Dust DDS: A safe-only Rust implementation of the Data Distribution Service (DDS) middleware - Reddit, accessed July 8, 2025, https://www.reddit.com/r/rust/comments/1badm16/dust_dds_a_safeonly_rust_implementation_of_the/
  42. Introducing Dust DDS – A native Rust implementation of the Data Distribution Service (DDS) middleware - Reddit, accessed July 8, 2025, https://www.reddit.com/r/rust/comments/1c26aq6/introducing_dust_dds_a_native_rust_implementation/
  43. s2e-systems/dust-dds: Rust implementation of the Data … - GitHub, accessed July 8, 2025, https://github.com/s2e-systems/dust-dds
  44. dust_dds - Rust - Docs.rs, accessed July 8, 2025, https://docs.rs/dust_dds
  45. ROS 2 Alternative middleware report - ROS General - Open Robotics Discourse, accessed July 8, 2025, https://discourse.ros.org/t/ros-2-alternative-middleware-report/33771
  46. Middleware Slander : r/ROS - Reddit, accessed July 8, 2025, https://www.reddit.com/r/ROS/comments/1g2mu1x/middleware_slander/
  47. Roboticists: Have you used Rust with ROS[2]? What were your experiences like? - Reddit, accessed July 8, 2025, https://www.reddit.com/r/rust/comments/173upma/roboticists_have_you_used_rust_with_ros2_what/
  48. Benchmarking - The Rust Performance Book, accessed July 8, 2025, https://nnethercote.github.io/perf-book/benchmarking.html
  49. rustls/BENCHMARKING.md at main - GitHub, accessed July 8, 2025, https://github.com/rustls/rustls/blob/main/BENCHMARKING.md
  50. How to benchmark Rust code with Criterion - Bencher, accessed July 8, 2025, https://bencher.dev/learn/benchmarking/rust/criterion/
  51. Activity / Atostek/RustDDS - GitHub, accessed July 8, 2025, https://github.com/Atostek/RustDDS/activity
  52. RustDDS/rustfmt.toml at master - GitHub, accessed July 8, 2025, https://github.com/Atostek/RustDDS/blob/master/rustfmt.toml
  53. accessed January 1, 1970, https://github.com/Atostek/RustDDS/issues
  54. ROADMAP.md - eclipse-iceoryx/iceoryx2 - GitHub, accessed July 8, 2025, https://github.com/eclipse-iceoryx/iceoryx2/blob/main/ROADMAP.md
  55. dds and rust Data Distribution Service (DDS) Community RTI Connext Users, accessed July 8, 2025, https://community.rti.com/forum-topic/dds-and-rust