tombl
10 months ago
Fabrice does a great job at building these self-contained pieces of software which often grow to have lives of their own. As a lesser known example, JSLinux's terminal emulator was forked a few times and is now known as xterm.js, which has become the predominant web embeddable terminal emulator.
This all comes full circle, because now I'm building a true successor to JSLinux that's way faster because I've natively compiled the kernel/userspace to wasm, and of course I'm using xterm.js for the terminal emulation.
If you like buggy demos that probably shouldn't be shared yet, you should check out https://linux.tombl.dev, but note that it's currently just a busybox shell and nothing else, so I hope you're good with `echo *` instead of `ls`.
apitman
10 months ago
I like to say Fabrice creates side projects that others spend their entire careers maintaining.
I knew about QEMU, ffmpeg, his LTE stuff, and QuickJS. I had no idea xterm.js started with him too.
simonw
10 months ago
He's also been hacking on a (closed source) LLM inference server since the GPT-2 days: https://bellard.org/ts_server/
pantalaimon
10 months ago
This produces
attempted to munmap
------------[ cut here ]------------
WARNING: CPU: 3 PID: 36 at kernel/exit.c:812 0x00000000
CPU: 3 PID: 36 Comm: sh Not tainted 6.1.132 #
Stack:
at vmlinux.o.__warn (https://linux.tombl.dev/dist/vmlinux-NLTKI6YG.wasm:wasm-function[278]:0x17655)
at vmlinux.o.warn_slowpath_fmt (https://linux.tombl.dev/dist/vmlinux-NLTKI6YG.wasm:wasm-function[279]:0x1772b)
at vmlinux.o.do_exit (https://linux.tombl.dev/dist/vmlinux-NLTKI6YG.wasm:wasm-function[329]:0x1985e)
at vmlinux.o.task_entry_inner (https://linux.tombl.dev/dist/vmlinux-NLTKI6YG.wasm:wasm-function[154]:0x12249)
at vmlinux.o.task_entry (https://linux.tombl.dev/dist/vmlinux-NLTKI6YG.wasm:wasm-function[153]:0x12155)
at self.onmessage (https://linux.tombl.dev/dist/worker-MHWHWELT.js:151:53)
---[ end trace 0000000000000000 ]---
on any commandtombl
10 months ago
yep, that's to be expected, this is a very wip demo. I'm implementing exec() support now, so currently only shell builtins work.
jerf
10 months ago
"I'm implementing exec() support now"
Bah. Details, details dismissive hand wave.
It's just minimalism, right? I hear it's all the rage.
tombl
10 months ago
I'm effectively lying to the kernel about the environment it's executing in, and trying to convince it that it's running on the kind of hardware it expects, when in reality it's running inside a very different environment.
Since I map guest threads 1:1 to host threads in JS, and architecture-specific code manages the loading/unloading of programs, the exec syscall is exercising these lies in a way that they're not currently equipped to handle.
What I'm currently doing is improving those lies to the point where exec stops noticing they're lies and just starts functioning as expected.
remram
10 months ago
Leave it as an exercise to the reader.
all2
10 months ago
I had to implement exec() on Unix V6 for my OS course at uni.
ebiester
10 months ago
I mean, "demos that shouldn't be shared" from the root comment implies that it isn't done, right?
7bit
10 months ago
I got that with echo * which you suggested to use :)
I opened that on my Android Phone and half expected it not to boot at all. But it does. I have no idea about the state of WASM n stuff, but apparently, it's much more eadvanced than I anticipated. Mind blown.
chjj
10 months ago
This brings back memories. I haven't looked at it in a while, but I'm glad to see the fork[1] of my fork[2] from 12 years ago is still thriving. Looks like it's been mostly rewritten. Probably for the better.
[1] https://github.com/xtermjs/xterm.js [2] https://github.com/chjj/term.js
fsiefken
10 months ago
Awesome, I suppose it's more energy efficient then jslinux and can be run on iOS, it might be a good alternative for A-Shell or iSH. I tried it on my a MacBook, but the keyboard input doesn't register.
agumonkey
10 months ago
is there any command working ? ps, cat, vi, ed .. they all crash (I don't know enough about embedding busybox to know what to do)