Write up how GemDB could reach Windows - #4
Merged
Merged
Conversation
Notes from working the question through, so the next person does not start from "how hard is WSL?" -- which turns out to be the wrong first question. The obstacle is not the extension: there is no GemStone server for Windows (measured -- the catalog 404s for both Windows_NT keys at 3.7.5), so every option puts the database on Linux and differs only in where the seam falls. Split by frequency, the seam is cheap: the data plane is already remote, since gcits is RPC-only and logs in through NetLDI, so pointing it at a stone in a VM or container is a login string rather than an architecture; and the management plane needs exactly one primitive, "run a command in the Linux", which is `wsl.exe -e` or `docker exec`. That makes WSL and Docker two thin backends of one interface, and the choice of default a late one. Two findings are worth having written down. GemTalk publishes a Windows *client* kit even though it publishes no Windows server, and it contains the very library session.ts loads -- our vendored GCI layer already documents exactly what that DLL lacks (non-blocking login, post-3.6.2 debug calls) and treats both as optional, and none of the functions session.ts calls is in that set. So a native Windows client against a Linux server is plausible, with `gemdb file.py` the known gap, since that needs a linked gem and the Windows topaz is RPC-only. And Jasper's WSL support measures ~9,000 lines across 20+ files, which reads as a warning until you notice most of it exists to manage many stones, versions and backups from the Windows side -- the surface GemDB deliberately does not have. The Docker section ended up being about licensing rather than containers. NOTICE says the engine is downloaded from GemTalk under GemTalk's terms and that this extension grants nothing; baking the engine into a published image inverts that, and a `docker pull` presents nobody a license. A thin image keeps the posture and still wins the prize, because both sudo prompts vanish from the container itself (--shm-size, and RemoveIPC being meaningless inside), not from what is baked in. Registry is GHCR, and pull limits decide it: Docker Hub allows 100 anonymous pulls per 6 hours per IPv4 or IPv6 /64 (measured), which an office behind one NAT would share, and the failure would land on a user's first run. Recommendation is to ship the WSL window first -- it needs no new code, only a smoke test and README text, since our linux-x64 build already runs in it -- then prototype the Docker backend on macOS, which derisks what every later option shares. Everything needing hardware we do not have is collected under "Unverified" rather than asserted, including the one cheap experiment that would settle most of the Windows question. docs/ is excluded from the .vsix: design notes are for contributors, and without the ignore rule a new folder would have shipped to every user. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Design notes only — no behaviour changes.
docs/reaching-windows.mdrecords the options for Windows support, what was measured versus assumed, and a recommended order of work.Why it isn't the WSL-vs-Docker question it looks like
The obstacle isn't the extension: there is no GemStone server for Windows (measured — the catalog 404s for both
Windows_NTkeys at 3.7.5). So every option puts the database on Linux and differs only in where the seam falls.Split by frequency, that seam is cheap:
print()) is already remote —gcitsis RPC-only and logs in through NetLDI, so pointing at a stone in a VM or container is a login string, not an architecture.gslist) needs exactly one primitive: run a command in the Linux —wsl.exe -eordocker exec.Design against that primitive and WSL and Docker become two thin backends of one interface, so the default on Windows can be chosen late, from measurements.
Two findings worth having written down
GemTalk publishes a Windows client kit even without a Windows server, and it contains
libgcits-3.7.5-64.dll— the very librarysession.tsloads. Our vendored GCI layer already documents what that DLL lacks (non-blocking login, post-3.6.2 debug calls) and treats both as optional, and none of the GCI functionssession.tscalls is in that absent set. So notebooks and the shell running natively on Windows against a Linux server is plausible. Known gap:gemdb file.pyneeds a linked gem, and the Windows topaz is RPC-only.Jasper's WSL support measures ~9,000 lines across 20+ files — which reads as a warning until you notice most of it exists to manage many stones, versions and backups from the Windows side. That's precisely the surface GemDB deliberately doesn't have.
The Docker section is mostly about licensing
NOTICEsays the engine is downloaded from GemTalk under GemTalk's terms and that this extension grants nothing. Baking the engine into a published image inverts that — we become the distributor, and adocker pullpresents nobody a license. GemTalk owns GemStone so it's a decision you can make, but it should be a decision, not a side effect of writing a Dockerfile.A thin image keeps the posture and still wins the prize, because the prize comes from the container rather than its contents:
--shm-sizeand a container's irrelevant RemoveIPC mean bothsudoprompts disappear — the two hardest moments in first run.Registry recommendation is GHCR, and pull limits decide it: Docker Hub allows 100 anonymous pulls per 6 hours per IPv4 address or IPv6 /64 (measured), which an office behind one NAT shares, and the failure lands on a user's first run. GHCR also matches Grail's existing
ci-baseprecedent, and ourubuntu-latest+ubuntu-24.04-armrunners build a multi-arch manifest natively.Recommended order
linux-x64build already works there. Needs a smoke test and README text, no new code.Everything needing hardware we don't have is collected under Unverified rather than asserted — including the one cheap experiment that would settle most of the Windows question (point a koffi script at the DLL, log in to a stone in WSL2, run one
GciTsNbExecute/GciTsBreakcycle).Packaging note
docs/**is added to.vscodeignore. Without it the new folder would have shipped in every.vsix; verified withvsce lsthatdocs/contributes 0 files whileREADME/CHANGELOG/LICENSE/NOTICEstill ship.🤖 Generated with Claude Code