Major new features
- Python binding
- Support for DDS XTypes 1.3 (with some limitations)
Other significant changes
- The integration with Eclipse Iceoryx now uses Iceoryx 2.0
- Shared memory communication now supports arbitrary (that is, non-fixed-size) types and transient-local data
- For fixed-size types, true zero-copy is now supported within a machine
- The configuration of network interfaces is reworked, now also supports prioritising one interface over another
- Bison is no longer required to build Cyclone DDS (it is required if the IDL compiler grammar file is changed)
- Cross-builds have gotten much simpler and in particular get the default configuration initialisation correct
- QNX is known to work (the Cyclone DDS project doesn't control the infrastructure needed to list it as a "supported" platform)
- MinGW is now supported
- Thread liveliness monitoring can now also produce stack traces on Windows
- Support setting participant lease duration using the "liveliness" QoS on a participant
Bug fixes
- Various memory management issues in the IDL compiler
- Fix combining a typedef with defining a named type (i.e., typedef struct A {...} B)
- Fix a variety of array handling issues in the IDL compiler
- IDL compiler compatibility with bison 3.8
- Fixed incorrect serialisation of the "type consistency" QoS setting in the discovery messages
- Buffer overrun in constructing IDL compiler backend library name
- Incorrect CPU time usage reported on Windows by "ddsperf"
- Fixed incorrect location of vendor id code in GUIDs
- Changed overly-generic "libidl" to "libcycloneddsidl"
- MD5 collision attacks on key values no longer work (C API)
- Fix S390x compatibility (alignment issue on double-word CAS)
- Interface discovery using LwIP now actually lists all interfaces instead of just one
- Fixes a deadlock in "ddsperf" discovery processing
- Fixes a memory leak if a domain tag is set in multiple configuration fragments
- Fixes a memory leak if a domain is configured with a "default multicast address"
- Make internal representation of sequence numbers unsigned to eliminate possibility signed integer overflow
- Check that fragment numbers do not overflow unsigned 32-bit integers
- Validation of alignment of payload/submessages/inline QoS in incoming messages
- Apply a data_on_readers listener only on subscribers or participants
- Restore support for using raw Ethernet instead of UDP/IP
- Support fork() prior to creating the first domain/participant
- Fix queueing a second copy of a to-be-retransmitted message when it can't be combined with the first
No breaking changes in the stable API. Changes to configuration are handled with deprecation warnings where possible, with two exceptions:
- Specifying an network interface using a hostname is no longer possible
- Previously AssumeMulticastCapable configuration accepted more-or-less arbitrary wildcards, now it must be either be "*" or a list of interfaces
Both have always been slightly unusual features that have not really seen much use. Supporting it in the new configuration would only have added unnecessary complexity.