# Vendor Interoperability
When communicating with other DDS vendors, the following settings enable compliance with the DDS-XTYPES specification.
## All Vendors — XTYPES Compliance Mask
The `NDDS_XTYPES_COMPLIANCE_MASK` environment variable configures RTI Connext to use DDS specification-compliant behavior for type compatibility:
```bash
export NDDS_XTYPES_COMPLIANCE_MASK=0x000001a9
```
This mask enables several interoperability flags:
- Comply with DDS-XTYPES 1.3 specification serialization rules
- Enable strict type validation for cross-vendor communication
The Python start scripts (`start_autopilot.sh`, `start_globalvector_consumer.sh`) include this line commented out — uncomment it when interoperating with other vendors.
This can also be done programmatically if necessary for a specific endpoint. See [RTI Connext XTYPES Compliance Documentation](https://community.rti.com/static/documentation/connext-dds/current/doc/manuals/connext_dds_professional/extensible_types_guide/extensible_types/Data_Representation.htm#ComplianceMask) for full details on mask values and API usage.
## Cyclone DDS
To ensure interoperability with Eclipse Cyclone DDS, the `CycloneInterop` QoS profile in `qos/umaa_qos_lib.xml` is provided as a convenience.
### Data Representation
- **Eclipse Cyclone DDS** uses XCDR2 serialization by default
- **RTI Connext** determines the serialization format based on the data type's extensibility kind (XCDR for final types, XCDR2 for appendable/mutable types)
`CycloneInterop` configures DataReaders to accept both XCDR and XCDR2 data representations:
```xml
XCDR_DATA_REPRESENTATION
XCDR2_DATA_REPRESENTATION
```
This ensures readers can receive data from writers using either serialization format.
See [RTI Connext DATA_REPRESENTATION QoS Documentation](https://community.rti.com/static/documentation/connext-dds/current/doc/manuals/connext_dds_professional/users_manual/users_manual/DATAREPRESENTATION_Qos.htm) for more details.
### Serialize Key with Dispose
RTI Connext uses a key hash for instance handles. When a dispose message is the first message received for a given instance, the receiver may not have the key values needed to identify it. `CycloneInterop` configures DataWriters to serialize the key value alongside dispose messages so that receivers (including Cyclone DDS) can correctly identify the instance:
```xml
true
```
This ensures cross-vendor dispose handling works correctly for keyed topics.
### Type Extensibility Kind
The default type extensibility in Cyclone DDS is `@final` instead of `@appendable`, which is the default according to the DDS-XTYPES specification. This mismatch may cause deserialization errors in Connext applications. It is recommended to explicitly set `@appendable` on the Cyclone side to align with the standard.
## Using `CycloneInterop` in Python
To apply the Cyclone interoperability profile in your Python component, inherit from or compose with the `CycloneInterop` profile in your QoS XML. Since the SDK uses `AssignerQoS` by default, you can layer the profile on top by setting it as the base for your custom QoS:
```xml
```
Alternatively, set the compliance mask environment variable before launching your application:
```bash
export NDDS_XTYPES_COMPLIANCE_MASK=0x000001a9
./start_autopilot.sh --domain-id 0
```