Release Notes

v3.0.0 (2025-09-15)

New features in this release:

  • Added @optional and @external type support – Native handling of optional members in data types, and external basic types, sequences and arrays of basic types, and strings.

  • Custom memory allocators – New allocation mode enabling integration with user-defined allocators.

  • Channel redundancy – Ability to listen on multiple channels simultaneously for improved fault tolerance.

  • Manual entity decommissioning – Finer control over the lifecycle of DDS entities.

  • TSN compatibility for UDPv4 transport – New configuration option allowing the ISO 26262 ASIL-D certified UDPv4 transport to operate within TSN setups.

  • Ethernet transport – Added native IEEE 802.1Q Ethernet transport support, fully compatible with TSN configurations.

  • Documentation & tutorials – Expanded resources including ROS 2 integration, RTEMS getting started, and dedicated support packages for boards such as NXP, STMicroelectronics, and Espressif, among others.

This release includes the following major changes:

  • Updated Safe DDS codebase checksum computation method.

  • Introduced take_first_sample_from_instance method in IDataReaderInstanceStorage and BaseDataReaderInstanceStorage for taking first sample from an instance.

  • Introduced remove_first_sample_from_instance_and_push_back method in IDataReaderInstanceStorage and BaseDataReaderInstanceStorage for combined removal and push-back operation.

  • Updated remove_first_sample_from_instance method in IDataReaderInstanceStorage and BaseDataReaderInstanceStorage by removing SampleInfo parameter (responsibility for filling sample info moved to take_first_sample_from_instance) and returning void.

  • Updated remove_oldest_writer_from_instance method in IDataReaderInstanceStorage and BaseDataReaderInstanceStorage to return a boolean indicating removal operation result.

  • Introduced remove_first_sample_and_push_back method in BaseDataReaderInstance for combined removal and push-back operation.

  • Updated remove_first_sample method in BaseDataReaderInstance to accept output InstanceSample parameter (removed sample) and return void.

  • Updated oldest_writer_unregister method in BaseDataReaderInstance to return a boolean indicating instance unregistering operation result.

  • Introduced set_view_state method in BaseDataReaderInstance to set view state of instance.

  • Added new Optional<T> structure to memory module.

  • Replaced LocalEndpointMemory with LocalPublicationMemory and LocalSubscriptionMemory.

  • Replaced RemoteEndpointMemory with RemotePublicationMemory and RemoteSubscriptionMemory.

  • Created new PublicationBuiltinTopicData structure in dds module as use of discovery::PublicationInfo.

  • Created new SubscriptionBuiltinTopicData structure in dds module as use of discovery::SubscriptionInfo.

  • Created new ParticipantBuiltinTopicData structure in dds module as use of discovery::ParticipantInfo.

  • Created new TopicBuiltinTopicData structure in dds module.

  • Updated get_publication_matched_status, get_subscription_matched_status, get_discovered_participant_data, and get_discovered_topic_data methods arguments.

  • Removed EndpointBuiltinTopicData and made EndpointInfo absorb its functionality.

  • Removed PublicationBuiltinTopicData and made PublicationInfo absorb its functionality.

  • Removed SubscriptionBuiltinTopicData and made SubscriptionInfo absorb its functionality.

  • Removed ParticipantBuiltinTopicData and made ParticipantInfo absorb its functionality.

  • Removed all discovery parameter related structures except for IParameterObserver, ParameterDeserializer, ParameterHeader, and ParameterID.

  • Moved handling of discovery parameters to serialization::cdr::rtps module.

  • Added fill_local_participant_builtin_endpoints method to IDiscovery interface.

  • Added purge_stored_samples method to BaseTopic class.

  • Added get_first_last_sequence_numbers method to ITopicHistoryMap interface.

  • Added try_fit_new_sample method to ITopicHistoryMap interface.

  • Removed fragmented_lowest_sn and next_nackfrag_set attributes from ProxyWriter struct (unused).

  • Removed is_reliable_communication method from Reader class (unused).

  • Added Safe DDS Gen support for boolean sequences.

  • Changed inheritance from PreallocLinkedList and StaticLinkedList in PreallocOrderedLinkedList and StaticOrderedLinkedList to protected, and exposed size, capacity, at, remove, remove_position, and clear methods.

  • Renamed add method in PreallocLinkedList and StaticLinkedList to ordered_add.

  • Achieved major performance improvement in SafeDDSGen tool due to use of direct memory copy for basic types.

  • Introduced new ISortedList interface in memory module to define behavior of sorted lists.

  • Renamed PreallocOrderedLinkedList and StaticOrderedLinkedList to PreallocSortedList and StaticSortedList.

  • Renamed ordered_add method in PreallocSortedList and StaticSortedList to sorted_add.

  • Created BaseTopicHistoryMap class in datacentric module, unifying core logic of PreallocTopicHistoryMap and StaticTopicHistoryMap.

  • Refactored PreallocTopicHistoryMap and StaticTopicHistoryMap to inherit from BaseTopicHistoryMap and new IPayloadProvider interface.

  • Integrated PDPWriter and PDPSink into rewritten PDPWriter for comprehensive handling of outgoing participant discovery procedure.

  • Added new Pair<FirstType, SecondType> structure to memory module.

  • Refactored IMap and IReferenceMap to group shared code into IBaseMap interface.

  • Moved IBaseContainer inheritance from IMap and IReferenceMap to IBaseMap.

  • Made ITopicHistoryMap and IDiscoveryStorage directly inherit from IBaseMap.

  • Added key_value_at method to IBaseMap interface.

  • Added support for RTEMS.

  • Changed behavior of DataWriter configured with KEEP_ALL and TRANSIENT_LOCAL to allow writing to instance with samples acknowledged by all matched DataReader’s.

  • Added Safe DDS Gen support for external basic types, sequences and arrays of basic types, and strings.

  • Introduced new IAllocator interface in platform module.

  • Removed allocate method from IPlatform interface.

  • Added get_default_allocator free function to platform module.

  • Made all allocation-dependent classes get an IAllocator injected.

  • Renamed the SafeDomainParticipantFactoryPlatform class to SafeDomainParticipantFactoryAllocator, which implements the platform::IAllocator interface.

  • Added extra_announced_locators attribute to DomainParticipantWireProtocolQosPolicy and ParticipantInfo classes.

  • Added Safe DDS Gen support for arrays and sequences of unions.

  • Added decommission_contained_entities method to DomainParticipantFactory class.

  • Added decommission method to BaseDomainParticipant class.

  • Added decommission_local_participant method to IDiscovery interface.

  • Added set_last_sequence_number and get_last_sequence_number to PDPWriter class.

  • Updated IPublicationObserver and ISubscriptionObserver interfaces to return a boolean indicating whether the discovered publication or subscription is of interest to the observer.

  • Added sending_locator attribute to DataWriterWireProtocolQosPolicy class.

  • Added set_origin_configuration method to ITransport interface, allowing setting for a given guid a specific locator with a given priority.

  • Added get_sending_socket method to UDPv4 class and the attributes sending_sockets_, default_sending_socket_enabled_ and default_sending_socket_, allowing retrieval of the sending socket for a given guid.

  • Integrated locator_storage_memory_config, reception_socket_memory_config``and ``sending_socket_memory_config into transport::TransportAllocConfig.

  • Changed memory::container::PreallocMemoryConfig parameter in SafeDomainParticipantFactory constructor to use transport::TransportAllocConfig.

  • Changed memory::container::PreallocMemoryConfig parameters in free function create_transport to use transport::TransportAllocConfig.

This release includes the following minor changes:

  • Refactored InlineQos to use ParameterDeserializer structure.

  • Modified SafeDDSGen to generate code following folder structure of input IDL files.

  • Improved performance by using caches in some execution interfaces and Timer class.

  • Introduced clear_irrelevant_changes method in BaseDataReaderWriterStorage and IDataReaderWriterStorage for refactoring process_irrelevant_changes in BaseDataReader.

  • Added discovery_max_samples_per_request member to the DomainParticipantWireProtocolQosPolicy class.

  • Added max_samples_per_request parameter to the Discovery class constructor.

This release includes the following fixes:

  • [KNOWN_ISSUE_3001] - Fixed sample rejection and view state wrong values on readers configured with KEEP_LAST depth 1 HistoryQoS when not taking available data.

  • [KNOWN_ISSUE_3001] - Ensured instance state changes correctly triggered data availability notification.

  • [KNOWN_ISSUE_3002] - Fixed Subscriber’s on_data_on_readers listener preventing DataReader’s DATA_AVAILABLE_STATUS status being cleaned.

  • [KNOWN_ISSUE_3003] - Fixed BaseDataReader sample count cache synchronization.

  • [KNOWN_ISSUE_3004] - Fixed removal/add order on Best Effort RTPS Reader fragmented operation.

  • [KNOWN_ISSUE_3005] - Fixed generated TypeSupport’s wrong max_serialized_size calculation.

  • [KNOWN_ISSUE_3006] - Fixed XCDRv1 generated TypeSupport of nested mutable structs to be fully compliant with OMG Standard.

  • [KNOWN_ISSUE_3007] - Fixed BaseDataReader memory cleanup on unmatch event.

  • [KNOWN_ISSUE_3008] - Fixed data and DataFrag out of range (far future) not being ignored and handled AckNack / NackFrag accordingly.

  • [KNOWN_ISSUE_3009] - Fixed RTPS Reader acknowledge behavior when acknowledging one sample fragment.

  • [KNOWN_ISSUE_3010] - Improved TopicHistory heuristic for fitting most relevant samples or sample fragments in full TopicHistoryMap scenarios.

  • [KNOWN_ISSUE_3011] - Fixed memory occupied by fragments on Best Effort RTPS Reader not being released if last fragment was not last to arrive and sample was incomplete.

  • [KNOWN_ISSUE_3012] - Fixed invalid TimePoint return value when normalizing a TimePoint with near maximum representable seconds and enough nanoseconds to reach maximum representable time in total.

  • [KNOWN_ISSUE_3013] - Fixed missing validation in PreallocMemoryConfig to prevent inconsistent configurations.

  • [KNOWN_ISSUE_3014] - Fixed PreallocTopicHistoryMap data preallocation.

  • [KNOWN_ISSUE_3015] - Fixed unnecessary DATA(P) messages being sent on participant discovery procedure, leading to unnecessary network congestion in certain scenarios.

  • [KNOWN_ISSUE_3016] - Fixed Parameter RTPS messages with Must-Understand flag being incorrectly ignored, whether known or unknown.

  • [KNOWN_ISSUE_3017] - Fixed overwriting of Heartbeat non-final flag in an RTPS Reader if another Heartbeat with final flag was received before the RTPS Reader had time to spin.

  • [KNOWN_ISSUE_3018] - Fixed buffer zero-initialization in SafeDDSGen when dealing with IDL keys calculations.

  • [KNOWN_ISSUE_3019] - Fixed SafeDDSGen to correctly compute union’s XCDRv2 length code.

  • [KNOWN_ISSUE_3020] - Fixed SafeDDSGen to correctly initialize members of unions.

  • [KNOWN_ISSUE_3021] - Fixed matched status updates, incompatible QoS and topic inconsistencies not being detected nor reported upon remote participant publications and subscriptions updates.

  • [KNOWN_ISSUE_3022] - Fixed maximum payload size calculation not taking into account HeaderExtension field size.

Version checksum

Safe DDS v3.0.0 checksum is:

17ac151ed79981a72f5d67ebf1461423a26787da2430423fceca860bb77287db

The checksum has been calculated over the include and src directories of the Safe DDS v3.0.0 release using the SHA-256 algorithm through the following command in Ubuntu 22.04:

find include/ src/ -type f -exec sha256sum {} + | sort -k 1 | sha256sum | awk '{ print $1 }'

Known issues

No known issues.

v2.0.0 (2024-11-14)

This is a stable certifiable version of Safe DDS.

This release includes the following major changes:

  • Complete ISO 26262 Safety Documentation

  • Add MISRA C++ 2023 & AUTOSAR C++14 compliance

  • Complete 100% line, branch, decision and function coverage

  • Complete set of unit, module, system, profiling, smoke and code generation tests

  • Add SafeDomainParticipantFactory to DDS module for safety compliance

  • Add Safe DDS Gen for IDL code generation

  • Add error detection procedures at Protocol module

  • Add Logger system in Portable module

  • Add Initial Peers Discovery at DDS module

  • Add support for XCDR v2 serialization

  • Add traffic aggregation support at Protocol module

  • Support for NuttX RTOS

  • Support for ThreadX RTOS

  • Support for Bare Metal

  • Support for FreeRTOS + TCP stack

  • Support for LwIP stack (Raw and Socket API)

  • Support for NetX Duo stack

  • Major architectural changes to improve performance

This release includes the following minor changes:

  • Improve Datacentric module

  • Improve Memory module

  • Improve Platform module

  • Improve Serialization module

  • Improve Protocol module

  • Improve Execution module

  • Improve Discovery module

  • Improve DDS module

  • Improve Transport module

  • Complete removal of usage of C++ standard library outside Portable module

  • General code refactoring and bugfixes

Version checksum

Safe DDS v2.0.0 checksum is:

aeb96c87ea50c755711d3f2b20fe241859f810d96a96e734f4638273e8955fcf

The checksum has been calculated over the include and src directories of the Safe DDS v2.0.0 release using the SHA-256 algorithm through the following command in Ubuntu 22.04:

find include/ src/ -type f -exec sha256sum {} + | sort -k 2 | sha256sum | awk '{ print $1 }'

Known issues

As part of our Functional Safety procedure, we maintain a detailed record of known issues relevant to our software. The issues currently identified are minor and do not affect the overall functionality. This information is available to licensed customers.

v1.0.0 (2023-08-23)

This is the initial stable version of Safe DDS.

This release includes the following major changes:

  • Add support for QNX Neutrino 7.1 RTOS

  • Add support for POSIX Linux

  • Add QNX ARM on CI

  • Add FreeRTOS platform support on CI

  • Implement Liveliness

  • Fast DDS compatibility example

  • ROS 2 compatibility example

  • Added User Manual

  • New Transport module

  • Add DomainParticipantFactory

  • Add BasicExecutor

This release includes the following minor changes:

  • Platform API improvements

  • Linting, code checking and refactors

  • Add OwnershipStrengthValue

  • Improve Discovery module

  • Improve DDS module

Version checksum

Safe DDS v1.0.0 checksum is:

f43aa2cca6f5ed9ac0146f606e8f0f3ace91598e977c00ac9f0eca878cdb8229

The checksum has been calculated over the include and src directories of the Safe DDS v1.0.0 release using the SHA-256 algorithm through the following command in Ubuntu 22.04:

find include/ src/ -type f -exec sha256sum {} + | sort -k 2 | sha256sum | awk '{ print $1 }'

Known issues

No known issues.