Warren's Package Naming Proposal - Revision 1

Warren Togami warren at togami.com
Fri Oct 31 14:31:09 UTC 2003


Mike A. Harris wrote:
> 
>>vepoch
>>This is our term for "version specific epoch", used in all packages as a 
>>simple means of ensuring upgrades by simple incrementing the leading 
>>number within the release tag.  vepoch is otherwise known as "release 
>>number" or "patchlevel".  Read C-2 for more information.
> 
> 
> The "Epoch" tag is already quite confusing to many/most beginner 
> and intermediate packagers, perhaps even some advanced packagers. 
> It's often used when not needed, and with a small amount of 
> forethought when packaging things can be completely avoided in 
> many if not all cases where Epoch ends up being used nowadays by 
> someone.
> 
> I think your "vepoch" tag potentially adds confusion between what 
> Epoch is and what vepoch is.  I unfortunately don't have a better 
> name to offer other than perhaps "versionserial" to indicate a 
> monotonically increasing serial number tied to a version.
> 
> Just a personal opinion that this might confuse people, and if a 
> better name can be chosen that is short enough and clear, it 
> might be better.

Hmmm, I am in agreement.  While we fedora.us people had no problem with 
vepoch for many months, I can see where it is confusing.  I designed the 
name to be "Kind of like epoch, vepoch trumps all, but less."

Perhaps "patchlevel" is a better word.

>>B. Version
>>==========
>>If the version is only numbers, then these numbers can be put into the
>>"version" field of the RPM .spec unchanged.  If the version contains
>>non-numeric characters, this creates several problems for RPM version
>>comparison and a broken upgrade path.
>>
>>Example:
>>foobar-1.2.3beta1.tar.gz
>>foobar-1.2.3.tar.gz
>>
>>While the "1.2.3" version is newer than the 1.2.3beta1 version, RPM
>>version comparison thinks the former is newer.
>>
>>Example:
>>foobar-1.0a
>>foobar-1.0b
>>
>>The "1.0b" version is higher than "1.0a", but all versions of RPM prior
>>to rpm-4.2-0.55 are confused when it tries to compare letters. Whichever
>>package is first in the comparison "wins", thus this becomes a  two way
>>upgrade problem.  This a < b comparison works properly only in RH9 and 
>>higher.
>>
>>For simplicity, Fedora treats both pre-release and post-release
>>non-numeric version cases the same, making the version purely numeric
>>and moving the alphabetic part to the release tag.  Take the numeric
>>portion of the source version and make that the package version tag.
>>
>>Read C-3 for more details.
> 
> 
> I strongly agree with this approach.  Probably because I stole it 
> from bero, and I think you picked it up from me or from bero 
> also.  ;o)  It works very well IMHO.  It's also very useful with 
> CVS based releases where you can embed the CVS date into the 
> release field instead of the version field, thus avoiding having 
> to use Epoch later on to override the large integer release 
> number from a CVS date.

Yes, when I originally designed this method I was pointing at bero's 
packages as justification.  "See!  Look, Red Hat did it!"

Conspiracy theory: Was he canned because of persecution from aberrant 
packaging? =)
Ok... bad joke.

>>C-3. Non-Numeric Version to Release
>>-----------------------------------
>>As mentioned above in section B (Version) and C-2 (Vepoch), non-numeric
>>versioned packages can be problematic so they must be treated with care. 
>> These are cases where the upstream version has letters rather than
>>simple numbers in their version.  Often they have tags like alpha, beta,
>>rc, or letters like a and b denoting that it is a version before or
>>after the number.  Read section B to understand why we cannot simply put
>>these letters into the version tag.
>>
>>Release Tag for Pre-Release Packages:
>>     0.%{X}.%{alphatag}
>>Release Tag for Non-Numeric Post-Release Packages:
>>     %{X}.%{alphatag}
>>
>>Where %{X} is the vepoch increment, and %{alphatag} is the string that
>>came from the version.
>>
>>Example (pre-release):
>>     mozilla-1.4a.tar.gz   from usptream is lower than
>>     mozilla-1.4.tar.gz    the later "final" version thus
>>     mozilla-1.4-0.1.a     Fedora package name
>>
>>Example (pre-release):
>>     alsa-lib-0.9.2beta1.tar.gz  becomes
>>     alsa-lib-0.9.2-0.1.beta1
>>
>>Example (post-release):
>>     gkrellm-2.1.7.tar.gz
>>     gkrellm-2.1.7a.tar.gz       Quick bugfix release after 2.1.7
>>     gkrellm-2.1.7-1.a
> 
> 
> For gkrellm is this necessary?  rpm considers 2.1.7a newer than 
> 2.1.7 already unless something has changed.  Another package of 
> this nature is UW imap.  It is generally released with an integer 
> based version number of the year of it's release, possibly 
> followed by a single letter indicating a revision within that 
> year.  ie:  imap-2000 imap-2000a imap-2000b
> 
> In rpm's normal operation these packages are naturally treated as 
> the older package on the left, with the newer ones proceeding to 
> the right.
> 
> My personal preference would be to just let rpm assume that as it
> should work.  I've never gotten bug reports of it not working
> anyway.  Moving things from the version to the release field
> unnecessarily just complicates packaging when there's no real
> benefit IMHO.  For the pre-release cases above it makes sense as
> it's being done in order to override rpm's default behaviour,
> which would be to treat what is a final release as older than a
> prerelease.
> 
> I believe treating both pre-release and post-release in the same
> manner just for consistency with both types of lettered versioned
> packages is just cosmetic consistency, but doesn't provide any
> functional or technical benefit.  In other words, sticking with
> the upstream version in the version field is IMHO best unless
> there is a technical benefit of doing so, such as avoiding having
> to later use Epoch to override a prerelease build.
> 
> Are there cases where rpm would consider imap-2000a as older than 
> imap-2000?
> 
> jbj?
>

Err... you are completely right about it not being necessary in the 
post-release case.  I am not sure why our fedora.us policy retained that 
even though it was unnecessary for all these months.  The way I 
understand the older version of rpm broken rpmvercmp behavior, this 
wouldn't be a problem with those versions too.


>>C-4. Dist tag
>>-------------
>>In cases where the same SRPM and patchlevel is used between two or more
>>distributions supported by Fedora, a dist tag is appended to the end of
>>the release tag defined in C-2 and C-3.  The dist tags with the
>>following examples appear to be only cosmetic, however the a different
>>E-V-R is needed between distributions to ensure dist upgrading works
>>fully in all corner cases.
>>
>>Dist Tag for Normal Packages:
>>     %{X}.%{disttag}
>>Where %{X} is the vepoch and %{disttag} is a distribution tag from this 
>>table:
>>
>>0.7.3 Red Hat Linux 7.3
>>0.8   Red Hat Linux 8
>>0.9   Red Hat Linux 9
>>1     Fedora Core 1
>>1.93  Fedora Core 1.93 beta
>>1.94  Fedora Core 1.94 beta
>>2     Fedora Core 2 beta
>>
>>Example:
>>     foobar-1.2.3-1_0.7.3.i386.rpm
>>     foobar-1.2.3-1_0.8.i386.rpm
>>     foobar-1.2.3-1_0.9.i386.rpm
>>     foobar-1.2.3-1_1.94.i386.rpm
>>     foobar-1.2.3-1_2.i386.rpm
>>
>>Upgrade Path Example (FC1 only shown):
>>     foobar-1.2.3-1_1.i386.rpm
>>     foobar-1.2.3-2_1.i386.rpm
>>     foobar-1.2.3-3_1.i386.rpm
> 
> 
> Ick.  Underscores in version/release are hideous IMHO.  I'd use 
> "." instead of "_".  Your comment at the top of this section 
> indicates a ".", so perhaps you just made a typo, and sequence of 
> cut and paste errors?  ;o)

Oops.  Yeah, fedora.us original plan was ".", however some here on 
fedora-devel-list argued toward "_" as a more clear separator between 
the patchlevel and disttag because it can be confusing with so many "."

I personally actually prefer the "." separator, but I really don't care 
which is chosen.

Warren





More information about the fedora-devel-list mailing list