Replies: 1 comment
|
The proposed ADR-0045 text is now in draft pull request #782, so you can read the exact wording next to this thread. Keep the discussion of the decisions and open questions here. That PR stays on hold until the thread settles. |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
The problem
The dmfdeploy platform deploys media functions on demand. Some of those functions will come from outside publishers and will need a commercial licence to run. The platform has no licensing model yet. ADR-0045 parks the topic behind a reservation seam with four calls (
check,reserve,release,usage) and a descriptor block of{class, count}pairs. It's still Proposed.In September 2026 the International Association of MediaTech (IAMT) published Dynamic Software Licensing Best Practices v1.0.0 (DSL). It's an industry model for this exact problem: short-lived, automated media workloads that move between sites and clouds. DSL separates the durable commercial entitlement from the time-bounded, signed lease that binds part of it to one running workload (§07.01). Today's ADR-0045 doesn't fit that model. It reserves seats before deploy, binds them to an inventory id, and counts with one number where DSL uses dimensions such as channels and frame rate. The function descriptor is being designed now, so this is the cheapest moment to change the shape, before any publisher builds against it.
Section numbers below (§, Annex, and requirement ids such as INT-2) refer to the DSL document.
Proposed decision
The draft ADR decides only what the DSL text settles. Everything else is an open question below, and the platform builds no licensing adapter until those questions have answers.
workIdand the descriptor's entitlement fields. This depends on the platform's workload identity work: the control plane has to trust the cluster's token issuer, with no standing vendor access into the cluster (IDB-6).workIdcorrelates; it never binds. The platform supplies it for idempotency and audit (§07.01, §10.01, INT-4). The platform keeps its own record of the human who asked for each action, linked throughworkId, because DSL audits lease events only.DELETE /v1/leases/{leaseId}with a required reason, and the lease becomes REVOKED (§10.05). Teardown sends reasondecommissioned. A failed launch revokes any lease it got. A lease already REVOKED, EXPIRED or TERMINATED counts as closed. A REISSUING lease, or a refused close, is a failure the operator sees.licence:block withapp(the publisher's DSL application id),modality, an optionaltermsent aslicenseModality(such ashourly), anddimensions, each a publisher-documented name and a quantity (MTR-1).modalityis the project's own classification, built on the §04.03 modality concepts. It's distinct from thelicenseModalityvalues in §10.02. The required SPDX fieldsoftware_licencedescribes the software's own licence and stays separate. Grace policy and limits belong to the entitlement in the control plane (OFG-3, §11.02).workIdmatches no live instance.licence:block and the console may display it. Nothing calls a control plane, gates a launch or stores lease state. Release text says "licence declared" and not "licensed."workIdorleaseIdas a reference. Lease state stays in the control plane.What changes from today's ADR-0045
checkandreservego away. Plan holds nothing, and the workload's agent issues the lease at Provision.releasebecomes DSL Revoke, with a reason.{class, count}to an app id, a modality and dimensions.Open questions
These block the adapter slice. Each comes with a recommendation; push back on any of them.
workIdcontract. DSL requires a string and specifies nothing else. We need its construction and encoding, its length and character set, who generates, persists and delivers it to the agent, what a retry, a restart and a new launch do to it, and whether it's namespaced by tenant. Recommendation: the platform generates one value per function instance per launch and stores it with the instance. A retry of the same launch reuses the stored value, and a new launch gets a new one. It's delivered to the agent as package configuration and stays unique within the tenant.leaseIdonly, but the agent, which the platform doesn't control, receives that id. The choice is a required backend extension (an entitlement query and lookup byworkId, with defined requests, responses and errors) or a fallback in which the agent reports itsleaseIdand Plan only ever showsunknown. Recommendation: accept both. Prefer the extension, fall back to the agent report, and never show an entitlement as covered without an answer.decommissionedand accept REVOKED, unless a backend offers a documented terminate extension. Ask IAMT whether a future revision should add one.expand the signed policy's grace fields, and it shows "grace state unknown" once telemetry is stale.modalityvalues and how dimension names and units line up with the capability classes the platform's marketplace work is defining. Recommendation:time,process,outcomeandunit-pool, following §04.03. Where a dimension names a resource the capability classes define, such as channels or frame rate, use their name and unit. Elsewhere, publishers document their own upper-case names.api/dsl-api.openapi.yaml, but the document gives no address for the repository that holds it. Recommendation: find the authoritative repository before anyone designs the adapter.How to comment
Reply in this thread. Quote the decision point or open question by its number, and say whether you agree, disagree, or have evidence either way. Citations to DSL sections help the most. When the thread settles, the revised ADR-0045 follows in a pull request that links back here.
All reactions