Skip to content

Commit 8e53357

Browse files
authored
Merge pull request #50 from nodejs/openjs-sea-mini-summit-notes
Add OpenJS Foundation Collaborator Summit: Dublin notes
2 parents 435f146 + c7008ec commit 8e53357

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@ Meeting Notes
2222
-------------
2323

2424
- [2022-09-05](./meetings/2022-09-05.md)
25+
- [2022-10-01](./meetings/2022-10-01.md) (OpenJS Foundation Collaborator Summit: Dublin)

meetings/2022-10-01.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Node.js Single-Executable OpenJS Mini-summit 2022-10-01
2+
3+
## Present
4+
5+
* Michael Dawson @mhdawson
6+
* Darshan Sen @RaisinTen
7+
* Juan Cruz Viotti @jviotti
8+
* Claudio Wunder @ovflowd
9+
* Ruy Adorno @ruyadorno
10+
* Orta Therox @orta
11+
* Tierney Cyren @bnb
12+
* Tobias Nießen @tniessen
13+
* Tony Gorez @tony-go
14+
* Anton Whalley @No9
15+
* Waleed Ashraf @WaleedAshraf
16+
17+
## Notes
18+
19+
- There is general agreement that we want to try as hard as possible to make
20+
SEAs truly "single executable" without additional resources
21+
- There is agreement that we don't want Node.js to support a single specific
22+
blessed VFS. Instead, Node.js should aim to provide the necessary hooks for
23+
supporting arbitrary VFS implementations
24+
- Teaching Node.js how to transparently work with a VFS on `fs`, `require`,
25+
`import` and `child_process` is non-trivial. We agreed that we do not want
26+
implementations to continue monkey-patching these modules and that
27+
monkey-patching will not work with ESM at all
28+
- Exposing hooking capabilities is a complex problem. While we agree that a VFS
29+
is essential for supporting dynamic requires, read operations, etc we believe
30+
that there is a significant number of Node.js CLIs that might not need this
31+
- Therefore, we can explore delivering an MVP without a VFS while we continue
32+
thinking about how we'll do VFS properly
33+
- This MVP would assume that apps are bundled into a single JavaScript file
34+
before injection
35+
- Node.js core would take a small patch to detect a single file embedded as a
36+
section and jump to it if found
37+
- In the interest of making Node.js binaries smaller without operating custom
38+
Node.js builds, we will move the ICU data into a new section, so it can be
39+
replaced by the ICU "small" data (or removed?) if needed post-compilation
40+
rather than at build-time
41+
- We expect that distributing Node.js injected binaries to user computers will
42+
come with challenges we want to solve in advance. For example, Windows PE
43+
binaries including plain JavaScript tend to be flagged by AntiViruses as
44+
trojans. We will start maintaining a list of these challenges and then try to
45+
figure out how to incrementally solve them.
46+
47+
## Action Items
48+
49+
- Send patch to https://github.com/nodejs/node to detect and jump to a section
50+
containing a single JavaScript file if found
51+
(https://github.com/nodejs/single-executable/issues/47)
52+
- Collect a list of potential problems we would face when distributing Node.js
53+
injected binaries to user computers across operating systems
54+
(https://github.com/nodejs/single-executable/issues/46)
55+
- Split Node.js ICU data into its own section (so we can fiddle with it with
56+
Postject) (https://github.com/nodejs/single-executable/issues/48)
57+
- @No9 to connect us with IBM AIX folks to understand the need for SEAs on AIX
58+
(and potential XCOFF help?)
59+
- Start working on a proper "SEA" CLI MVP that can bundle and inject simple
60+
Node.js applications (https://github.com/nodejs/single-executable/issues/49)
61+
62+
## Other Ideas
63+
64+
- We could explore splitting different Node.js modules (like `fs`) into
65+
separate sections to strip them out for applications that do not need them
66+
- We could explore a different mechanism for loading native add-ons in order to
67+
embed them into the executable itself. For example, marking the corresponding
68+
sections as readable + executable and doing a long jump to the instructions
69+
corresponding to the add-ons instead of using `dlopen`, etc

0 commit comments

Comments
 (0)