Backward Compatibility

From GNU Radio
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.