4 ms·
Can someone break this down for me? Looks like it's using... C? to load a js interpreter which bootstraps an API around all UEFI features? Do I have that right?
by catapart 8mo ago
Can someone break this down for me? Looks like it's using... C? to load a js interpreter which bootstraps an API around all UEFI features? Do I have that right?
And, if so, does that mean that once the API has been bootstrapped, one could actually write an OS in js? Or are there other abstractions that would need to be migrated first?
- monax 8mo agoDepending on your definition of OS, yeah you could do that :)
- nxobject 8mo agoHey, when Apple transitioned from m68k to PowerPC, it took them a hell of a long time to rewrite massive parts of their OS. It's a low bar, though...
- DustinBrett 8mo agoOS in JS, ok I am interested now...
- asveikau 8mo ago> And, if so, does that mean that once the API has been bootstrapped, one could actually write an OS in js? I bet somebody has done that. https://www.google.com/search?q=os+kernel+in+javascript https://www.google.com/search?q=os+kernel+in+javascript Seems like a small number of hobbyists have attempted. I've heard of people doing this with other high level languages. Basically you need enough low level code to bootstrap a VM. Once you have that, you can make the high level language decide some logic that traditionally would be in C code, like manipulating page tables or whatever.
- gwbas1c 8mo agoAutomatic Garbage Collection in a kernel probably won't work: I vaguely remember hearing about someone trying to use .Net in the Windows kernel. The big problem is garbage collection: If I remember correctly, the fact that "any" operation can fail with an out of memory exception was a huge problem. Another problem was that random pauses for garbage collections in the kernel had major stability issues. In short, I hope that the js kernel is for amusement and education; otherwise it would need a much more advanced garbage collector then earl 2000's .Net.
- asveikau 8mo ago> I vaguely remember hearing about someone trying to use .Net in the Windows kernel. Microsoft did that, it was called Longhorn. That release cycle was long delayed and they abandoned most of its ambitious projects, especially C# in the kernel, and the result was Windows Vista. GC was not the only reason for the failure of that project. Someone could write a book about it. A lot of it was actually more about the organization of people. I also had heard from insiders that lack of ahead of time compilation was an issue. The other issue I remember hearing about was a complaint that Windows components were not layered cleanly and they ended up with circular dependencies when they tried to rewrite them. I think it's possible to write a kernel with GC, and to still be judicious about memory usage with a GC language. And I say that as someone who happens to think that a big issue with modern software is that too many programmers are spending their whole education and career to depend on GC without thinking about it carefully. That is to say I'm already a skeptic of high-level languages and GC, but I will still afford that it is technically possible.
- anonymars 8mo ago> trying to use .Net in the Windows kernel. > Microsoft did that, it was called Longhorn Do you have any reference for that? Or are you confusing Longhorn with Singularity (https://en.wikipedia.org/wiki/Singularity_(operating_system) https://en.wikipedia.org/wiki/Singularity_(operating_system)) / Midori (https://en.wikipedia.org/wiki/Midori_(operating_system) https://en.wikipedia.org/wiki/Midori_(operating_system))? I suspect you're referring to the shell/internals, though, not the kernel (https://longhorn.ms/the-reset/#:~:text=Why%20start%20over,reliability%20and%20security. https://longhorn.ms/the-reset/#:~:text=Why%20start%20over,re...)
- asveikau 8mo agoMy source for that is I was on the Windows team at Microsoft from 2008-2011. I learned a bunch of this history from talking to coworkers who were there. I specifically recall people talking about c# in the kernel.
- deleted 8mo ago[deleted]
- leoedin 8mo agoYou'd need to write an entire hardware abstraction layer to do anything useful. There's projects that do this for microcontrollers - eg MicroPython and Espruino.
- tracker1 8mo agoShould be able to do similar with MicroQuickJS or maybe just QuickJS...
- asveikau 8mo agoYes, it would need support from lower level code. But then, so does C -- many things that an OS needs to do, such as installing interrupt handlers, changing the current page table pointer, jumping into a target process already in progress, etc., are not part of the C standard.
- tatskaari 8mo agoYou don't need a JS bootloader to write an OS in JS. The bootloader just drops the machine into some memory address for it to start executing your OS init script. that bit could be a Javascript interpreter. You can't do much with the architecture in Javascript though, because it doesn't allow you to map memory directly to your types (unless there's some ungodly nonesense I'm not aware of) so you'll have to drop into C/asm to e.g. interact with the ports/registers/tables to set up userspace.
- hajile 8mo agoI'm pretty sure someone already compiled Linux to asm.js a few years ago. As asm.js is/was a subset of JS, you could say it's already been done. In theory, you could continue work from there in JS. https://medium.com/@retrage/lkl-js-running-linux-kernel-on-javascript-directly-9bc8c7abfc5d https://medium.com/@retrage/lkl-js-running-linux-kernel-on-j...