Skip to content

comments about rule 5: "Specify software versions" #100

@sdettmer

Description

@sdettmer

comments about rule 5: "Specify software versions"

  1. A version number is not reliable, usually it cannot be formally guaranteed that an artifact identified by name and version is unique. There were examples where packages were repackaged due to errors in included license terms. This should normally of course have no effect on the build result, but it can be. In a very different environment (i.e. not docker) once (and many years ago) I had a case in my team where a library returned a identifier string (version string) that was copied into a static sized buffer, which overflowed and lead to a crash right at the start of the application linked against that library. The version string was “fixed” without changing the version number because “legal reasons” but got a few characters longer, and in a combination with other issues lead to the buffer overflow.
  2. Nowadays we can observe another bad habit called semantic version https://semver.org/spec/v1.0.0.html. Where a library is available in version 1.2.3 and version 1.2.4 and 1.2.3 needs to be patched, a strong branch-able version scheme would introduce 1.2.3.0.1 (yes, two more digits are required for the general case), but with SemVer people are just lost. They try to address some issues in their 2.0.0 version, which would allow to call the 1.2.3 patch 1.2.4-<ALPHATAG>, because 1.2.4-<alphatag> is between 1.2.3 and 1.2.4, but it is at least counter intuitive and still broken by design. glibc had a famous license issue and presented versions with a postfixed a, like 1.23a (I don’t recall what versions were affected). Any other project can choose any other scheme and each breaks reproducibility. Local copies are required.
  3. Versions of forcibly used local copies technically don’t matter. In short: The system must be stable even for bad versions - which in turn means, versions don’t need to be good.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions