From 25d34a5127de3a0daaccab362c65df8fc0deab6f Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Fri, 19 Sep 2025 10:08:17 -0700 Subject: [PATCH 01/38] rust faq --- .../niche-package-maintenance/rustc/index.md | 2 + .../rustc/rust-packaging-faq.md | 263 ++++++++++++++++++ 2 files changed, 265 insertions(+) create mode 100644 docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md diff --git a/docs/maintainers/niche-package-maintenance/rustc/index.md b/docs/maintainers/niche-package-maintenance/rustc/index.md index 7ba79186..1ec4b298 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/index.md +++ b/docs/maintainers/niche-package-maintenance/rustc/index.md @@ -10,4 +10,6 @@ Update Rust Patch Rust Backport Rust rust-version-strings +Packaging FAQ + ``` diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md new file mode 100644 index 00000000..1a395516 --- /dev/null +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -0,0 +1,263 @@ +(rust-packaging-faq)= +# Rust Packaging FAQ + +You may want to start by reading the [Debian Rust Packaging Policy document](https://wiki.debian.org/Teams/RustPackaging/Policy). +This goal of this FAQ is to collect information into a single place without too many overwhelming details, but the policy document should be the source of truth as things change over time or if anything here is unclear. + +## How do Debian maintainers package Rust tooling and applications in general? + +Debian includes all of the standard Rust tooling in their archive, including [`rustc`](https://packages.debian.org/rustc) and [`cargo`](https://packages.debian.org/cargo). +Their [Rust developer documentation](https://wiki.debian.org/Rust) recommends these packages mainly as tools to package other crates for Debian, and instead recommends the [`rustup`](https://packages.debian.org/rustup) package to install toolchains. + +The code that builds the Rust crate packages [lives in monorepo](https://salsa.debian.org/rust-team/debcargo-conf). +Besides the package definitions, it also contains helper scripts for basic development and policy tasks, such as creating tickets, filtering the packages, finding outdated packages, and tracking crates that are intentionally excluded from the archive. + +That repo makes heavy use of a tool called [`debcargo`](https://salsa.debian.org/rust-team/debcargo/), written in Rust, which extends the typical Debian tooling ecosystem with some Rust-specific workflows. +It has a number of features, but fundamentally it downloads crates, tries to parse metadata from them, determines the transitive dependencies, maps those to candidate Debian packages, and then lays out a starter package structure. + +From there, packaging processes vary depending on the software being packaged, discussed below. +For more information about tooling, see [this separate question](#debian-rust-tools). + +## How does Ubuntu differ from Debian with respect to Rust packages? + +First, you should be familiar with the [process that Ubuntu goes through to merge and sync packages from Debian](#key-concepts). +Additionally, it's worth noting that the preferred workflow for Rust developers is the [`rustup` Snap package](https://snapcraft.io/rustup). +Like with Debian, the system packages are primarily intended to ensure the availability of Rust within Ubuntu itself, which is less directly relevant to application developers. + +Due to the merge and sync process, the overwhelming number of Rust packages are imported directly from Debian. +The relatively small number of packages that carry an Ubuntu diff can be spotted by checking [Merge-o-Matic](https://merges.ubuntu.com/). +This can also be determined for an individual package by simply checking for the presence of `ubuntu` in the version string. +Ubuntu diffs exist for a number of reasons, such as dependency issues to support [Ubuntu's oxidation efforts](https://discourse.ubuntu.com/t/carefully-but-purposefully-oxidising-ubuntu/56995), hardware support, or other Ubuntu-specific integration issues. + +There are also a small number of packages that are excluded from the sync for various technical reasons, usually dependencies that are unsatisfiable. That configuration is handled via [this Launchpad repo](https://git.launchpad.net/~ubuntu-archive/+git/sync-blocklist). + +While the number of packages that differ from Debian is small, some of them are critically important. +Notably, the `rustc` source package is one which carries a nontrivial diff compared to Debian, and that source package is responsible for generating a number of important binary packages, including: `rustc`, `cargo`, `libstd-rust-X.Y`, and more. +It's not reasonable to enumerate every difference here, but fundamentally they stem from the desire to ship more versions of the compiler in Ubuntu than Debian currently packages. + +Debian's version of `rustc` is frozen for the lifetime of each stable Debian release. +Ubuntu, on the other hand, uses versioned packages which are frequently backported to LTS releases in order to support more software. +Whereas Debian features a single `rustc` binary package, Ubuntu releases typically have multiple with the version information contained directly in the name of the package, e.g. `rustc-X.Y`. +Ubuntu then also produces a simply named `rustc` package which corresponds to the default version of Rust for that release. + +Because Ubuntu produces Rust compiler packages that don't exist on Debian, they necessarily contain a different set of patches and build scripts. + +## What do Debian and Ubuntu maintainers change in `rustc` to enable packaging? + +Ubuntu's `rustc` packages obviously have Debian's package as an ancestor, but due to the requirements of shipping multiple versions in a single stable release, they have diverged over time. +This means that doing a simple diff of the files in the `debian` directory will show a significant number of small tweaks and documentation updates that both teams have made seperately. +Due to the differences in packaging goals, it's increasingly unlikely that the packages will be unified again soon. +This FAQ is focused on the Ubuntu package and not everything is likely apply to Debian. + +Arguably the primary packaging tasks for `rustc` involve finding common ground between system packages and the Rust upstream vendoring model, which generally would result in building separate versions of `libc`, `openssl`, `llvm`, and more. +Ubuntu and Debian both prefer to use system libraries whenever possible, and so modify the package to locate those and link agaist them. + +A complicating factor is that not all versions of the Ubuntu package use an identical set of vendored dependencies. +For instance, the default `rustc` version on Ubuntu generally makes use of the system `llvm` (although it's statically linked, and so not a runtime dependency). +However, versions are backported to LTS releases out of step with how LLVM is packaged. +This means that some newer versions of `rustc` will used a vendored LLVM. + +The actual patches that are applied to the upstream source are split into categories, although nearly all of them are fundamentally focused on finding the right system files and platform-specific issues: + +**`behavior`** +: Despite the name, these patches do not change the behavior of the compiler per se. +Instead, it refers to the fact that they apply to `rustc` at runtime. +They mostly set paths so that system resources can be located, they add some additional symlinks to simplify dynamic linking against Rust libraries, and remove some irrelevant platform-specific workarounds. + +**`build`** +: These patches adjust paths and options in the build process so that system libraries and tools can be found correctly. +They also makes some checks more strict since the assumptions about which tools will be built are changed. + +**`cargo`** +: These mostly disable tests that aren't relevant, such as some that require network connectivity or only apply to particular filesystems. +It also ensures that Cargo is forced to follow the `dev` channel, ensuring it doesn't update itself or download vendored libraries. + +**`prune`** +: These are the patches that remove unused code from the tarball. +This includes some vendored libraries and irrelevant platform-specific code, in order to reduce the final size of the package. +There is also some special handling for cross compilation in a way that uses sytem tooling. + +**`ubuntu`** +: Ubuntu-specific patches that are mostly focused on making sure that system tooling is found correctly, but also disable some platform-specific tests and ensure that other tests use the system `gcc` compiler. + +**`upstream`** +: These patches are official upstream code that hasn't been pushed into a stable release yet. Mostly this is focused on getting edge-case tests to pass, but also fixes some linker path issues. + +**`vendor`** +: Fixes for vendored dependencies, mostly so they can locate and use system libraries. + + +## How are Rust binaries packaged? + +:::{note} +"Binary" is an overloaded term in Rust packaging. This FAQ topic refers to the binary targets of a Cargo-based Rust project, as opposed to library targets. However, we also need to distinguish Debian source packages from Debian binary packages, which is entirely orthogonal. +::: + +According to the [Debian Rust Packaging Policy](https://wiki.debian.org/Teams/RustPackaging/Policy), Rust crates that include one or more binary executable targets have all their executables bundled into a single Debian binary package. +These are conceptually simpler than Rust library crates from a packaging perspective, and are assembled much like any other Debian package. + +The only additional complication is that Cargo is forbidden from accessing the network when building the package, which is typically how it fetches dependencies. +Instead, it must find all dependencies within the package archive. +This is achieved by packaging the library crates in the archive, and then automatically setting up a Cargo registry that makes them available. +This is handled automatically by `dh-cargo`. + +Since Rust does not have a stable ABI, and therefore is nearly always statically linked, you may be wondering how the dependencies in the package archive work. That brings us to our next question! + + +## How are Rust libraries packaged? + +Rust libraries are packaged unlike nearly any other language ecosystem, due to Rust's lack of a stable ABI. +Typically, system libraries are compiled into shared objects and then linked later. + +Because we don't have that option, Rust libraries are packaged as _source code_. +That is, a Rust library in the Debian binary format is effectively the same as the relevant source package. +When a Rust application (i.e., a binary Cargo target) is built, it grabs that source code from the library packages and links it statically. + +There is special functionality in dh-cargo for this. + +## What about crates with optional features? + +Rust packages with optional features are divided into multiple, separate packages. +That means for a package named `librust--dev`, an optional feature will _additionally_ need to be packaged as `librust-+-dev`. +Note the use of the plus symbol, which is chosen deliberately to avoid conflicts with Cargo crate names. + +Sometimes, if a crate has a large number of features, they can be collapsed using the `Provides` mechanism. + +## What about Rust crates that specify a Rust edition or require a specific toolchain? + +Rust editions are effectively handled by the Rust tooling itself. +Every version of `rustc` is guaranteed to be backwards compatible with all previous editions of Rust. +If all the archive crate package versions are frozen alongside the version of `rustc` itself, then that version of `rustc` should support all editions used by the packaged crates. + +Rust crates can include a `rust-toolchain.toml` file, which can specify a particular compiler version. +This is effectively orthogonal to the official stable Rust editions. +The most common use-case for this is to specify that unstable "nightly" features are being used by a crate, and so an unstable "nightly" version of `rustc` is required. +The approach for these packages is, more or less, to just exclude them unless there's a really compelling reason not to. +By definition, they are unstable packages, and so do not belong in a distribution's archive of stable, supported packaged crates. + +Debian maintainers do make exceptions for extremely valuable software, such as Firefox. +The general approach for these exceptions is to use special settings to temporarily configure the compiler to allow unstable features in a stable version. +Ubuntu packages Firefox as a Snap, which avoids the need for special hacks like this. + +(debian-rust-tools)= +## What Rust-specific tooling do maintainers use, and how does it fit into the wider ecosystem of packaging tools? + +The ecosystem of Debian packaging tools is big and diverse, with a great deal of overlap and intended deprecation. +This section focuses only on those tools that are likely to be useful when working on Rust code. +A much more comprehensive reference is available in [the Debian developers-reference](https://www.debian.org/doc/manuals/developers-reference/tools.en.html). + +There are, roughly speaking, three phases to creating a `.deb` package. + +1. Create the source package. +2. Build the binary package from the source package. +3. Test and upload the binary package. + +Although coarse, keeping this in mind can help build a more coherent mental model of how the tools interoperate. + +### Tools for creating and modifying the source package + +**Language-agnostic tools:** + +`uscan` +: Short for "upstream scan", it automates tasks related to keeping up-to-date with upstream code. +It relies on you creating a `debian/watch` file, and then can look for new releases, grab them, and verify signatures. +Source packages require "orig" tarballs as a component, which are the unmodified upstream source code, and `uscan` can help you grab them. + +`quilt` +: An older, but still widely-used tool to manage a sequence of patches that apply to the upstream source. +It can not only help you manage the order of patches and their current state of application, but can help you generate patches from modified source code. +Some maintainers prefer to manage patches with git-based tooling, which didn't exist when `quilt` was first developed. +In theory, a `git` branch could encode the order of the patches, which are then rebased onto the new code when doing an update. +Nevertheless, being familiar with `quilt` is helpful when understanding packages worked on by multiple maintainers. + +`dch` +: Automation for managing the `/debian/changelog` file. +It helps you generate timestamps, author information, and more. + +`git-ubuntu` +: An extension to `git` that can clone the repository attached to a package directly from Launchpad. +It has many other features intended to enable more complex package workflows, which are described in the [Ubuntu Maintainer's Handbook](https://github.com/canonical/ubuntu-maintainers-handbook). + +`pull-lp-source` +: Similar to `git-ubuntu`, which should be used instead where possible. +The main difference is that instead of cloning the `git` repository, it grabs the source package from Launchpad. +That means you'll get things like the orig tarball, but not the `git` history. + +**Rust-specific tools:** + +`debcargo` +: A tool written in Rust that will attempt to automatically convert a Rust crate into a Debian source package, by mapping dependencies to Debian packages and generating important files like `debian/control`, `debian/rules`, and `debian/changelog`. + +`cargo-debstatus` +: Pull the dependencies from a Cargo project, and determine if appropriate versions of them are already available in the package archive. + +### Tools for building the binary package from the source package + +**Language-agnostic tools:** + +`sbuild` +: The primary tool Ubuntu Rust packagers will likely use to build binary packages. +Fundamentally it is an orchestration tool and replaces the direct invocation of many other tools. +It creates clean build environments using `schroot`s as a sandbox, containing all the necessary dependencies already installed. +It then invokes `dpkg-buildpackage`, and copies the output out of the `schroot`. +There is an alternative backend for `sbuild`, which replaces `schroot`, called `unshare`. +At the time of writing, Launchpad still uses `schroot` and it is probably preferable to do the same locally to avoid behavior differences. + +`dpkg-buildpackage` +: The lower-level build tool that is invoked for you by `sbuild`. +It is responsible for running all of the scripts defined in `debian/rules`. + +`debhelper` +: A suite of tools used to simplify many of the elements that packages often have in common. +It defines a clear sequence of steps that packages go through when building, which can all be overridden as necessary within `/debian/rules`. +Giving names and order to these steps means that packages no longer need custom scripts to do things like apply patches, or perform configuration. +If you see a call to `dh` in `/debian/rules`, that package is using `debhelper`. +Some older packages may not have migrated to `debhelper` from the manual approach yet. +Lots of add-on packages exist, most notably `dh-cargo` which is listed separately. + +`lintian` +: The static analysis tool use to check packages for policy violations, usually executed on your behalf by `sbuild`. +While it's listed under source tooling, it can also check binary packages. + +**Rust-specific** + +`dh-cargo` +: A `debhelper` add-on which lets you use `--with-cargo` when calling `dh`. +In essence, it enables the direct use of Cargo as a build tool for compiling and linking the code in your package. +Note that `dh-cargo` should _not_ be used applications built only partially with Rust. + + +### Tools for working with the binary package + +**Language-agnostic tools:** + +`autopkgtest` +: The testing framework for `.deb` packages. +It sets up an isolated environment, which can be any of a number of containers or VMs, and runs the tests defined in the `debian/tests` directory. +In the official archives, these tests run automatically as part of CI. +However, for PPAs in a typical Ubuntu workflow, the tests are not triggered automatically. + +`dput` +: Upload your package to the package archive or a PPA. + +## What is the relationship between `llvm` packages and `rustc` packages? + +The relationship can be one of two things, depending on the particular `rustc` package version. + +1. For the default `rustc` package, with no version number in the name, `llvm` will be a build-time dependency. +Due to static linking, that means that all the relevant `llvm` code will be effectively copied into the `rustc` binary and the `llvm` package will no longer be strictly needed at runtime. +It is generally listed as a suggested dependency of `rustc` in order to support debugging and code generation tasks. + +2. For other `rustc-X.Y` packages, `llvm` might be a build-time dependency or we might use a vendored version of `llvm` to avoid the need to backport both packages in lockstep. +Either way, as in the above case, the `llvm` package is not needed at runtime but may still be useful for developers. + +## I see `llvm-X-dev` in the archive, but my version of `rustc` doesn't use it + +Many LLVM packages are actually universe packages, which are community-maintained. +Packages in the main component of the archive are not allowed to depend on universe component packages. +Accordingly, `rustc` will sometimes use a vendored version of LLVM, even if that version is technically already available. + +## What is the status of Rust support for WASM/WASI on Ubuntu? + +Ubuntu does not currently build a package for the cross-compilation tooling for WASM. +However, that workflow should be fully supported via `rustup`, which is available as a Snap or in `universe`. From c187b7a8b419422111df670a33597d4232ee2ecc Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:26:00 -0700 Subject: [PATCH 02/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 1a395516..c6bf59c7 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -2,7 +2,7 @@ # Rust Packaging FAQ You may want to start by reading the [Debian Rust Packaging Policy document](https://wiki.debian.org/Teams/RustPackaging/Policy). -This goal of this FAQ is to collect information into a single place without too many overwhelming details, but the policy document should be the source of truth as things change over time or if anything here is unclear. +The goal of this FAQ is to collect information in a single place without too many overwhelming details, but the policy document should be the source of truth as things change over time or if anything here is unclear. ## How do Debian maintainers package Rust tooling and applications in general? From c38944b627f7cd45c85530f279965a860c634639 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:26:19 -0700 Subject: [PATCH 03/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index c6bf59c7..9705f4cf 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -9,7 +9,7 @@ The goal of this FAQ is to collect information in a single place without too man Debian includes all of the standard Rust tooling in their archive, including [`rustc`](https://packages.debian.org/rustc) and [`cargo`](https://packages.debian.org/cargo). Their [Rust developer documentation](https://wiki.debian.org/Rust) recommends these packages mainly as tools to package other crates for Debian, and instead recommends the [`rustup`](https://packages.debian.org/rustup) package to install toolchains. -The code that builds the Rust crate packages [lives in monorepo](https://salsa.debian.org/rust-team/debcargo-conf). +The code that builds the Rust crate packages lives in a monorepo: [debcargo-conf](https://salsa.debian.org/rust-team/debcargo-conf). Besides the package definitions, it also contains helper scripts for basic development and policy tasks, such as creating tickets, filtering the packages, finding outdated packages, and tracking crates that are intentionally excluded from the archive. That repo makes heavy use of a tool called [`debcargo`](https://salsa.debian.org/rust-team/debcargo/), written in Rust, which extends the typical Debian tooling ecosystem with some Rust-specific workflows. From e31ce1bb361d732e9a2918ba3e43ec01c60b44e0 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:26:37 -0700 Subject: [PATCH 04/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 9705f4cf..d38596a7 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -13,7 +13,13 @@ The code that builds the Rust crate packages lives in a monorepo: [debcargo-conf Besides the package definitions, it also contains helper scripts for basic development and policy tasks, such as creating tickets, filtering the packages, finding outdated packages, and tracking crates that are intentionally excluded from the archive. That repo makes heavy use of a tool called [`debcargo`](https://salsa.debian.org/rust-team/debcargo/), written in Rust, which extends the typical Debian tooling ecosystem with some Rust-specific workflows. -It has a number of features, but fundamentally it downloads crates, tries to parse metadata from them, determines the transitive dependencies, maps those to candidate Debian packages, and then lays out a starter package structure. +It has a number of features, but fundamentally it: + +1. downloads crates +1. tries to parse metadata from the crates +1. determines the transitive dependencies +1. maps the dependencies to candidate Debian packages +1. lays out a starter package structure From there, packaging processes vary depending on the software being packaged, discussed below. For more information about tooling, see [this separate question](#debian-rust-tools). From b5bd17d31c9804766c33398708c761a490ed0f3d Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:28:03 -0700 Subject: [PATCH 05/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index d38596a7..864b561b 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -22,7 +22,7 @@ It has a number of features, but fundamentally it: 1. lays out a starter package structure From there, packaging processes vary depending on the software being packaged, discussed below. -For more information about tooling, see [this separate question](#debian-rust-tools). +For more information about tooling, see {ref}`debian-rust-tools`. ## How does Ubuntu differ from Debian with respect to Rust packages? From 0a17387a3415a26656404cd90a4b893f37cc2662 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:28:14 -0700 Subject: [PATCH 06/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 864b561b..e1b0233b 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -32,7 +32,7 @@ Like with Debian, the system packages are primarily intended to ensure the avail Due to the merge and sync process, the overwhelming number of Rust packages are imported directly from Debian. The relatively small number of packages that carry an Ubuntu diff can be spotted by checking [Merge-o-Matic](https://merges.ubuntu.com/). -This can also be determined for an individual package by simply checking for the presence of `ubuntu` in the version string. +This can also be determined for an individual package by checking for the presence of `ubuntu` in the version string. Ubuntu diffs exist for a number of reasons, such as dependency issues to support [Ubuntu's oxidation efforts](https://discourse.ubuntu.com/t/carefully-but-purposefully-oxidising-ubuntu/56995), hardware support, or other Ubuntu-specific integration issues. There are also a small number of packages that are excluded from the sync for various technical reasons, usually dependencies that are unsatisfiable. That configuration is handled via [this Launchpad repo](https://git.launchpad.net/~ubuntu-archive/+git/sync-blocklist). From 42c998dfb2e1b3b1bb91885b7cd07f16997cc8e4 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:29:17 -0700 Subject: [PATCH 07/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index e1b0233b..a1d0057c 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -31,7 +31,7 @@ Additionally, it's worth noting that the preferred workflow for Rust developers Like with Debian, the system packages are primarily intended to ensure the availability of Rust within Ubuntu itself, which is less directly relevant to application developers. Due to the merge and sync process, the overwhelming number of Rust packages are imported directly from Debian. -The relatively small number of packages that carry an Ubuntu diff can be spotted by checking [Merge-o-Matic](https://merges.ubuntu.com/). +The relatively small number of packages that carry an Ubuntu delta can be spotted by checking [Merge-o-Matic](https://merges.ubuntu.com/). This can also be determined for an individual package by checking for the presence of `ubuntu` in the version string. Ubuntu diffs exist for a number of reasons, such as dependency issues to support [Ubuntu's oxidation efforts](https://discourse.ubuntu.com/t/carefully-but-purposefully-oxidising-ubuntu/56995), hardware support, or other Ubuntu-specific integration issues. From 22ac79a7fd1b92b5793ced165afc88cd27ac4e87 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:30:31 -0700 Subject: [PATCH 08/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index a1d0057c..4f0e79f3 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -33,7 +33,7 @@ Like with Debian, the system packages are primarily intended to ensure the avail Due to the merge and sync process, the overwhelming number of Rust packages are imported directly from Debian. The relatively small number of packages that carry an Ubuntu delta can be spotted by checking [Merge-o-Matic](https://merges.ubuntu.com/). This can also be determined for an individual package by checking for the presence of `ubuntu` in the version string. -Ubuntu diffs exist for a number of reasons, such as dependency issues to support [Ubuntu's oxidation efforts](https://discourse.ubuntu.com/t/carefully-but-purposefully-oxidising-ubuntu/56995), hardware support, or other Ubuntu-specific integration issues. +Ubuntu deltas exist for a number of reasons, such as dependency issues to support [Ubuntu's oxidation efforts](https://discourse.ubuntu.com/t/carefully-but-purposefully-oxidising-ubuntu/56995), hardware support, or other Ubuntu-specific integration issues. There are also a small number of packages that are excluded from the sync for various technical reasons, usually dependencies that are unsatisfiable. That configuration is handled via [this Launchpad repo](https://git.launchpad.net/~ubuntu-archive/+git/sync-blocklist). From d1b0486b73f4f894b6bf1949284d01ad561b417d Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:30:58 -0700 Subject: [PATCH 09/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 4f0e79f3..651bf009 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -35,7 +35,7 @@ The relatively small number of packages that carry an Ubuntu delta can be spotte This can also be determined for an individual package by checking for the presence of `ubuntu` in the version string. Ubuntu deltas exist for a number of reasons, such as dependency issues to support [Ubuntu's oxidation efforts](https://discourse.ubuntu.com/t/carefully-but-purposefully-oxidising-ubuntu/56995), hardware support, or other Ubuntu-specific integration issues. -There are also a small number of packages that are excluded from the sync for various technical reasons, usually dependencies that are unsatisfiable. That configuration is handled via [this Launchpad repo](https://git.launchpad.net/~ubuntu-archive/+git/sync-blocklist). +There is also a small number of packages that are excluded from the sync for various technical reasons, usually dependencies that are unsatisfiable. That configuration is handled via the [sync-blocklist](https://git.launchpad.net/~ubuntu-archive/+git/sync-blocklist) Launchpad repo. While the number of packages that differ from Debian is small, some of them are critically important. Notably, the `rustc` source package is one which carries a nontrivial diff compared to Debian, and that source package is responsible for generating a number of important binary packages, including: `rustc`, `cargo`, `libstd-rust-X.Y`, and more. From 925e13fc84202d6258646eafe4434f3730701267 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:31:32 -0700 Subject: [PATCH 10/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 651bf009..526794ed 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -38,7 +38,7 @@ Ubuntu deltas exist for a number of reasons, such as dependency issues to suppor There is also a small number of packages that are excluded from the sync for various technical reasons, usually dependencies that are unsatisfiable. That configuration is handled via the [sync-blocklist](https://git.launchpad.net/~ubuntu-archive/+git/sync-blocklist) Launchpad repo. While the number of packages that differ from Debian is small, some of them are critically important. -Notably, the `rustc` source package is one which carries a nontrivial diff compared to Debian, and that source package is responsible for generating a number of important binary packages, including: `rustc`, `cargo`, `libstd-rust-X.Y`, and more. +Notably, the `rustc` source package is one that carries a nontrivial delta compared to Debian, and that source package is responsible for generating a number of important binary packages, including: `rustc`, `cargo`, `libstd-rust-X.Y`, and more. It's not reasonable to enumerate every difference here, but fundamentally they stem from the desire to ship more versions of the compiler in Ubuntu than Debian currently packages. Debian's version of `rustc` is frozen for the lifetime of each stable Debian release. From 2b8e17e7574fae727c4b06b95bf212f0e8d177d5 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:31:57 -0700 Subject: [PATCH 11/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 526794ed..4a09f0e5 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -42,7 +42,7 @@ Notably, the `rustc` source package is one that carries a nontrivial delta compa It's not reasonable to enumerate every difference here, but fundamentally they stem from the desire to ship more versions of the compiler in Ubuntu than Debian currently packages. Debian's version of `rustc` is frozen for the lifetime of each stable Debian release. -Ubuntu, on the other hand, uses versioned packages which are frequently backported to LTS releases in order to support more software. +Ubuntu, on the other hand, uses versioned packages, which are frequently backported to LTS releases in order to support more software. Whereas Debian features a single `rustc` binary package, Ubuntu releases typically have multiple with the version information contained directly in the name of the package, e.g. `rustc-X.Y`. Ubuntu then also produces a simply named `rustc` package which corresponds to the default version of Rust for that release. From c6d6fe0d26cb42e09e8d7b301aa2f44b541a68be Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:33:01 -0700 Subject: [PATCH 12/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 4a09f0e5..38a60d50 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -43,7 +43,7 @@ It's not reasonable to enumerate every difference here, but fundamentally they s Debian's version of `rustc` is frozen for the lifetime of each stable Debian release. Ubuntu, on the other hand, uses versioned packages, which are frequently backported to LTS releases in order to support more software. -Whereas Debian features a single `rustc` binary package, Ubuntu releases typically have multiple with the version information contained directly in the name of the package, e.g. `rustc-X.Y`. +Whereas Debian features a single `rustc` binary package, Ubuntu releases typically have multiple with the version information contained directly in the name of the package: `rustc-X.Y`. Ubuntu then also produces a simply named `rustc` package which corresponds to the default version of Rust for that release. Because Ubuntu produces Rust compiler packages that don't exist on Debian, they necessarily contain a different set of patches and build scripts. From ecad25eafae53c39a06f6260733671f6421ff81e Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:33:25 -0700 Subject: [PATCH 13/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 38a60d50..5fd28c85 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -44,7 +44,7 @@ It's not reasonable to enumerate every difference here, but fundamentally they s Debian's version of `rustc` is frozen for the lifetime of each stable Debian release. Ubuntu, on the other hand, uses versioned packages, which are frequently backported to LTS releases in order to support more software. Whereas Debian features a single `rustc` binary package, Ubuntu releases typically have multiple with the version information contained directly in the name of the package: `rustc-X.Y`. -Ubuntu then also produces a simply named `rustc` package which corresponds to the default version of Rust for that release. +Ubuntu then also produces a package named `rustc`, which corresponds to the default version of Rust for that release. Because Ubuntu produces Rust compiler packages that don't exist on Debian, they necessarily contain a different set of patches and build scripts. From 91568b3e44377c206bd9cbc73cc4123401fdc803 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:33:44 -0700 Subject: [PATCH 14/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 5fd28c85..010b0ba4 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -50,7 +50,7 @@ Because Ubuntu produces Rust compiler packages that don't exist on Debian, they ## What do Debian and Ubuntu maintainers change in `rustc` to enable packaging? -Ubuntu's `rustc` packages obviously have Debian's package as an ancestor, but due to the requirements of shipping multiple versions in a single stable release, they have diverged over time. +Ubuntu's `rustc` packages have Debian's package as an ancestor, but due to the requirements of shipping multiple versions in a single stable release, they have diverged over time. This means that doing a simple diff of the files in the `debian` directory will show a significant number of small tweaks and documentation updates that both teams have made seperately. Due to the differences in packaging goals, it's increasingly unlikely that the packages will be unified again soon. This FAQ is focused on the Ubuntu package and not everything is likely apply to Debian. From 395d43a0a20762702150b95046fdd6b1c8187b1d Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:34:07 -0700 Subject: [PATCH 15/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 010b0ba4..c0663e9a 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -51,7 +51,7 @@ Because Ubuntu produces Rust compiler packages that don't exist on Debian, they ## What do Debian and Ubuntu maintainers change in `rustc` to enable packaging? Ubuntu's `rustc` packages have Debian's package as an ancestor, but due to the requirements of shipping multiple versions in a single stable release, they have diverged over time. -This means that doing a simple diff of the files in the `debian` directory will show a significant number of small tweaks and documentation updates that both teams have made seperately. +This means that doing a simple diff of the files in the `debian` directory shows a significant number of small tweaks and documentation updates that both teams have made separately. Due to the differences in packaging goals, it's increasingly unlikely that the packages will be unified again soon. This FAQ is focused on the Ubuntu package and not everything is likely apply to Debian. From b7fd436defda5ee693439af66c9636c4ff6d7be8 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:34:35 -0700 Subject: [PATCH 16/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index c0663e9a..12cb0a75 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -52,7 +52,7 @@ Because Ubuntu produces Rust compiler packages that don't exist on Debian, they Ubuntu's `rustc` packages have Debian's package as an ancestor, but due to the requirements of shipping multiple versions in a single stable release, they have diverged over time. This means that doing a simple diff of the files in the `debian` directory shows a significant number of small tweaks and documentation updates that both teams have made separately. -Due to the differences in packaging goals, it's increasingly unlikely that the packages will be unified again soon. +Due to the differences in packaging goals, it's increasingly unlikely that the packages would be unified again soon. This FAQ is focused on the Ubuntu package and not everything is likely apply to Debian. Arguably the primary packaging tasks for `rustc` involve finding common ground between system packages and the Rust upstream vendoring model, which generally would result in building separate versions of `libc`, `openssl`, `llvm`, and more. From 2159a4fddc11afea45349f78781328e5a910d2ff Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:42:08 -0700 Subject: [PATCH 17/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 12cb0a75..8040f059 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -53,7 +53,7 @@ Because Ubuntu produces Rust compiler packages that don't exist on Debian, they Ubuntu's `rustc` packages have Debian's package as an ancestor, but due to the requirements of shipping multiple versions in a single stable release, they have diverged over time. This means that doing a simple diff of the files in the `debian` directory shows a significant number of small tweaks and documentation updates that both teams have made separately. Due to the differences in packaging goals, it's increasingly unlikely that the packages would be unified again soon. -This FAQ is focused on the Ubuntu package and not everything is likely apply to Debian. +This FAQ is focused on the Ubuntu package and not everything is likely to apply to Debian. Arguably the primary packaging tasks for `rustc` involve finding common ground between system packages and the Rust upstream vendoring model, which generally would result in building separate versions of `libc`, `openssl`, `llvm`, and more. Ubuntu and Debian both prefer to use system libraries whenever possible, and so modify the package to locate those and link agaist them. From c90c0d84c268dd8269f34629d517efffb74282a7 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:42:27 -0700 Subject: [PATCH 18/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 8040f059..0db0d748 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -61,7 +61,7 @@ Ubuntu and Debian both prefer to use system libraries whenever possible, and so A complicating factor is that not all versions of the Ubuntu package use an identical set of vendored dependencies. For instance, the default `rustc` version on Ubuntu generally makes use of the system `llvm` (although it's statically linked, and so not a runtime dependency). However, versions are backported to LTS releases out of step with how LLVM is packaged. -This means that some newer versions of `rustc` will used a vendored LLVM. +This means that some newer versions of `rustc` use a vendored LLVM. The actual patches that are applied to the upstream source are split into categories, although nearly all of them are fundamentally focused on finding the right system files and platform-specific issues: From e976493948411c3f56993cdb99d95d032a596c58 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:42:55 -0700 Subject: [PATCH 19/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 0db0d748..76b353c3 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -68,7 +68,7 @@ The actual patches that are applied to the upstream source are split into catego **`behavior`** : Despite the name, these patches do not change the behavior of the compiler per se. Instead, it refers to the fact that they apply to `rustc` at runtime. -They mostly set paths so that system resources can be located, they add some additional symlinks to simplify dynamic linking against Rust libraries, and remove some irrelevant platform-specific workarounds. +They mostly set paths, so that system resources can be located. They add some additional symlinks to simplify dynamic linking against Rust libraries and remove some irrelevant platform-specific workarounds. **`build`** : These patches adjust paths and options in the build process so that system libraries and tools can be found correctly. From a1831b418bf56acae815fe1828c5bec4f27c6629 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:43:14 -0700 Subject: [PATCH 20/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 76b353c3..ec8b94bd 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -71,7 +71,7 @@ Instead, it refers to the fact that they apply to `rustc` at runtime. They mostly set paths, so that system resources can be located. They add some additional symlinks to simplify dynamic linking against Rust libraries and remove some irrelevant platform-specific workarounds. **`build`** -: These patches adjust paths and options in the build process so that system libraries and tools can be found correctly. +: These patches adjust paths and options in the build process, so that system libraries and tools can be found correctly. They also makes some checks more strict since the assumptions about which tools will be built are changed. **`cargo`** From 3381fba438dda24ddcca20ff999f302d30044286 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:43:57 -0700 Subject: [PATCH 21/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index ec8b94bd..6473cbda 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -72,7 +72,7 @@ They mostly set paths, so that system resources can be located. They add some ad **`build`** : These patches adjust paths and options in the build process, so that system libraries and tools can be found correctly. -They also makes some checks more strict since the assumptions about which tools will be built are changed. +They also make some checks more strict because the assumptions about which tools are built are changed. **`cargo`** : These mostly disable tests that aren't relevant, such as some that require network connectivity or only apply to particular filesystems. From 7f110738193df7b990a993a93324a5e9b1ac880f Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:44:28 -0700 Subject: [PATCH 22/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 6473cbda..cbf53001 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -81,7 +81,7 @@ It also ensures that Cargo is forced to follow the `dev` channel, ensuring it do **`prune`** : These are the patches that remove unused code from the tarball. This includes some vendored libraries and irrelevant platform-specific code, in order to reduce the final size of the package. -There is also some special handling for cross compilation in a way that uses sytem tooling. +There is also some special handling for cross compilation in a way that uses system tooling. **`ubuntu`** : Ubuntu-specific patches that are mostly focused on making sure that system tooling is found correctly, but also disable some platform-specific tests and ensure that other tests use the system `gcc` compiler. From 4cd1a7525e4ff947ff7a9a8d38c5d7718bebbdbe Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:45:24 -0700 Subject: [PATCH 23/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index cbf53001..9f429b87 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -87,7 +87,7 @@ There is also some special handling for cross compilation in a way that uses sys : Ubuntu-specific patches that are mostly focused on making sure that system tooling is found correctly, but also disable some platform-specific tests and ensure that other tests use the system `gcc` compiler. **`upstream`** -: These patches are official upstream code that hasn't been pushed into a stable release yet. Mostly this is focused on getting edge-case tests to pass, but also fixes some linker path issues. +: These patches are official upstream code that hasn't been pushed into a stable release yet. This is mostly focused on getting edge-case tests to pass, but it also fixes some linker path issues. **`vendor`** : Fixes for vendored dependencies, mostly so they can locate and use system libraries. From e11ea2fc99422154bfb7ada1ea748cc0f8aa39b0 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:45:39 -0700 Subject: [PATCH 24/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 9f429b87..1a3d33e1 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -90,7 +90,7 @@ There is also some special handling for cross compilation in a way that uses sys : These patches are official upstream code that hasn't been pushed into a stable release yet. This is mostly focused on getting edge-case tests to pass, but it also fixes some linker path issues. **`vendor`** -: Fixes for vendored dependencies, mostly so they can locate and use system libraries. +: Fixes for vendored dependencies; mostly so they can locate and use system libraries. ## How are Rust binaries packaged? From 2244cd5db10b726853b4dab70ee939fa84125784 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:46:32 -0700 Subject: [PATCH 25/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 1a3d33e1..69e110b0 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -96,7 +96,7 @@ There is also some special handling for cross compilation in a way that uses sys ## How are Rust binaries packaged? :::{note} -"Binary" is an overloaded term in Rust packaging. This FAQ topic refers to the binary targets of a Cargo-based Rust project, as opposed to library targets. However, we also need to distinguish Debian source packages from Debian binary packages, which is entirely orthogonal. +"Binary" is an overloaded term in Rust packaging. This FAQ topic refers to the binary targets of a Cargo-based Rust project, as opposed to library targets. However, we also need to distinguish Debian source packages from Debian binary packages, which is an entirely unrelated concept. ::: According to the [Debian Rust Packaging Policy](https://wiki.debian.org/Teams/RustPackaging/Policy), Rust crates that include one or more binary executable targets have all their executables bundled into a single Debian binary package. From 528ac6b5fe85be199b4461d36aedf45df75776c9 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:47:08 -0700 Subject: [PATCH 26/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 69e110b0..c9fbcfa0 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -119,7 +119,7 @@ Because we don't have that option, Rust libraries are packaged as _source code_. That is, a Rust library in the Debian binary format is effectively the same as the relevant source package. When a Rust application (i.e., a binary Cargo target) is built, it grabs that source code from the library packages and links it statically. -There is special functionality in dh-cargo for this. +There is special functionality in `dh-cargo` for this. ## What about crates with optional features? From 4c4a12a001984b5769a5168732ffae0344a514bc Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:47:27 -0700 Subject: [PATCH 27/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index c9fbcfa0..052799d8 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -121,7 +121,7 @@ When a Rust application (i.e., a binary Cargo target) is built, it grabs that so There is special functionality in `dh-cargo` for this. -## What about crates with optional features? +## How are crates with optional features packaged? Rust packages with optional features are divided into multiple, separate packages. That means for a package named `librust--dev`, an optional feature will _additionally_ need to be packaged as `librust-+-dev`. From 3d9a8f4ad19ae17fc8b0d3ae4b48325c6039dd3f Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:47:50 -0700 Subject: [PATCH 28/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 052799d8..6a7bb13e 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -124,7 +124,7 @@ There is special functionality in `dh-cargo` for this. ## How are crates with optional features packaged? Rust packages with optional features are divided into multiple, separate packages. -That means for a package named `librust--dev`, an optional feature will _additionally_ need to be packaged as `librust-+-dev`. +That means for a package named `librust--dev`, an optional feature must _additionally_ be packaged as `librust-+-dev`. Note the use of the plus symbol, which is chosen deliberately to avoid conflicts with Cargo crate names. Sometimes, if a crate has a large number of features, they can be collapsed using the `Provides` mechanism. From 35375e47a59015f156ad445eaa721a75736660ea Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:48:25 -0700 Subject: [PATCH 29/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 6a7bb13e..a429b120 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -129,7 +129,7 @@ Note the use of the plus symbol, which is chosen deliberately to avoid conflicts Sometimes, if a crate has a large number of features, they can be collapsed using the `Provides` mechanism. -## What about Rust crates that specify a Rust edition or require a specific toolchain? +## How are Rust crates that specify a Rust edition or require a specific toolchain packaged? Rust editions are effectively handled by the Rust tooling itself. Every version of `rustc` is guaranteed to be backwards compatible with all previous editions of Rust. From 93ffd15e8f78be8ba2df6613c4f09e81d7bfd8c0 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:49:36 -0700 Subject: [PATCH 30/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index a429b120..2b69db05 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -136,7 +136,7 @@ Every version of `rustc` is guaranteed to be backwards compatible with all previ If all the archive crate package versions are frozen alongside the version of `rustc` itself, then that version of `rustc` should support all editions used by the packaged crates. Rust crates can include a `rust-toolchain.toml` file, which can specify a particular compiler version. -This is effectively orthogonal to the official stable Rust editions. +This is unrelated to the official stable Rust editions. The most common use-case for this is to specify that unstable "nightly" features are being used by a crate, and so an unstable "nightly" version of `rustc` is required. The approach for these packages is, more or less, to just exclude them unless there's a really compelling reason not to. By definition, they are unstable packages, and so do not belong in a distribution's archive of stable, supported packaged crates. From 910496a47d7af77a6eb997b64a66bb73563a3786 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 11:50:51 -0700 Subject: [PATCH 31/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 2b69db05..4da400f6 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -137,7 +137,7 @@ If all the archive crate package versions are frozen alongside the version of `r Rust crates can include a `rust-toolchain.toml` file, which can specify a particular compiler version. This is unrelated to the official stable Rust editions. -The most common use-case for this is to specify that unstable "nightly" features are being used by a crate, and so an unstable "nightly" version of `rustc` is required. +The most common use case for this is to specify that unstable "nightly" features are being used by a crate, and so an unstable "nightly" version of `rustc` is required. The approach for these packages is, more or less, to just exclude them unless there's a really compelling reason not to. By definition, they are unstable packages, and so do not belong in a distribution's archive of stable, supported packaged crates. From 06f379c09d2995311060f0ec34279c926b0e0039 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 12:42:19 -0700 Subject: [PATCH 32/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 4da400f6..890a9c18 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -192,7 +192,7 @@ That means you'll get things like the orig tarball, but not the `git` history. **Rust-specific tools:** `debcargo` -: A tool written in Rust that will attempt to automatically convert a Rust crate into a Debian source package, by mapping dependencies to Debian packages and generating important files like `debian/control`, `debian/rules`, and `debian/changelog`. +: A tool written in Rust that attempts to automatically convert a Rust crate into a Debian source package by mapping dependencies to Debian packages and generating important files like `debian/control`, `debian/rules`, and `debian/changelog`. `cargo-debstatus` : Pull the dependencies from a Cargo project, and determine if appropriate versions of them are already available in the package archive. From e453a2712e0f5bec6aa5793ed67c36bcdf6cd963 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 12:42:49 -0700 Subject: [PATCH 33/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 890a9c18..46ec20a7 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -228,7 +228,7 @@ While it's listed under source tooling, it can also check binary packages. **Rust-specific** `dh-cargo` -: A `debhelper` add-on which lets you use `--with-cargo` when calling `dh`. +: A `debhelper` add-on that lets you use `--with-cargo` when calling `dh`. In essence, it enables the direct use of Cargo as a build tool for compiling and linking the code in your package. Note that `dh-cargo` should _not_ be used applications built only partially with Rust. From bfc1f55d7facfea014fc26e3d2ecf8ba10c1bac8 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 12:43:06 -0700 Subject: [PATCH 34/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 46ec20a7..391c8749 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -261,7 +261,7 @@ Either way, as in the above case, the `llvm` package is not needed at runtime bu Many LLVM packages are actually universe packages, which are community-maintained. Packages in the main component of the archive are not allowed to depend on universe component packages. -Accordingly, `rustc` will sometimes use a vendored version of LLVM, even if that version is technically already available. +Accordingly, `rustc` sometimes uses a vendored version of LLVM, even if that version is technically already available. ## What is the status of Rust support for WASM/WASI on Ubuntu? From 7f098881d69ba9e5bee41f0044a77b1c77c96620 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 12:43:24 -0700 Subject: [PATCH 35/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 391c8749..a7ec309f 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -251,7 +251,7 @@ However, for PPAs in a typical Ubuntu workflow, the tests are not triggered auto The relationship can be one of two things, depending on the particular `rustc` package version. 1. For the default `rustc` package, with no version number in the name, `llvm` will be a build-time dependency. -Due to static linking, that means that all the relevant `llvm` code will be effectively copied into the `rustc` binary and the `llvm` package will no longer be strictly needed at runtime. +Due to static linking, that means that all the relevant `llvm` code is effectively copied into the `rustc` binary, and the `llvm` package is no longer strictly needed at runtime. It is generally listed as a suggested dependency of `rustc` in order to support debugging and code generation tasks. 2. For other `rustc-X.Y` packages, `llvm` might be a build-time dependency or we might use a vendored version of `llvm` to avoid the need to backport both packages in lockstep. From 779d39253711b98ffc5b581b2aacb5c4d8cbdd7e Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 12:43:44 -0700 Subject: [PATCH 36/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index a7ec309f..e3e589c8 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -250,7 +250,7 @@ However, for PPAs in a typical Ubuntu workflow, the tests are not triggered auto The relationship can be one of two things, depending on the particular `rustc` package version. -1. For the default `rustc` package, with no version number in the name, `llvm` will be a build-time dependency. +1. For the default `rustc` package, with no version number in the name, `llvm` is a build-time dependency. Due to static linking, that means that all the relevant `llvm` code is effectively copied into the `rustc` binary, and the `llvm` package is no longer strictly needed at runtime. It is generally listed as a suggested dependency of `rustc` in order to support debugging and code generation tasks. From b4f342beb6cb4b689575134cf7db78c6e17090e3 Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 12:43:55 -0700 Subject: [PATCH 37/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index e3e589c8..516ff2f2 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -246,7 +246,7 @@ However, for PPAs in a typical Ubuntu workflow, the tests are not triggered auto `dput` : Upload your package to the package archive or a PPA. -## What is the relationship between `llvm` packages and `rustc` packages? +## What is the relationship between `llvm` and `rustc` packages? The relationship can be one of two things, depending on the particular `rustc` package version. From 2b06c0b222ef8db79b04c0bd4accde455316914b Mon Sep 17 00:00:00 2001 From: Karl Smeltzer Date: Mon, 20 Oct 2025 12:44:36 -0700 Subject: [PATCH 38/38] Update docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Robert Krátký --- .../niche-package-maintenance/rustc/rust-packaging-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md index 516ff2f2..3c64be80 100644 --- a/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md +++ b/docs/maintainers/niche-package-maintenance/rustc/rust-packaging-faq.md @@ -230,7 +230,7 @@ While it's listed under source tooling, it can also check binary packages. `dh-cargo` : A `debhelper` add-on that lets you use `--with-cargo` when calling `dh`. In essence, it enables the direct use of Cargo as a build tool for compiling and linking the code in your package. -Note that `dh-cargo` should _not_ be used applications built only partially with Rust. +Note that `dh-cargo` should _not_ be used for applications built only partially with Rust. ### Tools for working with the binary package