Subject: [bug#71581] [PATCH 11/11] gnu: Remove node-bootstrap.

From: Ashvith Shetty <[email-masked]>
Date: Wed, 19 Jun 2024 10:52:24 +0000

Hello,
I'm not really an expert in build, so I'd really appreciate someone
guiding me with this. Also unfortunately, I cannot diagnose NodeJS
properly, because building it takes almost more than a day on my
potato PC, only for the  build to fail because some parallel tests
don't work on Guix. So far, the minor bump to 18.20.0 has worked fine
for me, and I was planning to leave it to the last version, so that
anyone else looking for NodeJS 18 could use inferiors to package their
project. I grew tired of having to do this every time, so right now,
I'm packing all the dependencies - `simdutf`, `uvwasi`, `ngtcp2`,
while also removing dependencies in NodeJS that also exist in Guix,
like for example, sqlite.

One advantage I see to this is that the builds will be cached for a
particular dependency, and also shared between them - at least in my
idea, this would be great for Electron, Chromium forks, Node and also
Deno.

Right now, there's a few roadblocks:
- V8 shared library support was removed around 2015, meaning that I'd
have to use a patch to get around this.
- Support for shared libraries for tinier dependencies like simdutf,
uvwasi and ada does not exist in the file `configure.py`
- There's no way to build a project that uses bazel, because it does
not exist on Guix at the moment.

The first two issues can probably be dealt with, using patches over
nodejs. However, I'm pretty sure working on the third one would
require working on adding bazel as a build system and at least for the
time being, we will have to use internal v8. For JS-based dependencies
like acorn, acorn-walk, undici, etc, is it not possible to use
txiki.js instead? I was thinking of eliminating all node-based
bootstraps, using this tiny JS runtime to build main dependencies.
That, or perhaps, a node-minimal package that is free of extra,
unneeded stuff.

Regards,
Ashvith