0

I've been working on an open source project recently and have been checking out Core Infrastructure's best practices checklist.

One of the items pertaining the "Change Control" checklist is as follows:

To enable collaborative review, the project's source repository MUST include interim versions for review between releases; it MUST NOT include only final releases.

This confused me as to what "interim versions" are, objectively. Looking up "interim version" in different contexts never yielded me anything besides a broad term of "intervention", which makes sense but returned no real examples of.

Does the classic git workflow where we have automated checks, PRs, code reviews and a development branch count as a form of interim? Or are they something else, that need to be tagged in version control as their own version?

  • 2
    I think they mean including the commits between releases, not just squashing every release to a single commit on the previous release. – jonrsharpe Jun 26 at 8:38
  • @jonrsharpe So why is this not an answer? – lucasgcb Jun 26 at 9:18
  • 1
    Because I don't know. – jonrsharpe Jun 26 at 9:19
3

The introduction at the top of the criteria for that initiative includes this sentence:

For example, some practices enable multi-person review before release, which can both help find otherwise hard-to-find technical vulnerabilities and help build trust and a desire for repeated interaction among developers from different organizations.

The mention of "review" is repeated in the repo_interim criterion:

To enable collaborative review, the project's source repository MUST include interim versions for review between releases; it MUST NOT include only final releases.

Changes are much easier to review when they are broken down into small, individually-described, pieces. So allowing someone to view the log of changes you made to a project is an important part of leaving it open to review.

Some open source projects do not allow access to their internal development process, instead releasing each completed version along with its source code. This requirement is making clear that posting a snapshot of each release to a public repository is not sufficient, even though it would meet the repo_public criterion:

The project MUST have a version-controlled source repository that is publicly readable and has a URL.

For example, a repository which had only "final releases" might look like this:

af564c2  Snapshot version 1.0
bc459aa  Snapshot version 1.1
affe00a  Snapshot version 1.2
004bac2  Snapshot version 2.0

Whereas a repository which made the public development history available would have additional commits, more like this:

ab98c24  Release version 1.0
be564c3  Worker vomit now work when someone walk on the cloud
ae459af  Elbows should only bend in certain, expected, ways regardless of what T-Shirt you are wearing.
29fe005  Release version 1.1
99e5bc1  Players eyes now reflect how drunk they are
664bac1  Release version 1.2

(Sample commit messages courtesy of The Strange Log)

This is more than just publishing the log of the changes, as anyone looking at the repository can check out, say, commit ae459af. This is an "interim version" in the sense that it's a state of the application somewhere between release 1.0 and release 1.1.

This is also important to the "right to fork": if the elbow fix was controversial, someone could check out the "interim version" of the application in commit be564c3 and create their own release. If they only had access to the 1.0 and 1.1 source code, this would be harder to do.

  • Now I'm more confused. So they say interim version but what they really mean is the development history/log? – lucasgcb Jun 26 at 12:05
  • 1
    @lucasgcb An "interim version" is just a point in time of the application's development that you haven't given a version number to. I've added an example. – IMSoP Jun 26 at 14:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.