7 ms·
Show HN: Running TempleOS in user space without virtualization
TempleOS is an experimental OS designed to be simple and self-hosted with a JIT compiler. I was mesmerized by it but didn't like the hassle of using virtual machines to boot it up and move files around from the virtual drive.
My project lets you run TempleOS as an app of some sort instead of using a virtual machine to run it - this brings a lot of benefits like speed, seamless filesystem integration (virtual machine development with stock TempleOS is really a pain.), command-line mode where you can code in HolyC on the command line instead of TempleOS' GUI.
Its user-space nature lets it do networking quite easily with the FFI - it even features an IRC server, client and a wiki server!
I've also added a bunch of third-party games and software written for TempleOS on the Community folder, I hope you people take a look and enjoy!
- AstmmetryAware 2y agoBlessed work. Terry would be proud.
- xmlparser 2y agoOh wow, nice! Just a question, how do you manage memory for the OS? I thought operating systems needed whole control of the MMU.
- 1fishe2fishe 2y agoThat was actually a very easy part of EXODUS. Since TempleOS is basically a unikernel, it doesn't need any code for per-process virtual address space. So I can just map some pages in the host process and the host process' address space becomes the HolyC kernel's entire address space, which is ironic since Terry was always adamant about how he disliked modern isolated per-process address spaces and that turned out to be a key to porting his OS to Ring 3. I did need some code for "code pages" though - since all function calls in TempleOS use the 32 bit relative call instruction, all compiled HolyC code go in the lower 32 bit address space. Some Linux distros like to map the ELF binary at that address range too, so I have a routine to read /proc/self/maps and avoid mmapping those areas (I was surprised mmap can overlap without any signs).
- xmlparser 2y agoHaha, that's like committing blasphemy to achieve a holy goal. I wonder what Terry or God would say about this.
- mjgoeke 2y agoI'm guessing something along the lines of 1 Samuel 13:13 ;-) https://www.bible.com/bible/114/1SA.13.13 https://www.bible.com/bible/114/1SA.13.13
- artsi0m 2y agoTerry referenced the joke about web browsers, saying that as the most people use internet explorer to download firefox, he used Ubuntu with VMWare to run Temple OS. https://iv.ggtyler.dev/watch?v=IXhmu1aQSOY https://iv.ggtyler.dev/watch?v=IXhmu1aQSOY
- evmar 2y agoWine has a similar problem around needing to reserve the lower 32 bit address space for 32-bit executables. I bookmarked their Mac workaround around here: https://github.com/wine-mirror/wine/blob/b2a099b3ceec6fef05c455408c05714232cb466f/configure.ac#L681 https://github.com/wine-mirror/wine/blob/b2a099b3ceec6fef05c... which involves rearranging the zero page and creating a big WINE_RESERVE section. On Linux it appears they use a -Ttext linker flag to reposition the code location, but I haven't read it too carefully: https://github.com/wine-mirror/wine/blob/b2a099b3ceec6fef05c455408c05714232cb466f/configure.ac#L782 https://github.com/wine-mirror/wine/blob/b2a099b3ceec6fef05c...
- 1fishe2fishe 2y agoThat's one way to do it, dealing with linkers was really not my thing so I just get the mapped memory list [1] and set it as the start pivot then stack pages on top of it [2]. Thankfully the brk heap isn't intrusive enough to climb up into the pages I allocated :) (this is actually why Linux' MAP_32BIT mmap starts from 0x40000000 [3], but I didn't like how high it was and made it dynamic) [1]: https://github.com/1fishe2fishe/EXODUS/blob/90f70386b8ac6bd02f35a54766b29ea82a1fc971/src/exodus/posix/shims.c#L264 https://github.com/1fishe2fishe/EXODUS/blob/90f70386b8ac6bd0... [2]: https://github.com/1fishe2fishe/EXODUS/blob/90f70386b8ac6bd02f35a54766b29ea82a1fc971/src/exodus/posix/alloc.c#L59 https://github.com/1fishe2fishe/EXODUS/blob/90f70386b8ac6bd0... [3]: https://github.com/torvalds/linux/blob/8f2c057754b25075aa3da132cd4fd4478cdab854/arch/x86/kernel/sys_x86_64.c#L100 https://github.com/torvalds/linux/blob/8f2c057754b25075aa3da...
- TheAmazingRace 2y agoI love how Terry's work continues to inspire developers to this day, even after he has left this mortal plane of existence.
- gosub100 2y agoYou might even say it's "born again".
- VelesDude 2y agoUrrrgh... that is so good and bad it hurts!
- 1fishe2fishe 2y agoIt's a great OS to play around with, after all. I know a guy that uses TempleOS to poke around his hypervisor's private internal data that's not exposed in the normal control interface because it's the one of the only "full" OS'es that allows unrestricted access to protected memory and lets you write programs and stuff in it in a relatively familiar language (HolyC).
- Rendello 2y agoI learned lower level programming through HolyC. I never know what to say when someone else wants to go from high to low as well, as people don't take my TempleOS suggestion too seriously ;)
- nenadg 2y agois this called a distro or denomination?
- 1fishe2fishe 2y agoSort of a "distro" I guess. It's basically TempleOS as an app.
- davidgerard 2y agostill a better love story than Urbit
- dinero_rojo 2y agoWas thinking it might just be a new rite if there weren’t any schisms or majors philosophical differences between fishe and TD (pbuh), but I think Mr. God did tell Terry not to bother with networking, so I think it would qualify as a separate denomination.
- 1fishe2fishe 2y agoGod actually didn't ban networking, contrary to popular belief [1]. He just didn't add network drivers to his OS because of all the network cards he'd have to support and cause the OS to bloat up. He stated "We need a network connection, possibly implemented as a super-simple high speed serial device." [2] so browsing the Internet isn't a sin after all ;) [1]: https://old.reddit.com/r/TempleOS_Official/comments/2pzdy6/can_there_be_networking/cn1kshe/ https://old.reddit.com/r/TempleOS_Official/comments/2pzdy6/c... [2]: https://web.archive.org/web/20170305000952/http://www.templeos.org/Wb/Doc/StdTempleOSPC.html https://web.archive.org/web/20170305000952/http://www.temple...
- blueflow 2y agoIts an Operating System.
- ktm5j 2y agoIt's a joke..
- LazarWolf_ 2y ago“Exodus”, what a great name for this project. Very cool.
- 1fishe2fishe 2y agoThere were a few candidates for this like "GENESIS - Godly Emulation Not Encountered, System Is Sacred", but that sounded way too biblical (you get my point), or "SANCTUM - Sacred Assembly for Navigating Computing Technology with Unity and Majesty" which was too long and felt almost condescending in a way and both didn't feel like it expressed what EXODUS does clearly enough. After all, it's EXODUS is an "exodus" of the TempleOS kernel from ring 0 to 3, so I rolled with it.
- 1fishe2fishe 2y agoI hate how there's at least one discussion about how a clinically insane man on a disability check that got hit by a train said the n word and did insane things. I know that and his OS is what's best known about him but I really want people to not think about the former when discussing about the latter. Why would that even matter?
- valianteffort 2y agoTerry was a devout christian, genesis would have been a good name too!
- replwoacause 2y agoAnd a devout racist
- jazzyjackson 2y agoand a suicidal schizophrenic, race hardly has anything to do with it
- valianteffort 2y agoRight because blacks are such rabid animals that we're gonna cry racism when it's clear he is mentally unwell. You can keep your reactionary savior bullshit, thanks.
- tjpnz 2y agoIf you're interested in learning operating systems or compilers the TempleOS source is surprisingly approachable and clocks in at around 100K LOC. I did a deep dive of HolyC while on a long bus drive and came away with a lot. Terry Davis often talked about the importance of simplicity (albeit using more colorful language) and you can see that throughout his work.