I completely understand that moving the apt-get update && apt upgrade to the beginning of the manual would be better. The problem is that this can completely destroy an ubuntu system installation if done without following that best practice. We had user reports which is why we have made sure with the conflicts to not cause this. The above reproduction is focused on isolating the minimum set. You can reproduce it with a larger system using one of the older tags https://hub.docker.com/layers/udevdebug/tfoote/udevdebug/1/images/sha256-de4ca1bfb4aef4ab5b5909ea60814d33101aa3b855eb2a41dddb54dda146817c?context=explore docker run -ti --rm tfoote/udevdebug:1 bash -c 'apt-get update && apt-get install libudev1' And you'll get it removing a large fraction of essential ubuntu and make your system unusable. docker run -ti --rm tfoote/udevdebug:1 bash -c 'apt-get update && apt-get install libudev1' Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB] Hit:2 http://archive.ubuntu.com/ubuntu jammy InRelease Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [109 kB] Get:4 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [198 kB] Get:5 http://security.ubuntu.com/ubuntu jammy-security/main amd64 DEP-11 Metadata [12.7 kB] Get:6 http://security.ubuntu.com/ubuntu jammy-security/main DEP-11 48x48 Icons [5952 B] Get:7 http://security.ubuntu.com/ubuntu jammy-security/main DEP-11 64x64 Icons [8219 B] Get:8 http://security.ubuntu.com/ubuntu jammy-security/main amd64 c-n-f Metadata [2600 B] Get:9 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages [188 kB] Get:10 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 c-n-f Metadata [464 B] Get:11 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [81.0 kB] Get:12 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 c-n-f Metadata [1076 B] Get:13 http://security.ubuntu.com/ubuntu jammy-security/multiverse amd64 c-n-f Metadata [228 B] Get:14 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB] Get:15 http://archive.ubuntu.com/ubuntu jammy/main amd64 c-n-f Metadata [30.3 kB] Get:16 http://archive.ubuntu.com/ubuntu jammy/restricted amd64 c-n-f Metadata [488 B] Get:17 http://archive.ubuntu.com/ubuntu jammy/universe amd64 c-n-f Metadata [286 kB] Get:18 http://archive.ubuntu.com/ubuntu jammy/multiverse amd64 c-n-f Metadata [8372 B] Get:19 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [348 kB] Get:20 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 DEP-11 Metadata [91.0 kB] Get:21 http://archive.ubuntu.com/ubuntu jammy-updates/main DEP-11 48x48 Icons [25.0 kB] Get:22 http://archive.ubuntu.com/ubuntu jammy-updates/main DEP-11 64x64 Icons [37.1 kB] Get:23 http://archive.ubuntu.com/ubuntu jammy-updates/main DEP-11 64x64@2 Icons [29 B] Get:24 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 c-n-f Metadata [4840 B] Get:25 http://archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages [209 kB] Get:26 http://archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 c-n-f Metadata [460 B] Get:27 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [142 kB] Get:28 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 DEP-11 Metadata [115 kB] Get:29 http://archive.ubuntu.com/ubuntu jammy-updates/universe DEP-11 48x48 Icons [35.1 kB] Get:30 http://archive.ubuntu.com/ubuntu jammy-updates/universe DEP-11 64x64 Icons [46.5 kB] Get:31 http://archive.ubuntu.com/ubuntu jammy-updates/universe DEP-11 64x64@2 Icons [29 B] Get:32 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 c-n-f Metadata [2292 B] Get:33 http://archive.ubuntu.com/ubuntu jammy-updates/multiverse amd64 Packages [4653 B] Get:34 http://archive.ubuntu.com/ubuntu jammy-updates/multiverse amd64 c-n-f Metadata [232 B] Get:35 http://archive.ubuntu.com/ubuntu jammy-backports/main amd64 c-n-f Metadata [112 B] Get:36 http://archive.ubuntu.com/ubuntu jammy-backports/restricted amd64 c-n-f Metadata [116 B] Get:37 http://archive.ubuntu.com/ubuntu jammy-backports/universe amd64 Packages [2016 B] Get:38 http://archive.ubuntu.com/ubuntu jammy-backports/universe amd64 DEP-11 Metadata [1122 B] Get:39 http://archive.ubuntu.com/ubuntu jammy-backports/universe DEP-11 48x48 Icons [2686 B] Get:40 http://archive.ubuntu.com/ubuntu jammy-backports/universe DEP-11 64x64 Icons [4938 B] Get:41 http://archive.ubuntu.com/ubuntu jammy-backports/universe DEP-11 64x64@2 Icons [29 B] Get:42 http://archive.ubuntu.com/ubuntu jammy-backports/universe amd64 c-n-f Metadata [216 B] Get:43 http://archive.ubuntu.com/ubuntu jammy-backports/multiverse amd64 c-n-f Metadata [116 B] Fetched 2216 kB in 2s (1031 kB/s) Reading package lists... Done Reading package lists... Done Building dependency tree... Done Reading state information... Done The following packages were automatically installed and are no longer required: apg aptdaemon-data apturl-common btrfs-progs busybox-initramfs colord-data cryptsetup cryptsetup-bin cryptsetup-initramfs dctrl-tools dmeventd dmraid dns-root-data dnsmasq-base dpkg-repack gir1.2-accountsservice-1.0 gir1.2-adw-1 gir1.2-gck-1 gir1.2-gcr-3 gir1.2-gdm-1.0 gir1.2-geoclue-2.0 gir1.2-gnomebluetooth-3.0 gir1.2-goa-1.0 gir1.2-graphene-1.0 gir1.2-gtk-4.0 gir1.2-gweather-3.0 gir1.2-json-1.0 gir1.2-mutter-10 gir1.2-nm-1.0 gir1.2-nma-1.0 gir1.2-rsvg-2.0 gir1.2-snapd-1 gir1.2-timezonemap-1.0 gir1.2-upowerglib-1.0 gir1.2-vte-2.91 gir1.2-xkl-1.0 gkbd-capplet gnome-bluetooth-3-common gnome-control-center-faces gnome-online-accounts gnome-session-bin gnome-session-common gnome-shell-common gnome-startup-applications gparted-common gstreamer1.0-pipewire initramfs-tools initramfs-tools-bin initramfs-tools-core klibc-utils kpartx kpartx-boot libaio1 libcairo-gobject-perl libcairo-perl libcanberra-pulse libcolord-gtk1 libcolorhug2 libdebian-installer4 libdevmapper-event1.02.1 libdmraid1.0.0.rc16 libdpkg-perl libextutils-depends-perl libfile-fcntllock-perl libfprint-2-2 libfreerdp-server2-2 libgdm1 libgles2 libglib-object-introspection-perl libglib-perl libgnome-bluetooth-3.0-13 libgnomekbd-common libgnomekbd8 libgoa-backend-1.0-1 libgsound0 libgssdp-1.2-0 libgtk3-perl libgupnp-1.2-1 libgupnp-av-1.0-3 libgupnp-dlna-2.0-4 libklibc liblvm2cmd2.03 libmutter-10-0 libndp0 libnetplan0 libnma-common libnma0 libpcre2-32-0 libpkcs11-helper1 libplymouth5 librygel-core-2.6-2 librygel-db-2.6-2 librygel-renderer-2.6-2 librygel-server-2.6-2 libsysmetrics1 libtcl8.6 libteamdctl0 libtimezonemap-data libtimezonemap1 libvncserver1 libxcb-res0 libxkbcommon-x11-0 libxklavier16 linux-base lvm2 mobile-broadband-provider-info mutter-common openvpn patch power-profiles-daemon ppp pptp-linux python3-certifi python3-dateutil python3-debconf python3-defer python3-icu python3-idna python3-macaroonbakery python3-netifaces python3-pam python3-protobuf python3-pymacaroons python3-requests python3-rfc3339 python3-software-properties python3-tz rdate rygel squashfs-tools switcheroo-control tcl tcl8.6 thin-provisioning-tools ubiquity-casper ubiquity-ubuntu-artwork ubuntu-advantage-desktop-daemon unattended-upgrades update-notifier-common usb-modeswitch usb-modeswitch-data wireless-regdb xwayland Use 'apt autoremove' to remove them. The following additional packages will be installed: gnome-settings-daemon gnome-settings-daemon-common libnm0 libnss-systemd libpam-systemd libsystemd0 python3-distupgrade python3-software-properties systemd systemd-sysv systemd-timesyncd ubuntu-release-upgrader-core udev Suggested packages: usbguard systemd-container policykit-1 The following packages will be REMOVED: aptdaemon apturl brltty colord dbus-user-session fprintd gdm3 gnome-control-center gnome-initial-setup gnome-remote-desktop gnome-shell gnome-shell-extension-appindicator gnome-shell-extension-desktop-icons-ng gnome-shell-extension-ubuntu-dock gparted gstreamer1.0-packagekit language-selector-gnome libpam-fprintd modemmanager nautilus-share netplan.io network-manager network-manager-config-connectivity-ubuntu network-manager-gnome network-manager-openvpn network-manager-openvpn-gnome network-manager-pptp network-manager-pptp-gnome packagekit packagekit-tools pkexec plymouth plymouth-label plymouth-theme-spinner plymouth-theme-ubuntu-text policykit-1 polkitd python3-aptdaemon python3-aptdaemon.gtk3widgets rtkit snapd software-properties-common software-properties-gtk systemd-oomd ubiquity ubiquity-frontend-gtk ubuntu-desktop ubuntu-desktop-minimal ubuntu-minimal ubuntu-release-upgrader-gtk ubuntu-session ubuntu-standard update-manager update-notifier The following packages will be upgraded: gnome-settings-daemon gnome-settings-daemon-common libnm0 libnss-systemd libpam-systemd libsystemd0 libudev1 python3-distupgrade python3-software-properties systemd systemd-sysv systemd-timesyncd ubuntu-release-upgrader-core udev 14 upgraded, 0 newly installed, 54 to remove and 126 not upgraded. Need to get 7844 kB of archives. After this operation, 159 MB disk space will be freed. Do you want to continue? [Y/n] n Abort. Based on your above statement, I could speculate that if there's not a direct "essential" dependency on the package the apt resolver doesn't detect do the extra logic for removing essential packages. And that logic isn't triggered for indirect removals either. We understand that our conflicts statements are not "correct" however they are the only way that we could reliably prevent people from destroying their fresh ubuntu installation when they installed ROS packages with the above dependency. So that it was not possible to reproduce ros2#1272 for our users. We did this as a short term workaround because the consequences are so severe. (We have never successfully recovered any of our real computers which tried this.) And we're hoping that there will be an upstream resolution prior to our pinned conflict version being out of date. And we worked to make sure to reproduce it with purely upstream packages to be able to report it.