NGI@Nix report for 2025Q1: 2025-01-13 — 2025-04-15

The Nix@NGI team supports authors of software funded though the Next Generation Internet (NGI) initiative, by getting as many as possible of the more than 1200 NLnet-funded software projects to work smoothly on NixOS. This is my report on the team’s activities in the first quarter of 2025.

Summary for Q1

  • Set up a budget plan: 159 000 EUR allocated for 2025
  • Staff: 2 full-time developers, 2 part-time developers, 5 support roles on hourly basis
  • Objectives and Key results: Package all NGI-funded software, make it easy to discover and run
  • Results of Q1:
    • Organisation: Addressing 8 of 11 improvement goals from the 2024 report
    • Packaging: Got 2 new complex applications working, simplified prioritisation
    • Repository: Expanded data model, incremental improvements to presentation
    • Summer of Nix: Prepared beginner tasks, ran Outreachy contribution phase
    • Outreach: 3 major announcements had 5k-15k views
  • Discussion: New team needed time to form
  • Planned for Q2:
    • Packaging: Conclude NGI0 Review and NGI0 Entrust
    • Repository: Implement a first-steps workflow
    • Kick off Summer of Nix 2025
    • Staff: 1 full-time developer, 4 part-time developers, 5 support roles on hourly basis, 1 full-time trainee

Budget

As of January 2025 we had 319k unspent over all running grants. The remaining project duration was 31 months. This results in an average 10 290 EUR/month available.

On average, we were at ca. 35% spending at 50% of the run time, but the detailed picture is more complex due to overlapping grant periods.

Looking more closely, we had:

  • Entrust (22 600 EUR left) and Review (21 400 EUR left) both running until the end of July 2025, accounting for 6280 EUR/month for these 7 months.

    Entrust has been extended until January 2026 since, and Review was requested for extension.

  • Core (62 200 EUR left) runs until end of December 2025, adding 5180 EUR/month for 12 months.

  • Commons (213 300 EUR left) runs until end of July 2027, adding 6880 EUR/month for 31 months)

This table shows the remaining budget by half-year:

For 2025 we’ve allocated ca. 156 000 EUR to staff and 3000 EUR to travel expenses, with a small team that will be active throughout the year. This will result in 31 000 EUR above the average remaining yearly burn rate of 126 000 EUR for the following reasons:

  • Allowing for focused work on strategic issues that couldn’t be addressed so far
  • Keeping the momentum with contractors who stayed around from 2024
  • Laying the ground for more contributions by volunteers

The first bar chart shows the allocated annual budget, colors indicating contributors, and illustrating that we’re implementing the decision to work with a much smaller number of people this year:

The second bar chart shows the actual annual expenses, colors indicating contributors (not all work for Q12025 was invoiced at the time of writing):

Staff

This year we’ve set up a new team that will be operational for the entire year. The Nix@NGI team currently consists of 10 people, all of which but one are past Summer of Nix contributors.

In the first quarter we had a full-time junior engineer and a full-time UX developer. A senior engineer and an experienced packaging contributor joined part-time (12-18h per week) in February. The team is assisted on an hourly basis by a DevOps engineer, a package maintainer, and an admin assistant, as well as a part-time communications expert.

We set up division of labor along these lines:

  • Packaging “operations”: Try to get all of the (eligible, meaningful) projects packaged
    • Streamline contributor workflows
    • Write contributor documentation
    • Collaborate with project authors and volunteers
    • Onboard and mentor trainees
  • NGIpkgs “product”: Make NGI projects easy to discover and run
    • Improve the UX/UI
    • Improve information architecture
    • Write user documentation
  • Organisation “support”: Reduce friction and keep annoyances out of the way
    • Keep infrastructure running smoothly
    • Make good work visible to the inside and outside
    • Reporting, checks and balances

Objectives and Key Results

@imincik helped the new team use the OKR framework to establish and communicate goals, and track progress. The outcomes of the discovery phase in January are pinned on our GitHub issue tracker, with the top three objectives:

The challenge was to make these rather broad ideas tangible by coming up with measurable and attainable results. Most importantly, I’m convinced that what we produce should be meaningful to users of the software we support, as well as the Nix community, and not merely check contractual boxes. In the process, we:

  • Surveyed the backlog of projects funded by NLnet, and came up with a strategy to organise packaging efforts to reach a reasonable coverage within the grant periods:
    • Leverage project authors’ knowledge for initial assessment by sending around a questionnaire
    • Let beginners help with data entry, provide tools for automating repetitive tasks
    • Let experienced contributors focus on the hard problems
  • Collected ideas for what the user experience for software authors, package contributors, and software users should be like.

Working with OKRs is an ongoing process. The team still needs practice, and we keep refining some of the details as we go. But overall the setup provides consistent guidance for our work and hopefully improves visibility into what we’re up to.

Results of Q1

The following sections detail what the team has worked on, produced, or found out in the past three months. Most importantly, this year the team started untangling the whole process that leads up to people running NGI software on their machines:

  • contributor onboarding
  • packaging
  • displaying a collection of applications
  • reporting the state of completion for each appliciation
  • providing usage instructions

The main challange for the NGI collaboration is curating these activities to focus on projects that are in scope and deemed important by NLnet, and fulfill our grant agreement with the European Commission: to build a software repository and to run multiple editions of Summer of Nix. The next section is about the curation aspect, then I’ll discuss our slightly adjusted approach to packaging, what we’ve done about improving the display of results, and our preparations for Summer of Nix 2025.

Organisation

@wamirez helped me with addressing most of the improvement goals from the Summer of Nix 2024 report:

Legend: :white_check_mark: success | :construction: work in progress | :hourglass_flowing_sand:not started yet

  • :white_check_mark: Work on user experience:
    • One team member dedicated to user experience design
  • :hourglass_flowing_sand: Increase ecosystem coverage
    • Added only 2 new packaged applications
  • :construction: Enable knowledge transfer across teams
    • With the smaller team, we routinely share knowledge by working in pair or group sessions as needed
    • Planning to onboard trainees 1:1, to hopefully increase throughput with complex projects
  • :construction: Long-term sustainability
  • :hourglass_flowing_sand: Continuous tooling improvement
    • Expanded our understanding of critical areas for improvement, such as installation, documentation, and learning materials
    • Worked on improving tooling and processes at the NixOS Foundation organisation level, such as cross-team communication, technical infrastructure, and accounting
    • Added programmatic exposure tree-sitter grammars as Python modules
  • :construction: Increase cost effectiveness
  • :hourglass_flowing_sand: Improve forecasting
    • Haven’t gotten to analyse the time sheets yet
  • :white_check_mark: Keep overhead below 15%
    • Project management is 8% of allocated budget
    • Outreach and travel expenses together are 7% of allocated budget
  • :white_check_mark: Plan for additional outreach efforts
    • A team member is dedicated to outreach
  • :construction: Build a more reliable hiring pipeline
    • Tapped into Outreachy’s established talent discovery process
    • Refined the application process for Summer of Nix
  • :white_check_mark: Reduce experimentation
    • Following standard procedures with OKRs and spiral development model
    • All team members are familiar with at least parts of the project
    • All team members have worked together in the past

Packaging

Progress on adding more applications to the the NGI software repository is slow but consistent:

In order to eventually converge on a faithful reporting on the state of completion for packaging NGI software, we spent time on refining requirements for what it means that an application is “packaged for NixOS”. That in turn made us re-assess our idea of what an “application” even is.

We noticed that the ad hoc distinction between “application as derivation” in Nixpkgs vs. “application as configuration module” in NixOS creates lasting confusion among beginner users, and makes it hard to present a uniform installation method for different types of application. We also noticed that the grant-oriented view we had inherited from NLnet, which considers “efforts to create or improve some piece of software”, tends to obscure that multiple such efforts can concern the same application.

Instead, I proposed that an “application” is what users will recognise, search for, and interact with as if it was a single piece of software. It doesn’t matter if it actually is, and surely that definition leaves some room for interpretation.

But the small shift in perspective that results from grouping NLnet grants under our own notion of “application” elegantly removed a time sink we had to deal with in past years: figuring out which projects are still alive and relevant. This is now approximately answered by the number of grants a project has received over the years. From now on we will prioritise packaging according to the number of grants an application received. The exact order will be adjusted to the timelines of our active NGI funds: since NGI0 Entrust and NGI0 Review will run out first, therefore we should first finish projects funded from those two exclusively.

Repository

The new view on applications revealed that the a surprisingly large fraction of the most important ones already has some packaging artefacts (my tentative estimate is 40%) — primarily thanks to incredible volunteer effort of the past years. But the problem remains that there’s generally still no easy way to find or use them, especially for people not necessarily familiar with the Nix language and NixOS. This observation is the reason for last year’s decision have Summer of Nix deal less with raw packaging and more with presentation and user experience. And it is a problem we have traditionally avoided dealing with head-on, for a number of reasons that would deserve their own essay.

The next big question the team worked on is what it means for an application to be sufficiently or completely packaged. In the first years of Summer of Nix, tasks were sometimes deemed concluded when a derivation was building, but that often left the software unusable because it actually required a service configuration. My current estimate is that about 60% of the NGI applications we’re packaging feature a service. Looking more closely though, software projects have all sorts of artefacts that can be part of a “package”:

  • Standalone executables
  • Networked or system services
  • Libraries (for different languages)
  • Plugins or extensions
  • Raw binaries (e.g. firmware)

And in order to get started with using — or even contributing to the software or its packaging — we need even more:

  • Tested configuration and usage examples
  • Links to documentation

Knowing which projects need what would help us coordinate efforts (and show detailed progress reports). Knowing what’s already done would help users assess whether something is worth trying out. That data was gathered ad hoc in the past, and there seems to be no prior art for doing it in a structured fashion in the NixOS code base. We’re now experimenting with a new data model for “packages”, to keep track of completion right in the packaging code, expose it to end users and contributors alike, and reduce the opportunities for data entry errors. I hope this will end up to be one major innovation we can eventually upstream to NixOS, once it has proven itself in NGIpkgs.

@erethon worked with the NixOS infrastructure team to support the Nix@NGI team with its operational needs, and among many other things published the web rendering of our package repository under ngi.nixos.org. @erictapen made a number of incremental improvements to the user interface and identified many more little tweaks she will implement in the coming weeks.

We also started work on a “first-encounter” experience for people coming from traditional Linux distributions such as Ubuntu. The first internal demos look very promising, requiring very few interactions to get a service running in a VM, and we will show some of that in Q2.

Meanwhile, @eljamm did a lot of work in the background to clean up the code to reduce tech debt that had accumulated and @wegank is keeping in check broken packages that resulted from periodically updating dependencies.

Summer of Nix

The team put some thought into aligning this year’s Summer of Nix with our still-evolving goals. Generally, this season we will have very few trainees compared to prior years, but want to provide them with better support and integrate them more tightly into one team than was possible in the past.

@eljamm identified a smoother learning curve for contributor onboarding, and splendidly exercised it with the Outreachy contribution period, automating small pieces of the workflow in the process. This significantly helped:

  • Increase our understanding of the complexities of different software projects
  • Test-drive our new data model for packaging
  • Identify and reduce barriers to first-time contributors
  • Refine and communicate the skill requirements for Summer of Nix
  • Learn to know some of this year’s Outreachy cohort

Great many thanks to everyone who joined us via Outreachy, it is a pleasure working with talented people we would otherwise not have met! We are also very grateful to Outreachy organisers for their thoughtful program design that challenged us to implement many improvements to how we operate, as well as the various Nix community members who suggested to participate.

With input from experienced past Summer of Nix mentors and participants @julienMalka @imincik @erictapen, @wamirez helped set up a call for applications, where we sharpened both what we have to offer to and what we expect from trainees. The team will evaluate applications by end of May.

Outreach

To further increase visibility and transparency of the project, NixOS marketing team lead @idabzo supports the Nix@NGI team with preparing and disseminating messages on different platforms:

  • NixOS Foundation Platforms: Major announcements and updates are shared on the NixOS Discourse, and via the NixOS Foundation’s official social media channels such as @nixos_org on Mastodon.
  • Social media: Updates are extended to broader audiences through Nix/NixOS-related communities such as NixOS Reddit, Hacker News, as well as FOSS/OSS information hubs such as It’s FOSS Community, FOSS Life, and Sustain OSS.
  • NGI0 channels: We benefit from additional outreach opportunities through NGI0, with dedicated support from Tessel Renzenbrink (who also runs the NGI0 podcast). This includes exposure via the NGI0 newsletter and social media channels such as @NGIZero on Mastodon, amplifying our reach to the wider free and open source software community.
  • Office hours: The team also hosts office hours twice a week (see the NixOS Google Calendar), providing a dedicated space for direct engagement with contributors, maintainers, and newcomers. On average, 1-2 participants attend each session.

These efforts have already surpassed results from past years:

  • NixOS Discourse serves as the primary platform for in-depth updates, maintaining steady engagement.
  • Reddit provides significant exposure, particularly for Outreachy-related announcements, with over 27k combined views as of March 2025.
Outreach statistics
Month Item Platform Views Likes
January 2025 Team update #1 Nix Discourse 5.2k 38
It’s FOSS Community 56 3
SustainOSS 25 1
FOSS United 18 1
February 2025 Team Update #2 Nix Discourse 164 5
Team Update #3 Nix Discourse 140 6
March 2025 Team Update #4 Nix Discourse 136 9
Announcement Platform Views Likes Reposts/Upvotes
March: Call for Outreachy Mentors NixOS Discourse 1.3k 19
NixOS Reddit 11k 16
NixOS Foundation Bluesky 2 1
NixOS Foundation Mastodon 2 6
NixOS Foundation X 1556 18 6
NixOS Foundation Linkedin 865 22 1
NGI-0 Mastodon 10
March: Outreachy Interns’ Call NixOS Discourse 513 6
NixOS Reddit 16k 28

Discussion

While development teams are a normal thing in the software industry, it’s an unusual occurence in what has been an almost exclusively volunteer community up to recent years. And this team needed time to form.

Due to various time constraints we unfortunately had a staggered onboarding of team members, which together with scheduling challenges (most of us can work on the project only a few hours per week) and sickness led to detours and delays.

After a few trials, we’ve converged on three meetings per week that take place in a Jitsi video conference, while the rest of the work is done asynchronously. These sessions consist of:

  • planning at the beginning of the week
  • backlog grooming in the middle
  • weekly review at the end

and are regularly attended by most team members. The others engage with the team on our private and public Matrix room and contribute to discussions async as issues or tasks arise.

We certainly had to go through some moments of frustration, and things felt very slow in the beginning. But by now I observe a mostly well-running, highly motivated team that delivers consistently.

Thank you very much @hexa and @jfly for your help with official infrastructure, and thank you @ron @tomberek @kate @ryantrinkle for keeping our backs on the foundation side of things.

Planned for Q2

For the next quarter we plan to continue on the path laid out in the past months, concretely:

One of our full-time developers will switch to part-time, so will have one full-time developer until the end of the year. Another part-time developer will join to pick up more packaging, and we will onboard a full-time Outreachy intern.

6 Likes