Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Show HN: Running TempleOS in user space without virtualization (github.com/1fishe2fishe)
228 points by 1fishe2fishe on April 12, 2024 | hide | past | favorite | 36 comments
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!



“Exodus”, what a great name for this project. Very cool.


There 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.


Terry was a devout christian, genesis would have been a good name too!


And a devout racist


Right 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.


My comment wasn’t for your benefit.


[flagged]


I'm in awe of your deep insight into my life and work.

Now make like your username and do one.


Ooh, ‘keep steppin’ — so threatening! Whaddayagonnado, bud?

You don’t like it or can’t take it? Don’t dish it out, pal. Hahaha! :)


To me there's only two reasons why people bring this kind of thing up with regards to schizophrenic person's unacceptable behaviour -- either they have no qualms with taking cheap shots on someone they know to have a crippling mental disability, or they're oblivious to the suffering that this kind of mental illness causes.

So which is it? Do you understand that schizophrenia is a serious mental illness that can cripple an individuals ability to process reality and participate in society?


and a suicidal schizophrenic, race hardly has anything to do with it


I 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?


Oh wow, nice! Just a question, how do you manage memory for the OS? I thought operating systems needed whole control of the MMU.


That 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).


Wine 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/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/b2a099b3ceec6fef05c...


That'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/90f70386b8ac6bd0...

[2]: https://github.com/1fishe2fishe/EXODUS/blob/90f70386b8ac6bd0...

[3]: https://github.com/torvalds/linux/blob/8f2c057754b25075aa3da...


> Thankfully the brk heap isn't intrusive enough to climb up into the pages I allocated :)

That seems about right[1], but the MAP_FIXED_NOREPLACE flag has been a thing since Linux 4.17. What about using that?

[1]: https://godbolt.org/z/698dPcvf6


Thanks for the information, I wasn't aware of that! Seems like it's not available on FreeBSD though ;( I want to support as many OS'es as possible, but I'll still add a comment on that for future reference.


Could it be enabled with a define or other compile-time mechanism for Linux?


Yeah, I could just use that flag on Linux and let the kernel do more work but I'm afraid I might have to add more logic for looping for a failed mmap only for linux, and more ifdefs usually mean I'm doing something wrong. I'd rather roll with my current strategy (finding a safe pivot and keep bumping without checking anything)


Haha, that's like committing blasphemy to achieve a holy goal. I wonder what Terry or God would say about this.


Terry 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


I'm guessing something along the lines of 1 Samuel 13:13 ;-)

https://www.bible.com/bible/114/1SA.13.13


If 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.


Blessed work. Terry would be proud.


I love how Terry's work continues to inspire developers to this day, even after he has left this mortal plane of existence.


You might even say it's "born again".


Urrrgh... that is so good and bad it hurts!


It'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).


I 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 ;)


is this called a distro or denomination?


Was 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.


God 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/c...

[2]: https://web.archive.org/web/20170305000952/http://www.temple...


Its an Operating System.


It's a joke..


Sort of a "distro" I guess. It's basically TempleOS as an app.


still a better love story than Urbit




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: