Version 2.90.0 blog post
This commit is contained in:
parent
008f542aff
commit
67cb38d869
228
content/blog/2024-07-10-lix-2.90-release.md
Normal file
228
content/blog/2024-07-10-lix-2.90-release.md
Normal file
|
@ -0,0 +1,228 @@
|
|||
+++
|
||||
title = "Announcing Lix 2.90 \"Vanilla Ice Cream\""
|
||||
author = "Lix Team"
|
||||
+++
|
||||
|
||||
We at the Lix team are proud to announce our first release, version 2.90
|
||||
"Vanilla Ice Cream". This release focuses on foundations and reliability, but
|
||||
nevertheless contains several small but exciting user-facing features that are
|
||||
exclusive to Lix.
|
||||
|
||||
Lix is a Nix implementation focused on reliability, predictability,
|
||||
friendliness, developed by a community of people from
|
||||
around the world. We have long term plans to incrementally evolve Nix to work
|
||||
in more places, to make it more reliable and secure, and to update
|
||||
the language and semantics to correct past mistakes and reduce
|
||||
errors, all the while providing an amazing tooling experience.
|
||||
|
||||
Lix forks from CppNix version 2.18, which is the default version of Nix in
|
||||
NixOS 23.11 and 24.05. It includes backports for most bug fixes in later versions of
|
||||
CppNix, as well as various reliability improvements, and many improvements to user
|
||||
experience. Our goal with Lix 2.90 is to create a better Nix 2.18: faster, more
|
||||
user friendly, with fewer bugs, and fully compatible with previously-valid
|
||||
Nix code including flakes.
|
||||
|
||||
Some highlights of this release include:
|
||||
|
||||
- `:doc` in `nix repl` now works on lambdas, in addition to built-in functions
|
||||
as before, thanks to [Lunaphied] and [jade]:
|
||||
|
||||
```
|
||||
dev/nixpkgs » nix repl -f .
|
||||
Lix 2.90.0-lixpre20240520-992c63f
|
||||
Type :? for help.
|
||||
Loading installable ''...
|
||||
Added 21430 variables.
|
||||
nix-repl> :doc lib.forEach
|
||||
Synopsis: func = xs: f: ...
|
||||
|
||||
| Apply the function to each element in the list.
|
||||
| Same as `map`, but arguments flipped.
|
||||
|
|
||||
| Inputs
|
||||
|
|
||||
| `xs`
|
||||
|
|
||||
| : 1\. Function argument
|
||||
|
|
||||
| `f`
|
||||
|
|
||||
| : 2\. Function argument
|
||||
|
|
||||
| Type
|
||||
|
|
||||
| ``
|
||||
| forEach :: [a] -> (a -> b) -> [b]
|
||||
| ``
|
||||
|
|
||||
| Examples
|
||||
| :::{.example}
|
||||
|
||||
# lib.lists.forEach usage example
|
||||
|
||||
| ``nix
|
||||
| forEach [ 1 2 ] (x:
|
||||
| toString x
|
||||
| )
|
||||
| => [ "1" "2" ]
|
||||
| ``
|
||||
|
|
||||
| :::
|
||||
|
||||
/home/jade/dev/nixpkgs/lib/lists.nix:77
|
||||
|
||||
```
|
||||
- `nix repl` supports creating shortcuts using the [`repl-overlays`][repl-overlays]
|
||||
setting, thanks to [wiggles]. For example, one can create a shortcut to
|
||||
`legacyPackages.${currentSystem}` with the following repl overlay, configured
|
||||
as a file in the `repl-overlays` setting in `~/.config/nix/nix.conf`:
|
||||
|
||||
```nix
|
||||
{ currentSystem, ...}: final: prev: let
|
||||
optionalAttrs = predicate: attrs:
|
||||
if predicate
|
||||
then attrs
|
||||
else {};
|
||||
in
|
||||
optionalAttrs (prev ? legacyPackages && prev.legacyPackages ? ${currentSystem})
|
||||
{
|
||||
pkgs = prev.legacyPackages.${currentSystem};
|
||||
}
|
||||
```
|
||||
|
||||
Then:
|
||||
|
||||
```
|
||||
~ » nix repl nixpkgs
|
||||
Lix 2.90.0-lixpre20240520-992c63f
|
||||
Type :? for help.
|
||||
Loading installable 'flake:nixpkgs#'...
|
||||
Added 5 variables.
|
||||
Loading 'repl-overlays'...
|
||||
Added 6 variables.
|
||||
nix-repl> pkgs.hello
|
||||
«derivation /nix/store/w0hjp1fnvyf1z30s29fj4im8c7bxqrql-hello-2.12.1.drv»
|
||||
```
|
||||
- Evaluation is 5-20% faster than 2.18, depending on which benchmark is in use,
|
||||
thanks to [eldritch horrors].
|
||||
- Various user experience issues have been fixed. For example:
|
||||
- Error reporting has been fixed to be more accurate in several cases thanks
|
||||
to [wiggles], and errors give more details to diagnose them.
|
||||
|
||||
For instance, type errors now give the actual value that caused the error.
|
||||
- `nix flake lock --update-input nixpkgs` is now the much more reasonable
|
||||
`nix flake update nixpkgs`.
|
||||
- `nix build -E` is now an alias for `nix build --expr`, mirroring `nix-build
|
||||
-E`.
|
||||
- Several very silly `--debugger` bugs that one runs into in normal usage
|
||||
have been fixed thanks to [wiggles], so the debugger actually works properly
|
||||
without a mental index of all the bugs in it.
|
||||
- The Lix evaluation cache no longer caches failures, so "cached failure" is an
|
||||
error of the past.
|
||||
- The REPL value printer now intelligently chooses whether to print on one
|
||||
line or multiple lines, rather than putting everything on one very long
|
||||
line.
|
||||
- Various failures that were silent in the past are no longer silent:
|
||||
- The Lix daemon warns when it rejects a setting from a client that requires
|
||||
being a trusted user, instead of silently ignoring it.
|
||||
- Remote builds failing to connect to a builder now print the error.
|
||||
- Crashing the daemon now indicates that is what probably happened.
|
||||
- Lix now generally crashes much harder in the case of bugs, such that bugs
|
||||
are easier to find and fix.
|
||||
- Various errors have been made more specific, like "path is invalid".
|
||||
- Several hauntings have been exorcised from the codebase:
|
||||
- Flake input overrides like `foo.inputs.bar.inputs.nixpkgs` now work as
|
||||
documented rather than being ignored.
|
||||
- Store path names starting with `.` are now permitted, fixing some home-manager
|
||||
issues.
|
||||
- A crash when running patched kernels with non-default schedulers has been
|
||||
fixed.
|
||||
- Breakage inside the sandbox when running on systems with unprivileged user
|
||||
namespaces disabled has been fixed.
|
||||
- Various format string crashes have been fixed.
|
||||
- `nix doctor` now has correct output of client trustedness.
|
||||
|
||||
[wiggles]: https://github.com/9999years
|
||||
[eldritch horrors]: https://git.lix.systems/pennae
|
||||
[Lunaphied]: https://github.com/lunaphied
|
||||
[jade]: https://jade.fyi
|
||||
|
||||
[repl-overlays]: https://docs.lix.systems/manual/lix/2.90/command-ref/conf-file.html#conf-repl-overlays
|
||||
|
||||
A lot of internal stability work and development process work has gone into
|
||||
this release. For instance:
|
||||
- Lix builds exclusively with the Meson build system. The historical CppNix
|
||||
Make-based build system has been removed altogether. This improves
|
||||
compile times as well as various aspects of the developer experience: the `clangd`
|
||||
language server just works with no configuration now, for instance.
|
||||
- Lix has the beginnings of the infrastructure to do linting of its C++ code and work on
|
||||
modernization with automated tools.
|
||||
- Lix enforces various aspects of [its
|
||||
styleguide][styleguide] with `pre-commit` hooks.
|
||||
- A lot of onboarding and project planning information has been written down in
|
||||
the [Wiki]. In general we strive to be transparent with our plans and
|
||||
priorities, and to communicate them clearly.
|
||||
- We have completed a release automation project, which should let us release more
|
||||
frequently given that our `main` is more or less releaseable on any given day.
|
||||
- We have built out a lot of infrastructure which we own end-to-end, allowing
|
||||
us to quickly improve on pain points in the project ourselves.
|
||||
- We have [Single Sign-On](https://identity.lix.systems) permitting us to
|
||||
easily deploy more services that cleanly integrate together.
|
||||
- We use [Gerrit](https://gerrit.lix.systems) for reviews, which allows us to
|
||||
focus on providing prompt and high quality patch reviews by making it easy
|
||||
to review changes piece by piece, with CI testing of every commit.
|
||||
|
||||
Gerrit is one of our secret superpowers in shipping correct code, since it,
|
||||
by its structure, enforces good commit history, reviewable code, and
|
||||
incremental changes.
|
||||
- We use [Forgejo](https://git.lix.systems) for code hosting and issue
|
||||
tracking, which we have customised to integrate natively with Gerrit and
|
||||
to work natively with Nix flakes for locking tarballs.
|
||||
- We have a [Wiki] with design documents, styleguide, and other project
|
||||
organisational information.
|
||||
|
||||
[Wiki]: https://wiki.lix.systems
|
||||
|
||||
[styleguide]: https://wiki.lix.systems/books/lix-contributors/chapter/style-guide
|
||||
|
||||
For a more comprehensive list of the changes in this release, see
|
||||
[the release notes][release-notes].
|
||||
|
||||
[release-notes]: https://docs.lix.systems/manual/lix/2.90/release-notes/rl-2.90.html
|
||||
|
||||
The Lix team as well as several dozen beta testers have been running a
|
||||
development release of Lix 2.90 in production every day for a couple of months,
|
||||
and we do not expect any significant regressions compared to Nix 2.18. However,
|
||||
if you find a bug or suspicious behaviour in Lix, feel free to mention it on
|
||||
Matrix or [file a bug on Forgejo][bugs]. If you would like to participate in
|
||||
beta testing of future Lix versions, we have a [guide on the wiki][beta-guide]
|
||||
and a [Matrix channel][beta-channel] for running `main`.
|
||||
|
||||
[bugs]: https://git.lix.systems/lix-project/lix/issues
|
||||
[beta-guide]: https://wiki.lix.systems/books/lix-contributors/page/lix-beta-guide
|
||||
[beta-channel]: https://matrix.to/#/#open-beta:lix.systems
|
||||
|
||||
We would especially like to thank all the following groups for their hard work
|
||||
and trust in contributing to this release:
|
||||
- The several dozen Lix beta testers who have been running Lix `main` in
|
||||
production for over a month, and who have helped us fix the various
|
||||
longstanding CppNix bugs they have had stuck in their craw as well as put up
|
||||
with our work-in-progress infrastructure as we built it out.
|
||||
- All the first time contributors who made their first contributions to a Nix
|
||||
implementation in Lix. We are eternally grateful to everyone who helped us out
|
||||
on the numerous important but tedious issues.
|
||||
- All the people new to Nix who have trusted us by running experimental
|
||||
versions of Lix and given us feedback.
|
||||
- The long time CppNix contributors who came to Lix and helped out with fixing
|
||||
many issues.
|
||||
- The CppNix contributors and CppNix team, without whom we would not have this
|
||||
software, and who wrote many of the bug fixes we backported to Lix from CppNix
|
||||
versions > 2.18.
|
||||
- Everyone else who has worked with us on starting to make this dream a
|
||||
reality.
|
||||
|
||||
We are very proud of what everyone has achieved with this release since we
|
||||
begun in late February 2024, and we are just getting started. We are looking
|
||||
forward to continue working together with everyone to build a better foundation
|
||||
for the future evolution of Nix.
|
||||
|
Loading…
Reference in a new issue