Skip to content

Commit 51e527a

Browse files
authored
Merge pull request #55 from nodejs/add-minutes-for-meeting-Oct-31-2022
Add minutes for meeting Oct 31 2022
2 parents 4eb2bb0 + 1840f3d commit 51e527a

File tree

2 files changed

+143
-0
lines changed

2 files changed

+143
-0
lines changed

README.md

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

3030
- [2022-09-05](./meetings/2022-09-05.md)
3131
- [2022-10-01](./meetings/2022-10-01.md) (OpenJS Foundation Collaborator Summit: Dublin)
32+
- [2022-10-31](./meetings/2022-10-31.md)

meetings/2022-10-31.md

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
# Node.js Single-Executable Meeting 2022-09-05
2+
3+
## Links
4+
5+
* **Recording**: https://youtu.be/Lw3cyjUofI4
6+
* **GitHub Issue**: https://github.com/nodejs/single-executable/issues/54
7+
8+
## Present
9+
10+
* Claudio Wunder @ovflowd
11+
* Darshan Sen @RaisinTen
12+
* Juan Cruz Viotti @jviotti
13+
* Michael Dawson @mhdawson
14+
* Richard Lau @richardlau
15+
* Tony Gorez @tony-go
16+
17+
## Agenda
18+
19+
* Inclusion of postject in the Node.js binary
20+
* Exposing segment names to the public API
21+
* Darshan: If we don't include Postject into Node.js, the name of the
22+
segment becomes a part of the interface, so changes to that will be
23+
semver-major. Hiding that behind something like `node --compile` will
24+
prevent that.
25+
* Michael: We want to support more than just one way of doing it, so that if
26+
anyone wants to inject the data in a different way, then can.
27+
28+
* Single section or multiple sections
29+
* Darshan: Do want everything to be packed into a single section?
30+
* Juan: There might be a maximum size limit on the amount of data that can
31+
be loaded which might be too restrictive.
32+
* Michael: Most generic solution is if Postject finds you a list of sections
33+
that we were trying to load and give you the pointers to all of those.
34+
* Darshan: Another point is that, if we want everything to be in a single
35+
section, it would require users to pack everything into a specific format.
36+
37+
* Michael: Key things to consider:
38+
* It might make the binary bigger.
39+
* We can make it non-invasive enough that people who aren't using it don't
40+
get affected.
41+
* Distros don't like big blobs of things that they do not know what's in
42+
there, so that's problematic for WASM.
43+
* Since we have a separate project, we have more flexibility, specially in
44+
the early stages.
45+
* Darshan: About the size and WASM part, we are trying to get rid of LIEF, so
46+
that way, we don't have to worry about the WASM part and the code size too
47+
will go down significantly.
48+
* Juan: There are 2 keys parts of Postject - the writing part and the reading
49+
part. Which one are we talking about including in Node.js core?
50+
* Michael: The reading part is not that big, so including that sounds
51+
reasonable.
52+
53+
* Testing
54+
* Darshan: It's not possible to test the creation of Single Executable
55+
Applications on CI if we keep Postject outside Node.js because using
56+
Postject would require outbound requests, so we would need to place such a
57+
test in `test/internet` but that doesn't run on CI.
58+
* Richard: It should be possible to build Node.js without an internet
59+
connection if you have the source files locally. There are some caveats,
60+
like you can't do doc testing because that requires the installation of
61+
modules.
62+
* Juan: Maybe we can use `objcopy` as suggested in
63+
https://github.com/nodejs/postject/issues/63 just for CI? However, a
64+
downside is that it won't let us create PE files on Linux or macOS.
65+
* Darshan: We could probably do that but it would feel like dropping support
66+
for creating binaries for other platforms on a different platform, which
67+
pkg supports currently.
68+
* Darshan: Another problem is that while `objcopy` is present by default on
69+
Linux it needs to be downloaded on macOS using `brew install llvm`.
70+
* Richard: We don't install llvm anywhere, just Xcode on macOS. If something
71+
from llvm conflicts with something from Xcode, it might be problematic.
72+
* Claudio: What about Windows?
73+
* Michael: How big is Postject?
74+
* Darshan: 4MB.
75+
* Michael: Maybe we could include Postject in the test? That way, it could
76+
be used for testing but not necessarily be a part of the Node.js binary.
77+
78+
* Inclusion of the injection part in Node.js after size reduction
79+
* Juan: Darshan is working on getting rid of LIEF and writing the injection
80+
part on only one platform in plain JS. If we accomplish that, it's going
81+
to significantly reduce the size. Would that change something?
82+
* Michael: The injection part doesn't necessarily have to be a part of core
83+
but the reading part does. Having the injection part in core is more about
84+
ergonomics.
85+
* Darshan: A reason why the injection part shouldn't be a part of Node.js
86+
core is that if we run `node --compile` on macOS, it's gonna be a Mach-O
87+
binary, so creating a PE executable would require sending outbound
88+
requests to download that from somewhere, which we don't want to do.
89+
* Juan: How common is that?
90+
* Michael: You probably want to do it for multiple platforms.
91+
* Juan: Even if you generate all of them on Linux, you might want jobs
92+
actually testing the CLI, on multiple platforms, so why not just run pkg
93+
on all platforms?
94+
* Darshan: Might not always be the case because if we consider macOS ARM64,
95+
that's very rare to find, so in most cases you'll build the binary but not
96+
test it on CI.
97+
98+
* Inclusion of project license and version info
99+
* Darshan: Should we include the LIEF license in Node.js if we are only using
100+
the reading part of Postject, just because it's a part of the Postject
101+
license?
102+
* Juan, Michael: No.
103+
* Michael: We should also add a maintaining-postject document, for
104+
instructions on upgrading, etc.
105+
* Juan: Should we also include the version in `process.versions`?
106+
* Darshan: There are several dependencies that don't show up in
107+
`process.versions`, like `undici`.
108+
* Darshan: The fuse sentinel string is also a part of Postject, so do we
109+
want Node.js to use a different string to keep things less tied?
110+
* Michael: Maybe use a define for that?
111+
* Michael: Long term, maybe we can make Postject a part of Node.js but for
112+
now we can keep it as a separate project for more flexibility.
113+
114+
* Experimental warning
115+
* Darshan: A point that Geoffrey raised is about emitting an experimental
116+
warning. When should we do that - while compiling the SEA or while running
117+
the SEA?
118+
* Michael: Easiest thing is including for both but users can suppress these
119+
warnings if they want.
120+
121+
* Option for users to opt out of having injectable Node.js binaries
122+
* Michael: Let's also place even the reading part behind a compile time flag,
123+
so that users can opt out of having this feature if they want.
124+
* Darshan: That can be done but how do we test both cases where this feature
125+
is enabled / disabled?
126+
* Michael: We can have separate jobs on Jenkins.
127+
128+
* Tony: If we decide to have the read part in Node.js core and the injection
129+
side in Postject, does that reduce the scope of Postject?
130+
* Michael: We would need the same functionality, so it doesn't change the
131+
whole use case in anyway.
132+
133+
### Announcements
134+
135+
* Juan: Tony will start working as a co-maintainer of Postject and work on the
136+
SEA initiative soon!
137+
138+
## Upcoming Meetings
139+
140+
* **Node.js Project Calendar**: <https://nodejs.org/calendar>
141+
142+
Click `+GoogleCalendar` at the bottom right to add to your own Google calendar.

0 commit comments

Comments
 (0)