(address . guix-patches@gnu.org)
---
00X-international-substitutes.md | 109 +++++++++++++++++++++++++++++++
1 file changed, 109 insertions(+)
create mode 100644 00X-international-substitutes.md
Toggle diff (117 lines)
diff --git a/00X-international-substitutes.md b/00X-international-substitutes.md
new file mode 100644
index 0000000..11c6a4f
--- /dev/null
+++ b/00X-international-substitutes.md
@@ -0,0 +1,109 @@
+title: International substitute servers
+id: <the next available number>
+status: draft
+discussion: <draft|submitted|accepted|withdrawn|deprecated>
+authors: Antero Mejr
+sponsors: <Sponsor Name>
+date: <date when the discussion period starts>
+draft-date: 2025-08-07
+discussion-date: <date when the discussion period starts>
+deliberation-date: <date when the deliberation starts>
+SPDX-License-Identifier: CC-BY-SA-4.0 OR GFDL-1.3-no-invariants-or-later
+---
+
+# Summary
+
+The official binary substitute servers for Guix, `ci.guix.gnu.org` and
+`bordeaux`, are both located in Western Europe. Users outside Western Europe may
+experience slower speeds when downloading substitutes: 50-200 kbps is not
+uncommon. Since substitutes can be quite large, this causes significant slow
+down when performing package operations. This RFC proposes the establishment of
+additional substitute servers in other regions.
+
+# Motivation
+
+In the present state, users outside Europe experience substitute download speeds
+on the order of kilobits per second. This comprises some of the perceived
+"slowness" of Guix, as mentioned in all three of the [Guix
+surveys](https://guix.gnu.org/en/blog/2025/guix-user-and-contributor-survey-2024-the-results-part-1/).
+Other package managers with distributed substitute servers achieve download
+speeds of tens or even hundreds of megabytes per second, many times faster than
+the single Guix substitute server can provide.
+
+Common dependency packages such as LLVM can be large, around 50-200 MB.
+Downloading substitutes for them on such a slow connection will take at least 5
+minutes, and that is only for a single dependency. This is a significant
+impediment to package management operations and workflows.
+
+Distributing substitutes can also increase reliability. As it stands, if
+`ci.guix.gnu.org` is not available, the user will not be able to download
+substitutes at all. It also assists with reproducibility: more identical
+substitute builds means a higher degree of assurance of deterministic,
+reproducible packages.
+
+# Detailed Design
+
+Many package managers make available dozens of substitute servers (often called
+"mirrors") from which to download compiled packages. Usually package managers
+have some sort of configuration option to select the mirror with the fastest
+connection, typically the mirror that is geographically closest, and possibly
+some sort of auto-detection of connection speeds. Guix does not currently have
+such a configuration option, and defaults to `ci.guix.gnu.org`. The addition of
+a mirror selection configuration option is part of this proposal. Such an option
+could be a `guix-configuration` option of `guix-service-type`.
+
+The Guix installer, for both the ISO and foreign-distro forms, would have an
+additional prompt to select a substitute server from a list.
+
+Since many Guix users and developers are based in the United States, a US-based
+server would be a sensible first step beyond the European region. From there
+community feedback can be solicited to determine locations for future servers,
+so long as sufficient funds are available.
+
+## Cost of Reverting
+
+Cost scale: 0 - No incompatibility
+
+Users of Guix System would experience no change, as substitute server
+authentication is handled automatically. Users of Guix on foreign distros who
+are installing for the first time would experience no change, so long as they
+choose to authorize binary substitutes at install time.
+
+For users of Guix that is already installed on a foreign distro, they may need
+to follow [these
+steps](https://guix.gnu.org/manual/en/html_node/Substitute-Server-Authorization.html)
+to authorize the new substitute servers if they wish to use them. Otherwise they
+would not see the benefits.
+
+No deprecation of existing substitute servers would be necessary.
+
+Depending on whether colocation is used, maintenance of the substitute server
+may require a Guix developer in the geographic area of the server, with proper
+vetting/access clearance to perform administrative tasks directly on the
+hardware. Remote maintenance of the server(s) would be possible for most
+operations.
+
+Should a new substitute server need to be decommissioned (for whatever reason),
+there would need to be a process established for doing so without breaking
+compatibility. This would involve having the decommissioned substitute server
+URL redirect to a different active and authorized substitute server.
+
+# Drawbacks and Open Issues
+
+TODO: Decide specifics (colocate vs. cloud, location)
+
+The main drawback of maintaining additional substitute servers is cost, in both
+the initial investment and recurring costs. For example, Nix serves their
+infrastructure through [Amazon
+AWS](https://discourse.nixos.org/t/s3-sponsorship-extension-more-resources-to-build-a-more-sustainable-nix/50936)
+and their recurring costs are $15,000 per month.
+
+However, Guix could potentially mitigate some of the costs. Making use of
+donated hardware, and using colocation instead of the cloud could reduce the
+monthly spend. Also the FSF may have resources that can provide servers or
+colocation services at a reduced price. Guix also has an FSF [Working Together
+Fund](https://my.fsf.org/civicrm/contribute/transact?reset=1&id=50) that could
+potentially be used to fund substitute servers.
+
+The [Guix Foundation](https://foundation.guix.info/) may also be interested in
+providing financial support for international substitute servers.
--
2.50.1