Why Does the HTTP Package in Haskell Start with Version 3000?

Hi Haskell community,

I noticed that the HTTP package in Haskell starts its version numbers from 3000, which is quite different from most other packages that typically have version numbers like 0.1.2.3 or similar. Could someone explain why the HTTP package has such high version numbers starting from 3000? Is there a specific reason or history behind this numbering scheme?

Thank you in advance!

4 Likes

Haskell packages (using Cabal) have no enforced versioning scheme. Hackage, the package repository, has a recommended package versioning policy: the Haskell PVP Specification. But it’s only a recommendation.

I don’t know why the HTTP package in particular decided on that versioning. I can see it’s an old package, so maybe it came before Hackage PVP standardisation.

1 Like

I do not think PVP enforces a package to start at version 0.0.0.0 and include all consecutive numbers. In principle you could encode arbitrary information into version numbers, so far as they are ascending. For example, you can publish version 1.0.0.20240618 for a nightly build made today.

This does not explain why specifically HTTP decided to start at 3000. It could be an encoding for 3 and then another number padded with zeros to three digits. So maybe they had private versions 1-xxx and 2-xxx and only began publishing at version 3-000, then we can see 3-001 and 4-000.

2 Likes

Another package with unusual versioning is git-annex.

2 Likes

You’ll have to ask Bjorn Bringert, whose packages (HTTP, cgi, etc.) all used this convention.

4 Likes

It was a long time ago, but I seem to recall that we started using dates as version name prefixes (like 2008.12.31). Then we decided to stop doing that, but wanted to maintain the sort order, so we changed all the version names to start with 3000.

15 Likes