Anything downloadable owes its recipient a list of what is inside it. This board
will ship a binary, and the licences of whatever went into that binary travel with
it whether or not anybody wrote them down.
Two deliverables, and they answer different questions.
A third-party notices file, listing every dependency the shipped binary contains,
its version and its licence, with the licence texts that require reproduction
included in full. This is the legal obligation and it is not satisfied by a link,
because a link can rot and the obligation is to supply the text.
A software bill of materials generated at build time, from the build rather than
from a list somebody maintains. This is the operational answer to the question of
what an operator is running, and it is the item the parity work moved out of the
gate and into the release build, because it belongs where the artefact is built.
This issue sits with the legal work rather than with the release because the
notices half is a legal obligation that stands whether or not anything is ever
published, and the release workflow that attaches both is blocked on it.
Generated rather than written is the point of both. A hand-maintained list of
dependencies is correct on the day it is written and wrong shortly afterwards, and
it is wrong in the direction that matters, which is a dependency present in the
binary and absent from the list.
If the runner ends up with no third-party dependencies at all, which the language
and dependency decisions make plausible, then the notices file says exactly that
and the bill of materials is generated anyway. An empty result that was produced is
a different statement from a file nobody created.
Done when both artefacts are generated by the release build, both are attached to
the release, and a run against a tree with a dependency added produces a notices
file that lists it.
Anything downloadable owes its recipient a list of what is inside it. This board
will ship a binary, and the licences of whatever went into that binary travel with
it whether or not anybody wrote them down.
Two deliverables, and they answer different questions.
A third-party notices file, listing every dependency the shipped binary contains,
its version and its licence, with the licence texts that require reproduction
included in full. This is the legal obligation and it is not satisfied by a link,
because a link can rot and the obligation is to supply the text.
A software bill of materials generated at build time, from the build rather than
from a list somebody maintains. This is the operational answer to the question of
what an operator is running, and it is the item the parity work moved out of the
gate and into the release build, because it belongs where the artefact is built.
This issue sits with the legal work rather than with the release because the
notices half is a legal obligation that stands whether or not anything is ever
published, and the release workflow that attaches both is blocked on it.
Generated rather than written is the point of both. A hand-maintained list of
dependencies is correct on the day it is written and wrong shortly afterwards, and
it is wrong in the direction that matters, which is a dependency present in the
binary and absent from the list.
If the runner ends up with no third-party dependencies at all, which the language
and dependency decisions make plausible, then the notices file says exactly that
and the bill of materials is generated anyway. An empty result that was produced is
a different statement from a file nobody created.
Done when both artefacts are generated by the release build, both are attached to
the release, and a run against a tree with a dependency added produces a notices
file that lists it.