From 7e04c7b1f979c134d1c4be0ea65f60af8fc3866b Mon Sep 17 00:00:00 2001 From: Valentin Gagarin Date: Thu, 11 May 2023 23:34:30 +0200 Subject: [PATCH 1/3] concept: why are flakes controversial --- source/concepts/flakes.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/concepts/flakes.md b/source/concepts/flakes.md index 352f9840e..f65aaf277 100644 --- a/source/concepts/flakes.md +++ b/source/concepts/flakes.md @@ -40,3 +40,21 @@ Nix handles flakes differently than regular {term}`Nix file`s in the following w - No external variables, parameters, or impure language values are allowed. It means full reproducibility of a Nix expression, and, by extension, the resulting build instructions by default, but also prohibits parameterisation of results by consumers. + +## Why are flakes controversial? + +Originally proposed in [RFC 49](https://github.com/NixOS/rfcs/pull/49), flakes have been in development since 2019. +Nix introduced the implementation as its first [experimental feature] in 2021. + +The subject is considered controversial among Nix users and developers in terms of design, development processes, and community governance. +In particular: +- The RFC was closed without conclusion, and some design and implementation issues are not yet resolved. + Examples include the notion of a global [flake registry], the [impossibility of parameterising flakes](https://github.com/NixOS/nix/issues/2861), and implementations of the new command line interface and flakes being [closely tied](https://discourse.nixos.org/t/2023-03-06-nix-team-meeting-minutes-38/26056#cli-stabilisation-announcement-draft-4). +- The original implementation introduced [regressions](https://discourse.nixos.org/t/nix-2-4-and-what-s-next/16257) in the [Nix 2.4 release](https://nixos.org/manual/nix/stable/release-notes/rl-2.4.html). +- New Nix users were and still are encouraged by various individuals to adopt flakes despite there being no concrete plan or timeline for stabilisation. + +This led to a situation where the stable interface was only sparsely maintained for multiple years, and repeatedly suffered breakages due to ongoing development. +Meanwhile, the new interface was adopted widely enough for evolving its design without negatively affecting users to become very challenging. + +As of the [2022 community survey](https://discourse.nixos.org/t/2022-nix-survey-results/18983), more than half of the user base, a third of which were relative beginners, relied on experimental features. +{term}`Nixpkgs` as a contrasting example, while featuring a `flake.nix` for compatibility, does not depend on Nix experimental features in its code base. From 734b76122e6c0bd52d580d6c70d5cb091ce6018f Mon Sep 17 00:00:00 2001 From: Valentin Gagarin Date: Mon, 26 Jun 2023 16:57:44 +0200 Subject: [PATCH 2/3] slightly expand on regressions --- source/concepts/flakes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/concepts/flakes.md b/source/concepts/flakes.md index f65aaf277..74c8ce2c9 100644 --- a/source/concepts/flakes.md +++ b/source/concepts/flakes.md @@ -50,7 +50,7 @@ The subject is considered controversial among Nix users and developers in terms In particular: - The RFC was closed without conclusion, and some design and implementation issues are not yet resolved. Examples include the notion of a global [flake registry], the [impossibility of parameterising flakes](https://github.com/NixOS/nix/issues/2861), and implementations of the new command line interface and flakes being [closely tied](https://discourse.nixos.org/t/2023-03-06-nix-team-meeting-minutes-38/26056#cli-stabilisation-announcement-draft-4). -- The original implementation introduced [regressions](https://discourse.nixos.org/t/nix-2-4-and-what-s-next/16257) in the [Nix 2.4 release](https://nixos.org/manual/nix/stable/release-notes/rl-2.4.html). +- The original implementation introduced [regressions](https://discourse.nixos.org/t/nix-2-4-and-what-s-next/16257) in the [Nix 2.4 release](https://nixos.org/manual/nix/stable/release-notes/rl-2.4.html), breaking some stable functionality. - New Nix users were and still are encouraged by various individuals to adopt flakes despite there being no concrete plan or timeline for stabilisation. This led to a situation where the stable interface was only sparsely maintained for multiple years, and repeatedly suffered breakages due to ongoing development. From 297a6702f7ab80eadb67a4e4ecd7c5d0ba5db450 Mon Sep 17 00:00:00 2001 From: Valentin Gagarin Date: Mon, 26 Jun 2023 17:02:31 +0200 Subject: [PATCH 3/3] mention lack of major version bump on regressions --- source/concepts/flakes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/concepts/flakes.md b/source/concepts/flakes.md index 74c8ce2c9..61623b07a 100644 --- a/source/concepts/flakes.md +++ b/source/concepts/flakes.md @@ -50,7 +50,7 @@ The subject is considered controversial among Nix users and developers in terms In particular: - The RFC was closed without conclusion, and some design and implementation issues are not yet resolved. Examples include the notion of a global [flake registry], the [impossibility of parameterising flakes](https://github.com/NixOS/nix/issues/2861), and implementations of the new command line interface and flakes being [closely tied](https://discourse.nixos.org/t/2023-03-06-nix-team-meeting-minutes-38/26056#cli-stabilisation-announcement-draft-4). -- The original implementation introduced [regressions](https://discourse.nixos.org/t/nix-2-4-and-what-s-next/16257) in the [Nix 2.4 release](https://nixos.org/manual/nix/stable/release-notes/rl-2.4.html), breaking some stable functionality. +- The original implementation introduced [regressions](https://discourse.nixos.org/t/nix-2-4-and-what-s-next/16257) in the [Nix 2.4 release](https://nixos.org/manual/nix/stable/release-notes/rl-2.4.html), breaking some stable functionality without a [major version](https://semver.org/) increment. - New Nix users were and still are encouraged by various individuals to adopt flakes despite there being no concrete plan or timeline for stabilisation. This led to a situation where the stable interface was only sparsely maintained for multiple years, and repeatedly suffered breakages due to ongoing development.