Here's a short description of the change. An rpm header has three sections:
1) intro (# entries in index, # bytes of data) 2) index 16 byte entries, one per tag, big endian 3) data tag values, properly aligned, big endian
Representing sections in the header (ignoring the intro) with
a header with 3 tag/value pairs (A,a) can be represented something likeA,B,C index entries sorted by tag number a,b,c variable length entry data | boundary between index/data
ABC|abc
The change is to introduce a new tag that keeps track of a contiguous region (i.e. the original header). Representing the boundaries with square/angle brackets, an "immutable region" in the header thus becomes
or more generally (spaces added for clarity)[ABC|abc]
or with concatenated regions (not implemented yet)[ABC> QRS | <abc] qrs
or with nested regions (not implemented yet)[ABC> [DEF> QRS | <abc] <def] qrs
[ABC [DEF>> QRS | <<abc] def] qrs
[A.C> QRS XYZ | <a.c] qrs xyz
[AB.> QRS D | <ab.] qrs d
[ABC|abc]
region. PITA, really.
What made header regions trickier yet is the desire to have an implementation that is both backward and forward compatible. I won't bore you with the tedious details.
However, even after doing regressions against supported Red Hat releases, there's a Great Big Universe of rpm packages out there, and I'm *very* interested in hearing (as bug reports against rpm at http://bugzilla.redhat.com) about any and all problems with header regions in rpm-4.0.1.