Distinguishing Debian testing from unstable
Like most distributors, Debian maintains a few versions of its distribution, some of which are more stable than others. The Debian project creates a major stable release approximately every two years; this release will receive three years of support from the project, followed by two years of reduced long-term support. The current stable Debian release is Debian 12, called "bookworm". Development of future releases is done in the unstable distribution, also known as "sid". While it is possible to run an unstable system for real-world use (and many people do), one has to be prepared for things to break on occasion. A somewhat gentler experience can be had from Debian testing, which receives packages that have lived in unstable for a period without causing serious problems.
The testing distribution is essentially the next major Debian stable release — it's just not quite done yet. It already carries the next release's code name ("trixie" at the moment); a user who installs trixie now will get a system that will evolve and stabilize into the stable release.
These distributions, like almost all others in recent times, include a file called /etc/os-release that tells interested software what kind of system it is running on. This file has a standard format that all distributions are expected to follow. The full contents of /etc/os-release on a Debian bookworm system are:
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
The idea is that any program that needs to change its behavior depending on the type of system it is running on can consult this file and act accordingly. In Debian systems, /etc/os-release is shipped as part of the base-files package.
Bringing in the Technical Committee
On August 1, Luca Boccassi, frustrated with how a bug discussion was going, approached the Debian Technical Committee with a long-simmering disagreement; he requested a decision that would override the base-files maintainer and remove /etc/os-release from that package. The Debian implementation of that file, he asserted (as the maintainer of the os-release specification), is buggy. Specifically, it does not properly identify the testing and unstable distributions, making it impossible for software to distinguish between the two using only /etc/os-release. The problem, he said, is real:
These issues are not just theoretical, and do not concern mere personal preferences or cleanliness or code quality or ugliness. They cause very real, very actual and very painful grief for Debian users, as evidenced by the multiple independent bugs with multiple independent reporters chiming in, and the multiple ugly hacks that have to be implemented as Debian-specific workarounds.
He complained specifically that the code name in unstable is currently set to trixie, which he sees as being misleading at best. The testing distribution will indeed become the next stable release, he said, at which point it will gain security support, then eventually proceed toward its end of life. It is essentially trixie, so use of that code name there is appropriate. Unstable, instead, will never become stable, will never have security support, and will never reach end-of-life. Software running on these systems should be able to tell what the expected life cycle for the distribution is; using the trixie code name there makes that impossible.
He suggested that unstable should have the following lines in /etc/os-release:
PRETTY_NAME="Debian GNU/Linux sid"
NAME="Debian GNU/Linux"
VERSION_CODENAME=sid
While testing should have:
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
RELEASE_TYPE=pre-release
The RELEASE_TYPE would change to lts once the trixie stable release happens. The key change, he said, is the VERSION_CODENAME line, which tells software what kind of Debian system they are running on.
The number of voices supporting this change was relatively small. Gioele
Barabucci, the maintainer of the lsb_release implementation, said that
similar issues had come up with that package. As of the bookworm release,
lsb_release obtains all of its information from
/etc/os-release, so it, too, cannot distinguish between testing
and unstable. Users have requested that ability, he said, and may well
bring the issue to the Technical Committee if the current discussion does
not give them what they want. Marc Haber said that he
"would not cry
" if he were able to remove his current workarounds
for this problem.
Disagreement
Needless to say, there is opposition to this change, or the discussion
would have never reached the Technical Committee. Numerous participants
said that they simply did not see the benefit of this change, and that
Boccassi had not provided examples of where the distinction was truly
important (a position that Boccassi disagreed
with). Russ Allbery said: "I admit to not
finding this use case compelling
", adding that the proposed use cases
come from "misunderstandings of how Debian works
". The packages
that are in unstable today will be in testing tomorrow, perhaps with no
change at all; what was actually of interest, he suggested, was which
repository new packages for a given system would come from. That
information can be found by parsing the package-management configuration.
As Simon McVittie described,
many Debian developers see unstable as "a tool to be used as part of the
process of making our next stable release
" rather than a separate
distribution in its own right. To treat unstable differently in its
/etc/os-release file would challenge that view of how things work;
that is a step that many developers would rather not take.
In more technical terms, McVittie laid out how the proposed change could lead to trouble:
That also breaks some of the design principles of the unstable -> testing -> stable flow, which are that testing should be approximately equivalent to a previous state of unstable (one where everything worked acceptably together), the next stable should be functionally equivalent to a late-freeze version of testing, and as little as possible should change as we cross release milestones, to avoid perturbing packages' behaviour.
He later gave a specific example of how changing /etc/os-release could create regressions as packages move into testing. In short, a package that changes its behavior depending on the release code name might work in unstable, but misbehave once it transitions to testing and sees a different code name.
Allbery also described the idea of testing and unstable being different distributions as poorly defined. A system installed from the trixie repository will evolve into the next stable release and go through the life cycle described by Boccassi. A system installed from the testing repository, instead, will begin with the exact same set of packages (since trixie and testing are currently synonyms), but will move forward to the next release (to be called forky) once trixie is released and will have a different life cycle. It is not really possible for a single /etc/os-release file to describe both scenarios:
This sort of ambiguity is, I think, part of why this proposal generates so much discussion. Debian simply doesn't currently have clean semantics for testing. It exists in a sort of quantum superposition where it is multiple things simultaneously for different people, and this proposal is trying to label it in a way that collapses that state to match the mental model of one group of people, invalidating the mental model of a different group of people.
Boccassi disagreed with all of these positions, of course; he summarized
the situation as "a trivial technical problem with a hard social
conflict at its core
".
The trial
What Boccassi did not do was change many (if any) minds over the course of
this sprawling discussion. On August 6, Technical Committee chair
Sean Whitton called
for a vote on whether the committee should simply close the request;
the operative language was: "The Technical Committee declines to
overrule the maintainer of base-files, or issue any advice on issues
concerning /etc/os-release
". Boccassi, evidently surprised by this
move, described
it as "like something out of a Kafka novel
". All committee members
who voted did so in favor of the resolution, so the
issue was closed with the committee declining to weigh in on the topic.
So it seems that this lengthy discussion is likely to result in no changes
to how Debian maintains its /etc/os-release file. The Debian
project's view of its testing and unstable repositories is apparently not
compatible with treating them as independent distributions with their own
identity, and most Debian developers do not see a valid reason why software
should be able to tell the difference between them. While the discussion
may wind down for now, though, this has the look of one of those topics
that never completely go away. The proposed change is small, but it is a
big deal to the people involved.
