Nix separates its Perl bindings from the package manager
The final Perl-removal branch takes interpreter and module checks out of Nix's main build. A separate nix-perl package retains the bindings and their own dependencies.
Removing an implementation dependency does not require deleting every interface written in that language. The April 14, 2017 NixOS Weekly report announces that Shea Levy's final branch removing Perl from the Nix tool has merged. The linked pull request 1027 separates the Perl bindings into their own build. That distinction explains both what Nix no longer requires and how Perl consumers can retain access to its store interface.
The patch series makes the dependency boundary concrete. The main configuration stops requiring the interpreter and its database modules. A separate nix-perl build acquires those checks instead. This is an architectural change in how the tooling is packaged, rather than a claim that Perl has disappeared from the package collection or from every NixOS system.
My interest in Nix comes from making infrastructure state and dependencies explicit. A package manager with fewer mandatory implementation dependencies is attractive for that reason. The useful question is which component needs each dependency, and this change gives the bindings a separate place to declare theirs.
Main configuration stops probing Perl
The old top-level configuration requires a Perl executable and tests whether it supports the pipe-opening form available in Perl 5.8.0 and newer. It also asks Perl's Config module for version and architecture information to construct the module installation directory. The patch removes those operations from the main build.
The database-module checks move as well. Previously, configuration accepts paths for DBI and DBD::SQLite and attempts to load them. Missing modules stop the configuration with an error. Removing that requirement means a builder of the core package no longer has to satisfy the Perl database interface merely to configure Nix.
The top-level makefile also stops including the Perl build rules. This is necessary for the separation to be real. Removing a listed build input alone would not help if the build still descended into code that needed the interpreter or attempted to compile its bindings.
Documentation changes remove Perl and its database modules from the main source prerequisites. That keeps the installation instructions aligned with the actual checks. Otherwise, a user following the documentation could still install dependencies that the main build no longer needs.
Bindings retain an independent build
The series introduces a perl/Makefile and a separate perl/configure.ac. The latter identifies the package as nix-perl. It retains interpreter and module-installation checks appropriate to Perl bindings, including tests for DBI, DBD::SQLite and WWW::Curl.
The binding build finds Nix through pkg-config and requires nix-instantiate. It evaluates the installed Nix configuration to retrieve paths such as the binary directory, store directory and system-configuration directory. This reverses the relationship that would exist if core Nix needed to build its Perl bindings as part of every ordinary installation.
A separate release job depends on the Nix build and the Perl-specific inputs. It sets its source root to the Perl subdirectory. The resulting dependency direction is explicit, because the bindings need Nix while Nix's main build no longer needs the bindings.
The bindings' generated configuration also changes to use the path values obtained for that separate build. Its $useBindings setting becomes unconditional. A consumer of this component is choosing the binding package, rather than relying on a switch that makes bindings an optional internal mode of the core build.
I regard that separation as more informative than a broad claim of language removal. It preserves a useful interface while allowing installations that do not use the interface to omit its requirements. The patch does not need a judgement about Perl's suitability for unrelated applications to justify that dependency structure.
Packaging metadata must follow the split
The release expressions remove Perl from several core build-input lists. They also remove DBI and SQLite binding configuration flags from those jobs. The native SQLite library remains among the inputs shown in the patch, so removing the Perl database interface does not mean removing Nix's use of SQLite itself.
Distribution packaging changes reflect the same distinction. Debian requirements lose the Perl database and Curl modules, while the native library dependencies remain. The RPM-oriented build environment likewise drops Perl-specific development and SQLite module packages. This is where a source-level separation becomes a smaller set of mandatory packages for downstream builders.
The patch provides no closure-size measurement or runtime speed comparison. It supports saying that dependencies have been removed from these build and package declarations. Assigning a numerical reduction or promising a measurable performance improvement would require evidence outside what the series supplies.
Tests also need to stop depending on the removed tool. The store-optimization test replaces Perl lstat snippets with stat calls for inode and link-count checks. Its purpose remains checking whether store optimization makes the expected files share an inode. Changing the inspection tool lets that test continue without reintroducing Perl solely for the test's bookkeeping.
Remote-build documentation follows the executable name
The distributed-build documentation changes the hook path from build-remote.pl to build-remote. References to supported features and current-load bookkeeping follow the new name. That is a visible consequence for an administrator reading the hook instructions, even though this final patch is primarily dependency cleanup.
The documentation continues to describe the hook as selecting remote build machines and tracking its own active remote builds. The name change should not be mistaken for evidence that this patch introduces an entirely new distributed-build protocol. Its concrete contribution is aligning the instructions with the tool that no longer carries the Perl script suffix.
The series includes commits dating to August 2016 and a final formatting change from March 2017. Those dates support the newsletter's description of long-running work. The April event is the report of the merged completion, rather than the first appearance of the idea.
The newsletter reports the branch as merged work. It does not attach this completion to a newly published stable Nix version in the announcement. Treating the report as development progress preserves that distinction while still describing a finished dependency split in the source tree and its release expressions.