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 ofcurrent/into<module>/<version>/, with the version read verbatim from the component'smetadata.yaml. Snapshots are immutable and carry an AIDL.hashfor tamper-evidence (#502). versions.yamlmanifest — declares which version of each component to build;build_modules.sh manifestconsumes it (#502).drmHAL establishes the canonical content-protection surface;cdmHAL 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.yamldeclaresimports,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.shrather than a freeze operation. The script reads eachmetadata.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.aidlcannot 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.yamlandvsi/keyvault/metadata.yaml— these were namespace-only placeholders; the real HALs land as top-levelcryptoengine/andkeyvault/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 thestable/generate path and delegates tobuild_modules.sh.build_modules.sh— works against the module-local layout; gains amanifestcommand that builds the set listed inversions.yaml.- Snapshot CMakeLists — auto-written by
release.shand producelib<module>-v<version>-cpp.sodirectly 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)
- Update build scripts to point at
<module>/<version>/instead ofstable/generated/<module>/<version>/. - Adopt
versions.yamlas the manifest of which version of each component to build; or pass-D<MODULE>_VERSION=<v>to override. - Replace any reference to
cdm/withdrm/. The DRM HAL is feature-equivalent and the canonical surface going forward. broadcastcontinues to ship at its current layout until rdkcentral/linux_binder_idl#18 lands.
For HAL authors
- New components must live at top-level
<component>/withcurrent/interface.yaml,current/CMakeLists.txt, andmetadata.yaml. The release script auto-discovers via the*/current/interface.yamlglob (see #515 for the nested-path follow-up). - Bump
metadata.yamlversion:when releasing — the next./release.shrun will create the new<version>/snapshot. Do not edit the existing<version>/snapshot in place. - Generated C++ in
current/include/andcurrent/src/is regenerated only when the AIDL incurrent/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
broadcastHAL into the versioning framework once binder SDK FMQ support lands. - #508 — Automate
uplink.yamlrefresh from Confluence/Jira. - #513 — Complete release pipeline (mkdocs delivery, release branch + tag automation, no-op when no changes).
- #515 —
release.shglob: support nested component paths (vsi/<x>/current/interface.yaml). - #387 — Land
cryptoengine/andkeyvault/as top-level HALs (replacing the removedvsi/*placeholders).