Skip to content

RDK HALIF AIDL 0.20.0 Release Notes — Convergance

Release date: 26 May 2026

Base comparison: 0.15.1...0.20.0

Headline

0.20.0 is a structural release, not an interface release. No AIDL contract changed; consumer API code does not need to change. The build system, file layout, and release model have been comprehensively reorganised. Integrators must update their build configuration to consume the new module-local layout and copy-based snapshot model.

The repo tag jumps from 0.15.1 straight to 0.20.0 to signal the structural break loudly; per-component metadata.yaml version: values are deliberately unchanged, because the interface contracts they describe are byte-identical.

Highlights

  • AIDL versioning framework for RDK-E HAL — every component now has versioned interface definitions with hash-based change detection (#75 / #161).
  • Module-local component layout — each HAL is self-contained under <module>/current/ (AIDL, generated C++, docs, build config) and under <module>/<version>/ for releases (#493 / #502).
  • Central stable/ tree retired — generated C++ is now committed inside each component, so production builds need no AIDL toolchain or Python (#502).
  • Copy-based release.sh — releasing a component is a plain copy of current/ into <module>/<version>/, with the version read verbatim from the component's metadata.yaml. Snapshots are immutable and carry an AIDL .hash for tamper-evidence (#502).
  • versions.yaml manifest — declares which version of each component to build; build_modules.sh manifest consumes it (#502).
  • drm HAL establishes the canonical content-protection surface; cdm HAL removed as superseded (#510).
  • Documentation consolidation (Phase A) — component docs now live inside their component directory rather than under a parallel top-level docs/halif/ tree (#493 / #495).
  • Per-component interface.yaml declares imports, layout, and version metadata for the build system.

Structural Changes

Module-local layout (every component)

<module>/
  metadata.yaml                                   # version, status, reviewers
  current/                                        # in-development
    interface.yaml                                # imports, layout: module-local
    hfp-<module>.yaml
    CMakeLists.txt
    com/rdk/hal/<module>/*.aidl                   # AIDL sources
    include/com/rdk/hal/<module>/*.h              # generated C++ headers
    src/com/rdk/hal/<module>/*.cpp                # generated C++ sources
    docs/<module>.md                              # component docs
  <version>/                                      # released snapshot (copy of current/)
    interface.yaml hfp-<module>.yaml CMakeLists.txt
    com/  include/  src/  docs/

Retired

  • The top-level stable/ tree (was: central generated-C++ + frozen AIDL copies).
  • The top-level docs/halif/<module>/ tree (was: component documentation detached from the component).

Replaced

  • Per-component snapshots are now plain copies created by the new top-level ./release.sh rather than a freeze operation. The script reads each metadata.yaml, creates <module>/<version>/ if it does not yet exist, and skips otherwise.

Component Catalogue Changes

Added

  • drm — Digital Rights Management HAL. Provides IDrmPlugin, IDrmPluginListener, IDrmFactory, ICryptoPlugin, and supporting key/metric/status types.

Removed

  • cdm — superseded by drm. Use drm/ for content protection.

Not yet integrated into the versioning framework

  • broadcast — excluded pending FMQ support in the binder SDK (rdkcentral/linux_binder_idl#18 / tracked here as #494). All other HALs that use FMQ have been re-shaped to avoid the dependency; broadcast's SoftwareSink.aidl / SoftwareSource.aidl cannot be re-shaped without losing the streaming data path. Will be integrated in a follow-up release once the upstream FMQ support lands.

Placeholders removed

  • vsi/crypto/metadata.yaml and vsi/keyvault/metadata.yaml — these were namespace-only placeholders; the real HALs land as top-level cryptoengine/ and keyvault/ via a follow-up PR (#387).

Build System Changes

  • build_binder.sh — builds the binder SDK in two stages (toolchain, then modules).
  • build_interfaces.sh — retires the stable/ generate path and delegates to build_modules.sh.
  • build_modules.sh — works against the module-local layout; gains a manifest command that builds the set listed in versions.yaml.
  • Snapshot CMakeLists — auto-written by release.sh and produce lib<module>-v<version>-cpp.so directly from the committed pre-generated C++. No toolchain dependency at consumer build time.

Interface Changes

None at the AIDL contract level.

Every AIDL file in <module>/current/com/rdk/hal/<module>/ is byte-identical to its 0.15.1 counterpart (modulo path reorganisation). No method added, removed, or renamed. No enum value reordered. No parcelable field changed.

This is intentional. The interface stability promise is independent of the build/layout reorganisation.

Breaking Changes

Surface Break Action required
Build layout stable/ tree retired; component sources, generated code, and docs all moved under <module>/current/ Update integrator build scripts to point at the new paths. The <module>/<version>/ snapshot directory is the canonical consumption point.
Generated C++ location Was under stable/generated/<module>/<version>/; now under <module>/<version>/include/ and <module>/<version>/src/ Update CMake include paths. Snapshot CMakeLists.txt produces the same lib<module>-v<version>-cpp.so library name as before.
cdm/ HAL Removed entirely Migrate to drm/.
metadata.yaml schema (Already in 0.15.0): generation field removed; VTS_Team renamed to Vendor_Layer_Team; RTAB_Group dropped. (0.20.0 cleanup): drm/metadata.yaml caught up with this refactor. Tooling reading metadata.yaml must consume the post-0.15.0 schema.

Migration Notes

For consumers (build/integration owners)

  1. Update build scripts to point at <module>/<version>/ instead of stable/generated/<module>/<version>/.
  2. Adopt versions.yaml as the manifest of which version of each component to build; or pass -D<MODULE>_VERSION=<v> to override.
  3. Replace any reference to cdm/ with drm/. The DRM HAL is feature-equivalent and the canonical surface going forward.
  4. broadcast continues to ship at its current layout until rdkcentral/linux_binder_idl#18 lands.

For HAL authors

  1. New components must live at top-level <component>/ with current/interface.yaml, current/CMakeLists.txt, and metadata.yaml. The release script auto-discovers via the */current/interface.yaml glob (see #515 for the nested-path follow-up).
  2. Bump metadata.yaml version: when releasing — the next ./release.sh run will create the new <version>/ snapshot. Do not edit the existing <version>/ snapshot in place.
  3. Generated C++ in current/include/ and current/src/ is regenerated only when the AIDL in current/com/... changes. Snapshots never regenerate.

For API consumers (Java/C++ application code)

Nothing to change. AIDL contracts are unchanged.

Notable Pull Requests

  • 161 — AIDL versioning framework for RDK-E HAL (#75).

  • 502 — Phase B: module-local AIDL layout, copy-based releases, versions.yaml (#493).

  • 495 — Phase A: component documentation consolidation.

  • 514 — release-prep cleanup: cdm removal, vsi/crypto+keyvault placeholder removal, lifecycle reset, drm metadata catch-up, 0.15.x release notes backfill (#509–#512).

  • 364 — uplink.yaml Jira ticket index.

Tracked Follow-ups

  • #494 — Integrate broadcast HAL into the versioning framework once binder SDK FMQ support lands.
  • #508 — Automate uplink.yaml refresh from Confluence/Jira.
  • #513 — Complete release pipeline (mkdocs delivery, release branch + tag automation, no-op when no changes).
  • #515release.sh glob: support nested component paths (vsi/<x>/current/interface.yaml).
  • #387 — Land cryptoengine/ and keyvault/ as top-level HALs (replacing the removed vsi/* placeholders).