Removing more packages from unstable
Hi fellow developers,
(modified resend, as first attempt didn't arrive)
please allow me to open a can of worms. Package removal from unstable.
Deciding when it is time to remove a package from unstable is difficult.
There may be users still and it is unclear whether keeping the package
imposes a cost. In this mail I want to argue for more aggressive package
removal and seek consensus on a way forward.
What does a package cost?
There are various QA-related teams looking at packages from other
maintainers. When it trips a check, that often incurs time from some QA
person investigating a report or failure. Examples:
* Lucas Nussbaum, Santiago Vila and a few more regularly perform
archive rebuilds and report failures. They review a significant
fraction of reports before sending, but there also is CPU resources
for performing all those builds involved.
* Reproducible builds folks actively investigate packages that fail to
build reproducibly (or fail to build in the first place) and file bug
reports often accompanied by patches.
* Some cross build folks regularly send patches for cross build
failures and also occasionally real FTBFS. About one such patch per
month gets closed by ftp master package removal without ever having
been applied.
* DEP17 support folks send patches. Many of the remaining packages have
accumulated RC bugs such as FTBFS.
* As packages fail to migrate to testing for a long time, a release
team member eventually looks at the package.
* There are many more people doing various forms of QA and sending
patches.
By virtue of being part of Debian, a package receives attention by a
significant number of developers. Assigning a number is non-trivial, but
we can say for sure that it is significant. Especially developers doing
/usr-move NMUS (e.g. Chris Hofstaedler and Michael Biebl) now wonder
how much effort to put into the remaining packages. Removing more
packages would reduce the number of NMUs required there.
I suggest that we are keeping too many packages in unstable and that
they incur a non-trivial cost. It is not clear at all where to draw the
line, but maybe we can shift the line more towards removal?
What does package removal cost?
Before a package can be removed, it needs to be reviewed for reverse
dependencies and if there are any, they have to be switched to something
else or removed as well. The actual package removal first and foremost
is carried out by a ftp master. There may still be people actively using
the package and they have to find some replacement for their task at
hand. Sometimes, packages are reintroduced. Doing so incurs a pass
through NEW (and review by the ftp team). Closed and archived bugs need
to be reopened and reviewed. Sometimes, it is quicker to just NMU a
particular problem that to review a package for removal.
When to remove a package?
I looked at UDD and came up with a suggested query.
SELECT s.source, s.maintainer, b.id, b.title
FROM sources AS s JOIN bugs AS b ON s.source = b.source
WHERE s.release = 'sid'
AND NOT exists(SELECT 1 FROM sources AS t WHERE s.source = t.source AND t.release IN ('bookworm', 'trixie'))
AND NOT exists(SELECT 1 FROM key_packages AS k WHERE k.source = s.source)
AND b.affects_unstable = true
AND b.severity >= 'serious'
AND b.last_modified <= now() - interval '1 year'
AND s.source NOT IN ('check-all-the-things', 'debbugs', 'firefox', 'gcc-snapshot', 'gitlab', 'hurd', 'openjdk-19', 'openjdk-20', 'singularity-container', 'virtualbox', 'wine-development')
ORDER BY s.source, b.id;
A very similar query is achievable using the web interface:
https://udd.debian.org/bugs/?release=sid¬bookworm=only¬trixie=only&merged=ign&keypackages=ign&flastmod=ign&flastmodval=366&rc=1&sortby=id&sorto=asc&format=html#results
Human readable explanation:
* Packages in sid
* not in bookworm or trixie
* not a key package
* affected by an RC bug that has been last modified more than a year ago
* not among a few selected exceptions
These results yield 360 or 351 bugs respectively. I am including a
package list from the SQL for those who prefer following offline, but
including more would trip the spam filter.
What do you think about the proposed criteria and suggested set of
source packages? Is it reasonable to remove these packages from
unstable? In a sense, it is extending the idea of the testing auto
remover to unstable. Similarly, a package can be temporarily saved by
mailing the respective bug.
Let us assume that we agree on there being a set of packages to be
removed. What is a reasonable process? Is it ok to just file a pile of
RoQA bugs or is more warning warranted? Should we maybe use a process
similar to salvaging where there is an "ITR" (intent to remove) bug that
is reassigned to ftp after a reasonable timeout?
My personal motivation for looking into this actually is the /usr-move
work and the cross build support work. Please do consider me biased.
Helmut
aboot
adacontrol
aiocoap
aiorwlock
airport-utils
android-platform-external-doclava
anki
ants
apertium-crh-tur
apertium-cy-en
apertium-kaz-tat
apertium-mlt-ara
apertium-sme-nob
arrayfire
asis
aws-shell
backdoor-factory
bdfproxy
beanbag
binutils64
boinc-app-eah-brp
bookkeeper
breezy-loom
bwctl
ca-cacert
chibi-scheme
cpl-plugin-xshoo
crazydiskinfo
cycle-quotes
debian-timeline
devpi-common
dfvfs
dirspec
dltlyse
dogecoin
drmips
dune-pdelab
dxvk
dynamic-motd
ecb
ecere-sdk
eclipse-cdt
eclipse-collections
eclipse-tracecompass
effcee
elektra
enigmail
epigrass
evqueue-core
fakeroot-ng
fava
flask-testing
flightgear-phi
fonts-alegreya-sans
fonts-pecita
freeart
frozen-flask
fruit
gandi-cli
gems
ggcov
giblib
gigedit
github-backup
gli
gnat-gps
golang-github-bsm-pool
golang-github-coreos-go-tspi
golang-github-crewjam-saml
golang-github-form3tech-oss-jwt-go
golang-github-go-redis-redis
golang-github-jesseduffield-asciigraph
golang-github-jesseduffield-gocui
golang-github-jesseduffield-pty
golang-github-jesseduffield-roll
golang-github-jesseduffield-rollrus
golang-github-jesseduffield-termbox-go
golang-github-jesseduffield-yaml
golang-github-manyminds-api2go
golang-github-minio-cli
golang-github-tsenart-tb
golang-gopkg-mcuadros-go-syslog.v2
gr-dab
graftcp
greenbone-security-assistant
guacamole-server
haskell-cborg
haskell98-tutorial
hipspy
hydroffice.bag
i2masschroq
ifscheme
ignore-me
imdbpy
info-beamer
iptables-converter
irssi-plugin-robustirc
itop
jajuk
jodd
jquery-simpletreemenu
jsjac
jsunit
kryo-serializers
laminar
leaflet-image
leap-archive-keyring
libapache2-mod-defensible
libaws
libdevel-bt-perl
libhandy
libmonitoring-availability-perl
libneo4j-client
liboqs
libpam-ssh
libpthread-workqueue
libretro-mupen64plus
libzorpll
lilyterm
literki
lives
lsdb
mahimahi
mate-optimus
matrix-sydent
mbdyn
medialibrary
minify-maven-plugin
mixer.app
mldemos
mlton
mlucas
mod-gnutls
monkeysphere
moviepy
mozillavpn
mppenc
mpqc3
multiplex
mutextrace
mxt-app
myhdl
mysql-8.0
mysql-connector-python
nautilus-scripts-manager
navi2ch
nbibtex
node-lockfile
node-matrix-js-sdk
node-mermaid
node-node-forge
node-node-localstorage
node-puppeteer
node-trust-webcrypto
notcurses
nuitka
nvidia-graphics-drivers-legacy-340xx
nvidia-graphics-drivers-legacy-390xx
nvidia-graphics-drivers-tesla-418
nvidia-graphics-drivers-tesla-450
nvidia-graphics-drivers-tesla-460
obs-ptz
obs-websocket
octave-database
octave-tisean
octicons
openexr-viewers
opengrm-ngram
openmx
openrocket
openscap-daemon
origami
ortools
pafy
pdfrw
perl-doc-html
php-fig-link-util
php-horde-mongo
php-net-ipv6
php-sabre-event
php-sabre-http
php-sabre-uri
php-sabre-xml
php-sparkline
php-webimpress-safe-writer
picprog
platformio
pluginhook
powermock
privbind
profitbricks-sdk-python
pstack
pulseaudio-dlna
pxe-kexec
py-lz4framed
pyfr
pympler
python-dugong
python-gear
python-html-sanitizer
python-opentracing
python-pyramid-multiauth
python-pyramid-zcml
qiskit-aer
qiskit-ibmq-provider
qmenu
rdup
resteasy
resvg
ricochet-im
ruby-coffee-script
ruby-diaspora-federation
ruby-google-cloud-translate
ruby-jekyll-coffeescript
ruby-jekyll-remote-theme
ruby-omniauth-bitbucket
ruby-riddle
ruby-uglifier
ruby-upr
ruby-yaml-db
rust-fxprof-processed-profile
rust-hdrhistogram
rust-librespot-protocol
rust-rspotify
rust-rust-code-analysis
rust-rust-code-analysis-cli
rust-tcmalloc
rust-wasm-bindgen-webidl
scheme2c
shotdetect
snort
socket-activate
soundmanager2
spdx-licenses
spyder-memory-profiler
spyder-reports
squid-deb-proxy
stylish-haskell
subvertpy
swfmill
syncmaildir
sysrepo
telegram-cli
telegram-purple
termtris
thawab
tldjs
tomcatjss
tpot
ttyd
twofish
tycho
umlet
vagrant-bindfs
vg
vibe.d
vlogger
vncterm
vowpal-wabbit
w3-dtd-mathml
watson
win-iconv
xjig
xmms2-scrobbler
xqilla
xrstools
xtide
yap
zeek
zeek-aux
zmodemjs
Reply to: