I lead Tweag’s Nix group.
The Nix environment is at a turning point in its development. After more than a years of sluggish however consistent development, Nix got a great deal of traction in the previous couple of years, leading the neighborhood to broaden at an amazing rate. This development hasn’t been without problem.
As experts, we see that almost all of our customers that are utilizing Nix are, at finest, irritated by the unexpected intricacy that includes it. A few of them even choose to withdraw due to the fact that of that, entrusted to a nondescript sensation that Nix is not all set for them.
We appreciate Nix, and we desire it to prosper.
The method to arrive is to reinforce Nix’s core as much as possible. Rather of getting lost in lots of interesting things that Nix might do, we need to take a practical technique in making sure that the core performance of Nix works well, and is offered to everybody.
In specific, we ‘d like to concentrate on making Nix an excellent designer tool. We believe that needs Nix to:
- fix individuals’s issues,
- work dependably all over, and
- be common.
I enjoy the Nix design. Originating from a theoretical CS background, the concepts behind Nix are those the entire computing market need to have embraced, and I wish for the day when they end up being the requirement. Real-life ™ is likewise a thing, and regardless of my partiality towards Nix, I periodically have to confess that, well, it’s simply not good-enough in practice for what I desire to do. And if I need to confess that, it suggests that many people who do not care about the theoretical side of things will simply quit on it, and truly so. Why should anybody utilize a tool that does not resolve their issue?
So we desire Nix to supply a clear course towards resolving clear issues. Recognizing these issues is currently a non-trivial part of the work, however from our previous experience we can sketch out some broad axes along which to enhance.
Veterans Nix users usually think about
nix-shell or its follower
nix establish to be a great by-product of the more comprehensive Nix world: If you package your program to be constructed with Nix, then you likewise by the way get this cool environment that you can utilize to establish it. Which’s really how
nix-shell began– a fast hack for debugging product packaging problems.
But the fact is that these advancements environments are exceptionally important on their own. Even if you do not have an appropriate tidy Nix product packaging, you can simply drop in a
flake.nix someplace and get all of your reliances amazingly pulled-in for you.
We wish to reassess this performance to straight resolve the requirements of individuals, instead of having its effectiveness be a simple incidental nicety. This suggests:
- Actually attempting to comprehend why and how individuals are utilizing it, and how they might benefit more from it– be it through principled user-studies or by listening to the feedback of the neighborhood and our customers.
- From this top-level vision, rethink
nix establishto much better response these requirements, utilizing a documentation-driven method to keep the end-user in the center of the loop, perhaps constructing on or drawing motivation from other jobs like Numtide’s devshell or nix-output-monitor
Be it as a backend for their advancement environments or due to the fact that they are more connected into Nix, a variety of Nix users require more than simply having the ability to run a Nix command by themselves device. Even a fairly basic Nix setup may rapidly need running Nix on the CI, with a binary cache, perhaps even dispersed builds, and so on. And even basic circumstances of this are typically a substantial discomfort to do effectively.
Some tasks like the remarkable cachix and the associated github actions or nixbuild.net offer a few of this facilities as a service, however they aren’t constantly an appropriate alternative, nor are they a reason for a bad out-of-the-box experience. There’s just so much that they can do, and some issues (efficiency in specific) can just be fixed at the root– the Nix application itself.
Solving this concern in its complete generality is a difficult issue, nevertheless we can guarantee that the most basic and most typical usage cases are effectively covered– as just as possible and completely recorded.
In the most basic circumstances, Nix works excellent. Nix on NixOS is a breeze, Nix on Ubuntu works well 99% of the time, and Debian even makes Nix readily available in its own repositories. The other situations vary from okay to terrible (any Mac users around?).
This is an unfortunate state, however not a death. We (the neighborhood) have the resources to make Nix a success story all over it can be, and we (Tweagers) wish to be a driving force for that effort.
This implies in specific:
- Improving the Nix installer. It is a small however important piece of the environment– being usually the really first thing that individuals run prior to utilizing Nix on a system– yet it is among the least liked parts of the Nix codebase.
- Fostering more efforts to keep nixpkgs healthy on MacOS. The Nix neighborhood study reports that there’s more than 3 time more Linux users than MacOS users in the Nix neighborhood. Compare to designers in basic: there are just somewhat less Mac users than Linux users according to the Stack Overflow study.
- Allowing Nix to run in limited business environments, for instance without any or limited root gain access to, or utilizing access-control systems like SELinux.
Being basic and dependable is excellent. Understand what’s much better? Being all over.
Take the excellent old shell script. It’s not basic for anything beyond simply sequencing a couple of commands. It’s probably not reputable either because it has many traps that many shell scripts in the wild are bound to explode provided anything as destructive as a filename with areas or an empty criterion. Everybody– myself consisted of– utilizes shell script for so lots of things, since it’s simply the de facto requirement, so we understand that it will be readily available and that individuals will comprehend what’s going on. Even when individuals attempt to change it, they keep it as a point of recommendation and even attempt to remain suitable with it.
Likewise, we desire Nix to be all over. We desire a world where discovering a
flake.nix at the root of a software application job is not an enjoyable surprise however something anticipated and typical. And we desire individuals who develop tomorrow’s software application circulation system to a minimum of understand and acknowledge the Nix design, and take that into account.
To arrive, we prepare to:
- keep the marketing synergy going, to make more individuals knowledgeable about Nix and offer the neighborhood tool to discuss it,
- keep composing and discussing Nix in public,
- take part or assist arrange conferences and workshops.
This is certainly a broad roadmap, and bound to progress. A few of that, like the marketing synergy or the deal with the Nix bundle supervisor has actually currently been going on for a long time. Endeavors like the collaborated paperwork effort or the nixpkgs-architecture group is simply beginning. Some have yet to start. We hope that it will assist shed light on the work that Tweag does and plans to do for the Nix neighborhood, and perhaps likewise serve as a motivation both for a prospective community-wide roadmap and for specific contributions.
We likewise mean to frequently release a shorter-term roadmap on discourse along with our typical dev updates. Remain tuned!