Summer of Nix funds packaging work and contributor learning
The first Summer of Nix brings beginners and experienced contributors together for paid work on free-software packaging. Its proposed output is useful package maintenance as well as new expertise.
Learning a package system and maintaining useful packages can be the same activity if contributors have time and support for both. The March 30 Summer of Nix announcement proposes a paid program organized around that connection. It invites beginners and experienced Nix users to learn together while improving packaging for free and open source software.
The announced dates are August 2 through October 15. Funding comes from the European Commission through NLnet and the NixOS Foundation. Applications are open, and participants are to receive a stipend. These are plans for the first edition, not a report of completed packages or measured contributor retention. The distinction matters because the interesting change in March is the funding and organization of the work.
I am interested in declarative infrastructure because it makes a system's desired state explicit. That benefit depends on package definitions being available and maintained. Funding people to improve those definitions addresses work that every user of the resulting package can share, even when that work has little visibility outside the package collection.
Packaging captures how software is built
The Nixpkgs 20.09 standard-environment manual shows what a package contribution can involve. A package using the familiar configure, make, and install sequence can use stdenv.mkDerivation without supplying a complete custom builder. The standard environment provides phases and common tools. An expression supplies the source and other attributes needed to construct the package.
That arrangement makes a basic contribution approachable, but it does not make packaging trivial. A maintainer must determine the actual source and dependency requirements. Software using a different build procedure may need a phase override. A build that previously found a library through a developer's machine needs that dependency expressed in the package definition.
The manual describes phases for unpacking, patching, configuring, building, and installation, with hooks and overrides for cases that do not match the defaults. Those distinctions let contributors repair a particular step without replacing the whole build process. They also provide a common vocabulary for review. A patch applied before configuration and a command run after installation belong to different places in the package definition.
This explains why improving packaging can produce durable technical work while teaching the model. The contributor has to make assumptions explicit enough for the standard builder to use. The resulting expression is available for later review and revision. A successful local command entered from memory does not provide that same description by itself.
Dependency declarations carry technical meaning
The standard-environment documentation distinguishes dependencies by the platforms on which they run and the platforms for which they produce output. The distinction is especially important for cross compilation. A tool executed while building a program is not interchangeable with a library linked into the resulting program. Both may appear to work on a native build machine while still having different roles.
nativeBuildInputs names tools that run on the build platform. Other dependency attributes express other platform relationships, and setup hooks use these declarations to prepare the environment. The manual explains that dependencies can also propagate requirements to consumers. A package definition therefore contains information that affects more than whether a command can find an executable today.
For a learner, this can be a difficult transition from treating the workstation as an implicit collection of available tools. It is also useful instruction in build engineering. A missing declared tool and an incorrectly classified dependency can produce different failures. Working through those failures with experienced contributors can explain the reason for the expression instead of merely producing a string that happens to build.
The program announcement does not prescribe a particular curriculum for these topics. They illustrate the work involved in its stated packaging theme. It would be inaccurate to present them as confirmed weekly lessons or promise that every participant will work on cross compilation. The source establishes the common theme and mixed experience levels, while the manual establishes what packaging can require.
Shared conventions make review possible
The manual prefers separate pname and version attributes for Nixpkgs packages, with mkDerivation deriving the combined name. This allows the version to be reused in a source URL and other attributes. A convention of that kind is modest, but it makes later version updates easier to understand. Reviewers can find the version where they expect it rather than reconstructing it from unrelated strings.
Build-system hooks provide another shared convention. The documented CMake hook selects an appropriate configure phase and prepares dependency search paths. The Meson support likewise sets up its build procedure, including a mode that avoids downloading dependencies during configuration. A contributor can use those established mechanisms instead of inventing a complete build wrapper for every package.
This is where beginner and experienced work can complement each other. A learner may understand the upstream project well while needing help choosing the Nixpkgs mechanism that represents it. An experienced packager can identify an existing hook and explain the exception that genuinely needs custom code. That is a possible benefit of the announced collaboration model, not a report that the program has already achieved it.
I consider that exchange worth funding because maintaining a package collection requires judgement as well as expression syntax. Defaults are useful when contributors understand why they apply. Repeatedly copying a package that resembles the new one can hide assumptions, while a reviewed explanation makes those assumptions available to the next maintainer.
A funded program still needs a concrete scope
The announcement calls this the first Summer of Nix and identifies organizers who have worked on putting it together. It invites questions and suggestions through the discussion thread or the program email address. It does not publish a completed project list, a stipend amount, or a claim about the number of people who will participate. Those details should not be inferred from the existence of funding.
Its stated scope is sufficiently concrete to distinguish it from a general promotional event. Participants are to improve free-software packaging while learning Nix together. Package definitions and the knowledge needed to maintain them are related outputs. In March, the available commitment is a paid period for that work, with applications open ahead of the August start.