Ultimate-Linux: Userspace for Linux in Pure JavaScript

(github.com)

77 points | by radeeyate 10 hours ago

15 comments

  • pointlessone 5 hours ago
  • rkeene2 4 hours ago
    I did something similar with TCL, the basis was using an extension I wrote to handle the UNIX stuff [0]. It operated an On-Premises cloud environment appliance, and `init` was just a TCL script (at one point it was a statically linked binary with the init script embedded, but that turned out to be overkill)

    [0] https://chiselapp.com/user/rkeene/repository/tuapi/doc/trunk...

  • tzury 7 hours ago
    Check out this:

    https://bellard.org/jslinux/vm.html?url=alpine-x86.cfg&mem=1...

    and

    https://bellard.org/jslinux/

    By the famous Fabrice Bellard who is the creator of QuickJS, QEMU, FFMPEG and many other brilliant and fascinating tools!

    https://bellard.org/

  • mos87 5 hours ago
    • IshKebab 2 hours ago
      That's about the Typescript compiler performance, not runtime. And this project doesn't even use Typescript does it?
  • kalterdev 7 hours ago
    It’s never early to prepare for JavaScript complete takeover.
  • supermdguy 6 hours ago
    Reading the code, I was surprised to see that cd was implemented by calling out to the os library. I assumed that was something the shell or at least userspace handled. At what level does the concept of a “current directory” exist?
    • creatonez 6 hours ago
      It's at the kernel level. Each process has its own current working directory. On Linux, these CWD values are exposed at `/proc/[...]/cwd`. This value affects the resolution of relative paths in filesystem operations at a syscall level.
    • lukeh 6 hours ago
      In the kernel’s process structure. See NOTES - https://man7.org/linux/man-pages/man2/chdir.2.html
    • semiquaver 6 hours ago
      Unix defines a Working Directory that every process has, changed with chdir(2): https://man7.org/linux/man-pages/man2/chdir.2.html
      • mort96 59 minutes ago
        This doesn't technically answer the question: POSIX doesn't concern itself with the kernel interface, only with the libc. Most POSIX systems have a kernel with a syscall interface that mirrors the libc API so that these libc functions are just syscall wrappers, but nothing technically prevents the current working directory to be a purely userspace concept maintained by the libc where all relative paths passed to filesystem functions are translated into absolute paths by the libc function before being passed to the kernel via syscall.

        But yes, in the BSDs, Linux and Windows, the kernel has a concept of a current working directory.

  • nxobject 5 hours ago
    Kernighan and Ritchie wept. (Tears of joy at an awesome hack, or tears of sadness at an awesome hack?)
  • MobiusHorizons 7 hours ago
    Very cool. Good use of quickjs, although it would have been cool if it somehow didn’t need a libc and just used the syscall interface. Makes me want to give that a try.
  • anthk 1 hour ago
    I remember some core Unix utilities reimplemented in Perl, mainly done for Win32 systems back in the day. OFC the performance coudn't compete with the ones written in C, but it was good enough.
  • zsoltkacsandi 1 hour ago
    > tiny project for building a tiny Linux distribution

    I am working something similar in Go, and writing an educative blog post series about it: https://serversfor.dev/linux-inside-out/

  • andai 3 hours ago
    See also this post by the author:

    Making a micro Linux distro [for RISC-V]

    https://popovicu.com/posts/making-a-micro-linux-distro/

  • goodpoint 4 hours ago
    urgh
  • hxbdbehd 3 hours ago
    [dead]
  • stx5 7 hours ago
    [dead]
  • darkreader 3 hours ago
    strange motivation and implementation. I mean it real. There are many existing open source projects that run Linux on JS.