guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: State of JS runtime environment in Guix


From: Jelle Licht
Subject: Re: State of JS runtime environment in Guix
Date: Sun, 03 Nov 2024 13:27:48 +0100

Hi Ashvith,


Ashvith Shetty <ashvithshetty10@gmail.com> writes:

> Hello,
> I've not come across any new issues in a long time with regards to the 
> state of JS runtime environment in Guix, hence this mail.
>
>  From my observation:
>
> - NodeJS is severely lagging behind at 18.9.0. The current version is 
> 23.1.0, I've tried bumpin to 22.0.0, incrementing per patch version, 
> but I had to give up, because of the failing test cases which continued 
> even after disabling several test cases.

I've just sent a patch series (https://issues.guix.gnu.org/74187)
bumping our node-lts package to 20.18.0. This would be a first step to
bumping it to 22.X.Y, after which I think it should be fairly easy to
create and maintain an up-to-date node-current package.

> - NodeJS-bootstrap is also severely lagging behind at 10.24.1. It 
> should be bumped to somewhere in between 14.21.3 or 16.20.2 - I don't 
> know much about bootstraping, but my recent attempt to bump failed 
> again, because of the test cases - in this case, failures from 
> sequential tests.

AFAICT node@10 is the last version that can still be used to properly
bootstrap the llhttp packages without itself depending on llhttp; We use
esbuild to compile all the TypeScript to JS, and subsequently use
node@10 to run this JS which in turn generates the C code that is used
to build llhttp (and subsequently, Node versions after 10).

If this all sounds like an example of the XY problem, that's because it
is :). What we really need is _some_ way to (re)generate the C code that
is a part of llhttp. If there is some other (minimalist) JS runtime that
could do this, that would be a major improvement over what we currently
do.

>
> - Some of the related packages (llhttp-bootstrap, llhttp) seem to be 
> contaminated

WDYM exactly?

>
> - Internal source dependencies (that is, stuff inside `deps/` folder, 
> as opposed to the inputs themselves) are painful to deal with, because 
> they re-build every time on test-failure and take a lot of resource - 
> some of them can be replaced with inputs, thankfully, but some of these 
> dependencies (v8, simdutf, simdjson, uvwasi, etc) can contribute to 
> increased build time when testing locally. Now, I was able to build 
> some of them as a separate package variable, but the main culprit here 
> (v8) still isn't a external source dependency - for this, I've also 
> opened a issue at GitHub: <https://github.com/nodejs/node/issues/53509>

Are there any things you've already started working on? I'd love to see
what we can do to make this happen.

> - Deno's patch needs to be bumped, but the work is still pending, and I 
> don't really know much about Rust or Cargo
>
> - I've tried adding Bun, but gave up later because of build failures. 
> Nixpkgs simply ELF-patches the binaries, which is probably unacceptable 
> in Guix?
>
> - Yarn, PNPM and Lerna are still not available for NodeJS

I don't use any of the non-npm options, but could you check if they can
be installed using (e.g.) `npm install -g --prefix="$HOME/.local` after
applying the patch series that bumps node to v20? 

Not really relevant for guix proper, but earlier this year I pushed the
npm-binary importer that could perhaps be used to package some of
{yarn,pnpm,lerna} in a channel or local guix.scm.
>
>  - There is a lack of JavaScript or NodeJS-specific maintainer team
>
> Given how the JS development tool is to be in a poor state, I wanted to 
> have a discussion about the actions that can be taken to improve this 
> situation.

Agreed. I think the first order of business should be getting up-to-date
package(s) for Node.js.
>From there, we could branch out to several distinct topics, such as:

- Simplifying the bootstrap story of llhttp
- Unbundling more dependencies in the Node.js package
- Keeping a secure LTS version of Node.js in the package repo.
- Keeping a secure and recent version of Node.js in the package repo.

Thanks for starting this discussion
- Jelle



reply via email to

[Prev in Thread] Current Thread [Next in Thread]