# Experimental does not mean unstable: DetSys's perspective on Nix flakes

**URL:** https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703
**Category:** Links
**Created:** [September 7, 2023, 12:34am UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703 "2023-09-07T00:34:21Z")
**Posts on this page:** 15
**Page:** 3

<div class="post-metadata">

### Author: ![matklad](https://discourse.nixos.org/user_avatar/discourse.nixos.org/matklad/32/26467_2.png) [@matklad](https://discourse.nixos.org/u/matklad)
#### Post date: [September 11, 2023, 11:19am UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/43 "2023-09-11T11:19:04Z")

</div>

Thanks, this is super useful and adds a tonne of context!

> [@fricklerhandwerk](#):
>
> I find that the team is a reasonable approximation to being representative of the wider Nix developer community in terms of opinions

I think this is a bit different for Rust — I would say it’s a not a goal for a Rust team to represent wider community. Teams listen to community feedback, and in turn are required to make their reasoning public to the community, but decisions are based on within-team consensus, not on the community consensus. Usually the two are aligned anyway, but sometimes teams make decisions which are at odds with some fraction of the community (the three most memorable cases are the syntax for `.await`, the syntax for `?`, and the name resolution rules around rust 2018). Rust is more of benevolent hereditary aristocracy than a democracy.

> This is only true for `flakes` and `nix-command` ,

I _think_ the experimental flag was added specifically for these two historically. So, yeah, I should say i don’t understand `experimental` applied to these two particular things.

---

<div class="post-metadata">

### Author: ![piegames](https://discourse.nixos.org/user_avatar/discourse.nixos.org/piegames/32/5324_2.png) [@piegames](https://discourse.nixos.org/u/piegames)
#### Post date: [September 11, 2023, 11:20am UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/44 "2023-09-11T11:20:14Z")

</div>

> [@fricklerhandwerk](#):
>
> In practice I don’t really see RFCs getting past the respective code owners. But they can easily get blocked by other stakeholders, although it’s decided ad hoc who that is and sheperds are usually self-selecting. We may want to write this down to set more realistic expectations. @piegames do you think we can just amend the RFC process description without jumping through all of the hoops?

It depends on what exact change in question is; I haven’t fully followed the discussion so far. Changing the process _description_ to better match what is currently done in practice most of the time should be fine. Changing the process itself may be acceptable for small and uncontroversial things, but generally requires an RFC.

The RFC process currently has no real decision mechanism for controversial topics, and this is a difficult issue to solve. See [Improving our RFC process](https://discourse.nixos.org/t/improving-our-rfc-process/28552) where it has been discussed before. Honestly this is a topic that probably requires a lot more discussion before even making it into an RFC.

---

<div class="post-metadata">

### Author: ![7c6f434c](https://discourse.nixos.org/letter_avatar_proxy/v4/letter/7/8e7dd6/32.png) [@7c6f434c](https://discourse.nixos.org/u/7c6f434c)
#### Post date: [September 11, 2023, 11:56am UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/45 "2023-09-11T11:56:00Z")

</div>

> [@piegames](#):
>
> The RFC process currently has no real decision mechanism for controversial topics, and this is a difficult issue to solve.

I would say it has, but with no guarantees of convergence. If shepherds who originally held opposing views eventually reach agreement (which includes the other shepherds and the author), this does help with legitimisation, and sometimes it works (at least in low-heat issues with diametrically opposed views without too much emotion attached).

If a deadlock is indeed persistent and is not resolved by a few hours of negotiations and a few tens of hours of research and preparation, the process indeed reflects the split.

---

<div class="post-metadata">

### Author: ![Ericson2314](https://discourse.nixos.org/user_avatar/discourse.nixos.org/ericson2314/32/316_2.png) [@Ericson2314](https://discourse.nixos.org/u/Ericson2314)
#### Post date: [September 11, 2023, 4:56pm UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/46 "2023-09-11T16:56:23Z")

</div>

@matklad I think some of deviations can be explained purely by the order in which things occurred:

### Rust

1. Graydon BD ~~FL~~
2. Mozilla-led project
3. Core Team + RFC process with Core Team review
4. Other teams
5. Mozilla steps back, Foundation etc.

### Nix

1. Eelco BFDL
2. Nixpkgs grows into anarchic thing, Eelco takes step back from it
3. Very hands-off Foundation
4. Attempts at Core Team for Nix, but it doesn’t stick
5. RFCs
6. Bigger foundation, new teams that stick

The big differences as such are:

1. While Nix is very consciously imitating Rust with RFCs and experimental features, our RFCs predate teams and so this more informal convening of shepherds process was created instead.
2. Authority in Rust was centralized to begin with, and so “sovereignty flowed downward” (“God” → “king” → etc.), whereas Nix had ceased to have any clear leadership by the point of establishing this structure, so sovereignty had to flow upward (Community (??) → Teams/Foundation). So it’s very natural our teams would be formed from people who don’t agree on everything — we have to represent different constituencies to be able to claim legitimacy.

---

<div class="post-metadata">

### Author: ![michaelCTS](https://discourse.nixos.org/user_avatar/discourse.nixos.org/michaelcts/32/9405_2.png) [@michaelCTS](https://discourse.nixos.org/u/michaelCTS)
#### Post date: [September 13, 2023, 7:46am UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/47 "2023-09-13T07:46:35Z")

</div>

As others have said **experimental should mean unstable**. If I opened mozilla firefox and they had introduced an experimental feature that removed access to certain API or introduced new ones, I wouldn’t build any production-ready software on it. I’d wait until it was out of experimental and declared stable.

`nix` is the only thing I’ve encountered that is too afraid to actually take advantage of “experimental” and break things that are behind an experimental feature flag.

This entire situation could possibly be resolved by using semantic versioning, IMO. Version each flakes change appropriately, add a “version” to the flakes file (like docker-compose.yaml, pyproject.toml, etc.) and fail when the wrong flakes version is being used. Then provide a fallback mechanism that downloads and executes the `nix` binary with the correct flakes version.  
And if a dependency in the dep tree uses an unsupported flakes version, then also fail.

Personally, until flakes are declared stable and it really means stable, I won’t use it.

---

<div class="post-metadata">

### Author: ![shaniag](https://discourse.nixos.org/letter_avatar_proxy/v4/letter/s/8e7dd6/32.png) [@shaniag](https://discourse.nixos.org/u/shaniag)
#### Post date: [September 13, 2023, 12:27pm UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/48 "2023-09-13T12:27:33Z")

</div>

There needs to be a clear pathway, a roadmap where all current issues are listed and described properly so people can effectively create pull requests to solve them. Once all of these major issues have been resolved, it can be marked as stable. The primary problem currently is that everything is all over the place, and because of this mess there is basically no progress made.

How about a roadmap on the GitHub nixpkgs repository, that would be a great way to display the issues and monitor the progress.

I think we should just start doing stuff, and stop discussing forever. This discussion is already going for years now and is stopping everyone. @Infinisil already layed out what needs to be worked on in a great way. So that could be used as a starting point for the roadmap.

---

<div class="post-metadata">

### Author: ![michaelCTS](https://discourse.nixos.org/user_avatar/discourse.nixos.org/michaelcts/32/9405_2.png) [@michaelCTS](https://discourse.nixos.org/u/michaelCTS)
#### Post date: [September 13, 2023, 1:08pm UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/49 "2023-09-13T13:08:17Z")

</div>

What kind of project management does the nix foundation have anyway? Github (finally) has projects with a kanban board and other views (something gitlab has had for years). It should be possible to create a “flakes” project that’s managed by flakes maintainers, add tickets on there and let people volunteer to work on them to drive them forward.

Github projects even have a [roadmap feature](https://github.blog/changelog/2023-01-31-roadmap-in-projects-public-beta/).

---

<div class="post-metadata">

### Author: ![shaniag](https://discourse.nixos.org/letter_avatar_proxy/v4/letter/s/8e7dd6/32.png) [@shaniag](https://discourse.nixos.org/u/shaniag)
#### Post date: [September 13, 2023, 1:37pm UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/50 "2023-09-13T13:37:46Z")

</div>

Yes, that is what I meant. A simple roadmap with the major issues that need to be addressed to stabilize flakes. That way work can be done effectively.

---

<div class="post-metadata">

### Author: ![thiloho](https://discourse.nixos.org/user_avatar/discourse.nixos.org/thiloho/32/11886_2.png) [@thiloho](https://discourse.nixos.org/u/thiloho)
#### Post date: [September 13, 2023, 3:28pm UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/51 "2023-09-13T15:28:01Z")

</div>

If nothing speaks against that, I would open up an issue for a flake stabilization roadmap on the Nix GitHub repository tomorrow. Further details could be discussed there.

---

<div class="post-metadata">

### Author: ![Solene](https://discourse.nixos.org/user_avatar/discourse.nixos.org/solene/32/5738_2.png) [@Solene](https://discourse.nixos.org/u/Solene)
#### Post date: [September 13, 2023, 3:40pm UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/52 "2023-09-13T15:40:28Z")

</div>

> [@thiloho](#):
>
> nixpkgs GitHub repository

Why nixpkgs? This is a nix problem.

---

<div class="post-metadata">

### Author: ![thiloho](https://discourse.nixos.org/user_avatar/discourse.nixos.org/thiloho/32/11886_2.png) [@thiloho](https://discourse.nixos.org/u/thiloho)
#### Post date: [September 13, 2023, 3:46pm UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/53 "2023-09-13T15:46:54Z")

</div>

Yep, sorry, I meant [GitHub - NixOS/nix: Nix, the purely functional package manager](https://github.com/NixOS/nix). I will update my reply.

---

<div class="post-metadata">

### Author: ![Infinisil](https://discourse.nixos.org/user_avatar/discourse.nixos.org/infinisil/32/26523_2.png) [@Infinisil](https://discourse.nixos.org/u/Infinisil)
#### Post date: [September 13, 2023, 6:13pm UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/54 "2023-09-13T18:13:16Z")

</div>

There already is: [Flakes Milestone · GitHub](https://github.com/NixOS/nix/milestone/27) and [Start a Flakes milestone list · Issue #8870 · NixOS/nix · GitHub](https://github.com/NixOS/nix/issues/8870), but so far my concerns aren’t all present there

---

<div class="post-metadata">

### Author: ![thiloho](https://discourse.nixos.org/user_avatar/discourse.nixos.org/thiloho/32/11886_2.png) [@thiloho](https://discourse.nixos.org/u/thiloho)
#### Post date: [September 13, 2023, 6:53pm UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/55 "2023-09-13T18:53:20Z")

</div>

I see, but I think migrating over to the new GitHub Projects feature would be a good thing, because this is exactly what it is made for. Then in addition to that, an announcement post on the Discourse could be made to present the new flake stabilization tracker. I guess this would motivate a few more people to start helping out.

Let me know what you think about this. 🙂

---

<div class="post-metadata">

### Author: ![7c6f434c](https://discourse.nixos.org/letter_avatar_proxy/v4/letter/7/8e7dd6/32.png) [@7c6f434c](https://discourse.nixos.org/u/7c6f434c)
#### Post date: [September 13, 2023, 7:50pm UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/56 "2023-09-13T19:50:49Z")

</div>

The real project is not shiny-driven like «specifically Flakes», the real project defined and methodically carried out by the Nix team is the entire new CLI structure stabilisation, which includes cleaning up the layering and other consistency improvements, as well as checks for omissions.

---

<div class="post-metadata">

### Author: ![hraban](https://discourse.nixos.org/user_avatar/discourse.nixos.org/hraban/32/11282_2.png) [@hraban](https://discourse.nixos.org/u/hraban)
#### Post date: [October 9, 2023, 6:08pm UTC](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/57 "2023-10-09T18:08:52Z")

</div>

Thank you for putting this in writing; I have been using flakes a lot and started encountering the same problems, but I thought I was doing something wrong. Given your standing in the community, seeing you make these points validates my suspicions.

[Previous page](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703.md?page=2)
