Platform support

Safe DDS is designed to be highly portable, with support for a range of platforms and toolchains, including multiple RTOSes and bare metal environments. By default, Safe DDS provides out-of-the-box support for the set of platforms listed in Supported platforms, but it can be ported to other platforms with ease, provided that the requirements outlined in Minimum Requirements are satisfied.

Supported platforms

High portability is a key feature of Safe DDS, as it is designed for compatibility with a range of platforms, including multiple RTOSes and bare metal environments.

While out-of-the-box support is provided for a select set of platforms, porting the library to other platforms can be accomplished with ease, provided that the requirements outlined in Minimum Requirements are satisfied.

The tables below summarize Safe DDS’ supported platforms, transports, and built-in data sharing backends for each Safe DDS version:

Safe DDS v4.0.0

Platform

Version

Architecture

Compiler

Build system

Safety Level

Ubuntu

22.04

x86_64

GCC 12.1.0
Clang 14.0.0

CMake 3.5.0

None

QNX OS

8.0

x86_64

QCC 12.2.0

CMake 3.5.0

ASIL D

QNX Neutrino

7.1

x86_64

QCC 8.3.0

CMake 3.5.0

ASIL D

FreeRTOS

main

ARM Cortex-M

ARM GCC 10.3.1

CMake 3.5.0

None

NuttX

v12.12

RISC-V 32 bits

RISC-V GCC 13.2.0

CMake 3.5.0

None

Thread X

master

ARM Cortex-M

ARM GCC 10.3.1

CMake 3.5.0

None

Bare Metal

None

ARM Cortex-M

ARM GCC 10.3.1

CMake 3.5.0

None

Linux

6.9.9

ARM Cortex-A

Linux ARM GCC 11.4.0

CMake 3.5.0

None

RTEMS

5.3

ARM Cortex-A

Linux ARM GCC 9.4.0

waf 2.0.19

None

VxWorks

7.0

x86

Wind River GCC 5.5.0

CMake 3.5.0

None

Communication stack

Version

Transport type

Safety Level

POSIX sockets

None

UDPv4 / Ethernet

None

POSIX shared memory

None

Shared Memory

None

QNX OS sockets

8.0

UDPv4

ASIL D

QNX OS shared memory

8.0

Shared Memory

ASIL D

QNX Neutrino sockets

7.1

UDPv4

ASIL D

QNX Neutrino shared memory

7.1

Shared Memory

ASIL D

FreeRTOS-Plus-TCP

main

UDPv4

None

LwIP (Raw and Socket API)

master

UDPv4

None

NetX Duo

master

UDPv4

None

IPC stack

Version

Feature

Safety Level

POSIX shared memory / FIFO

None

Data sharing

None

QNX OS shared memory / FIFO

8.0

Data sharing

ASIL D

QNX Neutrino shared memory / FIFO

7.1

Data sharing

ASIL D

The built-in data sharing backend for Safe DDS v4.0.0 relies on POSIX shared memory and FIFO primitives, so it is available on the POSIX platforms listed above.

Safe DDS v3.0.0

Platform

Version

Architecture

Compiler

Build system

Safety Level

Ubuntu

22.04

x86_64

GCC 12.1.0

CMake 3.5.0

None

QNX Neutrino

7.1

x86_64

QCC 8.3.0

CMake 3.5.0

ASIL D

FreeRTOS

v11.2

ARM Cortex-M

ARM GCC 10.3.1

CMake 3.5.0

None

NuttX

v12.11

RISC-V 32 bits

RISC-V GCC 13.2.0

CMake 3.5.0

None

Thread X

v6.4.2

ARM Cortex-M

ARM GCC 10.3.1

CMake 3.5.0

None

Bare Metal

None

ARM Cortex-M

ARM GCC 10.3.1

CMake 3.5.0

None

Linux

6.9.9

ARM Cortex-A

Linux ARM GCC 11.4.0

CMake 3.5.0

None

RTEMS

5.3

ARM Cortex-A

Linux ARM GCC 9.4.0

waf 2.0.19

None

VxWorks

7.0

x86

Wind River GCC 5.5.0

CMake 3.5.0

None

Communication stack

Version

Transport type

Safety Level

POSIX sockets

None

UDPv4 / Ethernet

None

QNX Neutrino sockets

7.1

UDPv4

ASIL D

FreeRTOS-Plus-TCP

v4.3.3

UDPv4

None

LwIP (Raw and Socket API)

v2.2.1

UDPv4

None

NetX Duo

v6.4.3

UDPv4

None

Safe DDS v2.0.0

Platform

Version

Architecture

Compiler

Build system

Safety Level

Ubuntu

22.04

x86_64

GCC 12.1.0

CMake 3.5.0

None

QNX Neutrino

7.1

x86_64

QCC 8.3.0

CMake 3.5.0

ASIL D

FreeRTOS

v11.1

ARM Cortex-M

ARM GCC 10.3.1

CMake 3.5.0

None

NuttX

v12.6

RISC-V 32 bits

RISC-V GCC 13.2.0

CMake 3.5.0

None

Thread X

v6.4.1

ARM Cortex-M

ARM GCC 10.3.1

CMake 3.5.0

None

Bare Metal

None

ARM Cortex-M

ARM GCC 10.3.1

CMake 3.5.0

None

Communication stack

Version

Transport type

Safety Level

POSIX sockets

None

UDPv4

None

QNX Neutrino sockets

7.1

UDPv4

ASIL D

FreeRTOS-Plus-TCP

v4.2.2

UDPv4

None

LwIP (Raw and Socket API)

v2.2

UDPv4

None

NetX Duo

v6.4.1

UDPv4

None

Portability

Safe DDS interfaces with three main elements during its deployment procedure: the platform, the transport, and the toolchain.

During the build procedure, Safe DDS’s C++ code will need to be built using a C++ compiler, which is a requirement for the library’s operation. During the execution of the library, Safe DDS will interact with the platform’s execution environment, which will provide the necessary services for the library’s operation, and with the transport, which will provide the necessary communication services.

Platform dependencies

As stated in Platform module section, Safe DDS operates with an abstraction on top of the underlying execution platform. This way, Safe DDS will use the IPlatform interface and IAllocator interface to get access to:

  • the system monotonic clock reference,

  • default underlying memory allocators,

  • and error handling for stopping the execution in case of a fatal error.

Note

For more details about how to customize the platform, please check the Platform module section.

For reference, Supported platforms use the following APIs:

  • Ubuntu 22.04 uses the POSIX API: clock_gettime(), calloc(), and std::exit().

  • QNX OS 8.0 uses the POSIX API: clock_gettime(), calloc(), and std::exit().

  • QNX Neutrino 7.1 uses the POSIX API: clock_gettime(), calloc(), and std::exit().

  • FreeRTOS v11 uses the FreeRTOS API: xTaskGetTickCount() and pvPortMalloc(), and std::exit().

  • Other supported platforms will use the corresponding APIs for the underlying execution environment.

Transport dependencies

As stated in Transport module section, Safe DDS provides a set of transports that encapsulate the dependencies with the underlying communication stack. In general, Safe DDS will use the ITransport interface to be able to send and receive messages from and to locators.

Note

For more details about how to customize the transport, please check the Transport module section.

For reference, Supported platforms use the following transports:

  • Ubuntu 22.04 uses the POSIX sockets API: socket(), bind(), sendmsg(), and recvfrom(), among others.

  • QNX OS 8.0 uses the QNX OS sockets API: socket(), bind(), sendmsg(), and recvfrom(), among others.

  • QNX Neutrino 7.1 uses the QNX Neutrino sockets API: socket(), bind(), sendmsg(), and recvfrom(), among others.

  • FreeRTOS v11 uses the FreeRTOS-Plus-TCP API: FreeRTOS_socket(), FreeRTOS_bind(), FreeRTOS_sendto(), and FreeRTOS_recvfrom(), among others.

  • Other supported platforms will use the corresponding APIs for the underlying communication stack.

Toolchain dependencies

During the build procedure, Safe DDS will need to be built using a C++11 compliant compiler.

As stated in Portable module section, Safe DDS provides a set of header files that encapsulate the dependencies with the C and C++ standard libraries. Those files provide default implementations assuming a standard C++11 compliant compiler but they can be overwritten to provide a custom implementation.

A complete list of the dependencies that can be overwritten or customized in Safe DDS can be found in the Portable module section.

Note

For more details about how to override the toolchain dependencies, please check the Override C++ Standard Library and Portable module section.