[distri] Re: Questions about packages and versioning

  • From: Michael Stapelberg <michael+distri@xxxxxxxxxxxxx>
  • To: distri@xxxxxxxxxxxxx
  • Date: Wed, 16 Oct 2019 23:06:42 +0200

Hey Wiktor,

thanks for your mail. Answers inline:

On Wed, Oct 16, 2019 at 9:26 PM Wiktor Kwapisiewicz <
dmarc-noreply@xxxxxxxxxxxxx> wrote:

Hello,

I just found Distri and it looks like the project is very interesting
(both from the current design principles and the general idea of trying
out something new).

I've got some questions about packages and versioning if you don't mind.

I see Distri already supports custom repositories with "distri install
--repo" option (e.g. "distri install --repo=https://example.com curl";)
where the target textproto URL is constructed from several concatenated
parts.

Maybe a simpler alternative would be using system similar to what Go
uses for imports (and other projects borrow, such as Docker): embedding
the repo name in the package name (so having packages such as
"example.com/curl") and then directly fetching that URL (Go always uses
"https://" scheme). Details here:
https://golang.org/cmd/go/#hdr-Remote_import_paths


Per se, we could probably implement the idea of accepting a form of package
specifier which includes the repo name.

It’s not entirely clear to me whether you’re suggesting that packages
should always be fully-qualified (like they are in Go) or only optionally.

Requiring all packages to be fully-qualified nudges people into the
direction of using different repositories more so than when they need to
configure an extra repository beforehand.

Currently, my philosophy favors a centralized package repository where
software can be tested and bugfixed together, eventually converging on a
stable artifact such as distri’s current “jackherer” release branch. It is
much harder to get to a stable system when users are mixing and matching
software versions from different package repositories.




How is versioning handled in Distri?

I've seen some code comparing versions:
https://github.com/distr1/distri/blob/master/cmd/distri/install.go#L428
but it looks like it's comparing strings and this could produce
non-intuitive behavior (e.g.: https://play.golang.org/p/kZFL_UOI9kz ;).

Android separates the visible, marketing important version (versionName)
from version used for comparisons if the package should be upgraded
(versionCode). VersionCode is an integer increased on each new version
where the value is not significant. Details here:
https://developer.android.com/studio/publish/versioning#appversioning


We in fact do the same thing in distri, though it isn’t as clear as it
could be, because it was added relatively late in the project: version
numbers are segmented in <upstream>-<revision>, where <revision> is a
monotonically increasing integer, just like versionCode in Android. We
should split this one field into two separate fields eventually.




Thank you for your time!

Kind regards,
Wiktor

--
https://metacode.biz/@wiktor


Other related posts: