Backward Compatibility
Jump to navigation
Jump to search
This page is a work in progress
Type of Backward Compatibility
Libraries can typically define backward compatibility with respect to the API and ABI. GNU Radio is a library, but also has a number of other dimensions.
C++ Libraries
- C++ ABI compatibility means that existing binaries that link against GR will dynamically link and run with a new version of GR.
- C++ API compatibility means that a developer's source code (e.g, an OOT module) will build against a new version of GR with no modification.
Python Modules/Libraries
- Pure Python
- C/C++ wrappers (SWIG/PyBind11)
- Embedded Python blocks
GNU Radio Companion
- Schema for block YAML
- Schema for GRC YAML
- Block description (parameters, ...)
- Template code for Python and C++
- Autogenerated code
Data Interfaces
- Serialization (PMT)
- ZMQ (e.g., timeouts)
- Networking (e.g., MTU)
Streams
- Type definitions (stable)
- Types available for a block
- Block ports, whether required, whether number is configurable or fixed
Messages
- Message ports, whether required
- Format
- Meaning
Tags
- When required, when produced
- Format
- Meaning
Text
- Console output
- Logging
Dependencies
- Build environment
- Runtime environment (usually solved by packaging)
Configuration
- Files for GR, GRC
- Environment variables
Behavior
- Algorithm changes
- Runtime changes (e.g., threading behavior)
- Generated GUI (layout, operation)
GNU Radio Versioning
GR uses semantic versioning with four digits (W.X.Y.Z).
- W: general concept, fixed at "3" until a major shift occurs
- X: API version for C++ libraries and Python modules. External C++ and Python code may require modification, sometimes significant.
- Y: ABI version for C++ libraries. External C++ code needs to be rebuilt, but not modified.
- Z: Patch version. No rebuild required.