I like that the top reply to Carmack's wall of text is a screenshot of TempleOS with a doodle of an elephant lmao. And ironically, that meme reply is on topic and it says a thousand words with just one photo.
Another point I would add in support of that meme comment, is Google's recent rug-pull of Android not allowing sideloading apps from unsigned developers anymore starting this autumn, after over a decade of conquering the market with their "go with us, we're the open alternative to iOS" marketing.
The conclusion is to just never EVER trust big-tech/VC/PE companies, even when they do nice things, since they're 100% just playing the long game, getting buddy-buddy with you waiting till they smothered the competition with their warchest, and then the inevitable rug-pull comes once you're tied to their ecosystem and you have nowhere else to go.
Avoid these scumbags, go FOSS form the start, go TempleOS. /s but not really
> To make something really different, and not get drawn into the gravity well of existing solutions, you practically need an isolated monastic order of computer engineers.
I mean, I'd give a fair shake to an OS from the SQLite team [1].
You could write a book on why it's practically impossible to create a new OS these days. Love Carmack for stating it so clearly. I also love that called out TempleOS, I also have a weird respect for it. Plan 9 is the probably the best example of a totally new OS and I hope someday it becomes viable because it's really a joy to use.
But ultimately it just makes sense to adapt existing kernels / OS (say, arch) and adapt it to your needs. It can be hair wrenchingly frustrating, and requires the company to be willing to upstream changes and it still takes years, but the alternative is decades, because what sounds good and well designed on paper just melts when it hits the real world, and linux has already gone through those decades of pain.
Writing TempleOS software taught me lower-level programming! The OS is weird and idiosyncratic, but much more polished and logical than you'd expect from seeing videos of its author.
I’ve seen this firsthand. These giant tech companies try to just jump into a massive new project thinking that because they have built such an impressive website and have so much experience at scale they should just be able to handle building a new OS.
In my case it wasn’t even a new OS it was just building around an existing platform and even that was massively problematic.
The companies that build them from scratch have had it as one of their core competencies pretty much from the start.
Sometimes you have to let people fail, even though you can see it coming. It sounds like Carmack was sticking his nose in a project that wasn’t under his purview and he dug his heels in a bit too much when he should have just let it fail.
All the FAANG do dumb shit all the time and waste huge sums of money, if you work at a FAANG the best thing you can do is stay in your lane and don’t do dumb shit — eventually it will shake out.
I have been bullied around by L7s (as a L5) sticking their nose in things, and the best thing you can do is clearly articulate what you are doing and why, and that you understand their feedback. Turns out the L7 got canned — partially due to their bullying — and I got promoted for executing and being a supportive teammate, so things worked out in the end.
What would be the real advantage of a custom OS over a Linux distribution?
The OS does process scheduling, program management, etc. Ok, you don’t want a VR headset to run certain things slowly or crash. But some Linux distributions are battle-tested and stable, and fast, so can’t you write ordinary programs that are fast and reliable (e.g. the camera movement and passthrough use RTLinux and have a failsafe that has been formally verified or extensively tested) and that’s enough?
For this use case a major one would be better models for carved up shared memory with safe/secure mappings in and out of specialized hardware like the gpu. Android uses binder for this and there are a good number of practical pains with it being shoved into that shape. Some other teams at Google doing similar stuff at least briefly had a path with another kernel module to expose a lot more and it apparently enabled them to fix a lot of problems with contention and so on. So it’s possible to solve this kind of stuff, just painful to be missing the primitives.
I stated this elsewhere, but at least six years ago a major justification was a better security model. At least that’s what Michael Abrash told me when I asked.
The problem with this guy is that it’s hard to criticize him, whether at work or in this forum. For example, I am going to be downvoted for mocking the fact that this guy thinks it’s some genius move to say “No” to making an operating system, whatever making an operating system means.
I think people have forgotten about Google Fuchsia which I guess is a good sign for a new OS. They’ve done quite well in deploying it seamlessly to their consumer devices.
I've written a lot of low level software, BSPs, and most of an OS, and the main reason to not write your own OS these days is silicon vendors. Back in the day, they would provide you a spec detailed enough that you could feasibly write your own drivers.
These days, you get a medium-level description and a Linux driver of questionable quality. Part of this is just laziness, but mostly this is a function of complexity. Modern hardware is just so complicated it would take a long time to completely document, and even longer to write a driver for.
At least for certain types of OSes, it should be relatively easy to get most of Linux's hardware support by porting LKL (https://github.com/lkl/linux) and adding appropriate hooks to access hardware.
Of course, your custom kernel will still have to have some of its own code to support core platform/chipset devices, but LKL should pretty much cover just about all I/O devices (and you also get stuff like disk filesystems and a network stack along with the device drivers).
Also, it probably wouldn't work so well for typical monolithic kernels, but it should work decently on something that has user-mode driver support.
My hunch is that for nearly anyone who is serious about it these days, the way forward is either to have unusually tight control over the underlying platform, or to include a servant Linux installation with your OS. If Windows is a buggy set of device drivers, then Linux is a free set of buggy device drivers. If you're happy with your OS running as a client of a Linux hypervisor indefinitely then you could go for that; otherwise you'd have to try to gradually move bits of the hardware support into your OS over time—ideally faster than new Linux dependencies arise...
> Modern hardware is just so complicated it would take a long time to completely document, and even longer to write a driver for.
You know, one'd think that having a complex hardware should make writing a driver easier because the hardware is able to take care of itself just fine, and provide a reasonable interface, as opposed to devices of the yore which you had to babysit, wasting your main CPU's time, and doing silly stuff like sending them two identical initialization commands with 30 to 50 microseconds delay between or whatever.
heh, in mid-2000s all I had were a batch of misbehaving SATA controllers under freebsd, and an (actually quite well-written core of a) linux driver was all I had to work with.
Without that, we would have probably just switched hw, because the quite obscure bug was in the ASIC, and debugging that on 2005-6-ish hw is just infeasible.
And yet, Sony did it, Nintendo did it, both have been pretty succeesful.
We also need to be clear what an OS is. Is it "darwin" or "macOS" - they have different scopes.
Things I'd want from an OS for an XR device.
1. Fast boot. I don't want to have to wait 2-3-4-5 minutes to reboot for those times I need to reboot.
I feel like Nintendo figured this out? It updates the OS in the background somehow and reboot is nearly instant.
2. Zero jank. I'm on XR, if the OS janks in any way people will get sick AND perceive the product as sucking. At least I do. iOS is smooth, Androind is jank AF.
Do any of the existing OSes provide this? Sure, maybe take an existing OS an modify it, assuming you can.
tbh linux has quite a bit of cruft in it these days at the syscall and interface layer.
if youre apple, it does make sense to do stuff from scratch. i think in a way, software guys wind up building their own prisons. an api is created to solve problem X given world Y, but world Y+1 has a different set of problems - problems that may no longer be adequately addressed given the api invented for X.
people talk about "rewrite everything in rust" - I say, why stop there? lets go down to the metal. make every byte, every instruction, every syscall a commodity. imagine if we could go all the way back to bare metal programming, simply by virtue of the LLM auto-coding the bootloader, scheduler, process manager, all in-situ.
the software world is full of circularities like that. we went from Mainframe -> local -> mainframe, why not baremetal -> hosted -> baremetal?
Was at Oculus post acquisition and can say that the whole XROS was an annoyance and distraction the core technology teams didn’t need. There were so many issues with multiple tech stacks that needed fixing first.
Mind you, this XROS idea came after Oculus reorged into FB proper. It felt to me like there were FB teams (or individuals) that wanted get on the ARVR train. Carmack was absolutely right, and after the reorg his influence slowly waned for the worse.
Just a small bunch of XROS people came from FB proper (mostly managers) because an average FB SWE has no required skills. Most folks were hired from the industry at E5/E6 and I think we had ever took one or two bootcampers that ultimately were not successful and quickly moved elsewhere in FB.
It looks to me Meta was a victim of ivory tower researchers who just want to experiment on their non-practical theoretical research on company's expense.
It has some value a huge company funds these research, as long as it doesn't affect the practical real for-profit projects.
This is completely right from a product point of view, which is Carmack's argument.
But I have wondered why one of these companies with billions of dollars to burn hasn't tried to create something new as a strategic initiative. Yes, there wouldn't be any ROI for years, and yes, the first several products on the platform would probably be better off on something more traditional.
But the long term value could potentially be astronomical.
Just another case of quarterly-report-driven decision making, I suppose. Sigh.
I'd love a truly new OS, but I just don’t know what it would look like at this point? "New OS" ideas tend to converge on the same trunk.
Building a hobby OS taught me how little is just "software". The CPU sets the rules. Page tables exist because the MMU says so. Syscalls are privilege flips. Task switches are register loads and TLB churn. Drivers are interrupt choreography. The OS to me is just policy wrapped around fixed machinery.
I think any OS can be divided into a "backend" that deals with the hardware and a "frontend" user-level applications with a UI. The backend is mostly similar everywhere, while the frontend is what the general public typically perceives as the "OS".
It's hard to see anything truly new in the "invisible" backend, but the frontend changes with every update (Windows, Mac, Linux etc).
ACPU OS is a good example of this, where the backend can be a different OS, an emulator or actual hardware, while the frontend remains the same across all execution environments.
https://www.acpul.org/blog/so-fast
He's acting like their VR UX is top notch when it's as bad as it gets. Just yesterday I dusted off my Meta Quest 2 to play a bit, and spent around an hour trying to pair up my left controller to the helmet after replacing the battery.
You can't do it without going through their fucking app, that asks for every permissions under the sun, including GPS positioning for some reason. After finally getting this app working and pairing it with my headset, I could finally realize the controller was just dead and their was nothing to do.
You can pair the controllers in the settings you don't need an app. Their VR UX does suck that is true, and horizon worlds is such a collosal failure that I'm surprised they haven't cancelled that entirely yet. But carmack also stated the technical issues numerous times.
> To make something really different, and not get drawn into the gravity well of existing solutions, you practically need an isolated monastic order of computer engineers. Which was sort of Plan 9…
Jonathan Blow is the world’s most successful hobbyist programmer. His whole thing is doing projects from scratch. Every game he made could be done in Unity with far less effort.
Most opinions of this man exists in a vacuum space isolated from the real world software industry. Building an OS from scratch is one of those examples.
It’s never seems like there’s a significant reason behind them other than………”I made dat :P”
I don't think unity was as polished when braid came out in ~2008 that can also easily rewind time on low end Xbox hardware. The witness maybe in unreal? But there are some wild things there I've never seen an unreal game do that the witness does do
It is genuinely ridiculous to say that the witness could “have been made in Unity with far less effort”. It’s easy to forget that people on this and ever forum love to just say stuff for the sake of having said something until you encounter a topic with which you are extremely familiar.
He got the right to be acknowledged by his peers for the work he has made at GDC, and anyone can make games with Unity, just like everyone can make a novel with Word, now making one without pre made tooling, that is a skill on itself.
Why is such a meme among gamers about Unity and Unreal based games?
Exactly because so many make so little effort it is clear where the game is coming from.
Mechanisms for getting the linux kernel out of the way is pretty decent these days, and CPUs with a lot of cores are common. That means you can isolate a bunch of cores and pin threads the way you want, and then use some kernel-bypass to access hardware directly. Communicate between cores using ring buffers.
This gives you best of both worlds - carefully designed system for the hardware with near optimal performance, and still with the ability to take advantage of the full linux kernel for management, monitoring, debugging, etc.
Geopolitical reasons for making your own OS are actually reasonable and understandable. Not saying they are good, because I would much prefer a planet where we collaborate on these things… but they’re not dumb. They make sense in a similar way the space race made sense.
100 comments
[ 2.8 ms ] story [ 84.6 ms ] threadAnother point I would add in support of that meme comment, is Google's recent rug-pull of Android not allowing sideloading apps from unsigned developers anymore starting this autumn, after over a decade of conquering the market with their "go with us, we're the open alternative to iOS" marketing.
The conclusion is to just never EVER trust big-tech/VC/PE companies, even when they do nice things, since they're 100% just playing the long game, getting buddy-buddy with you waiting till they smothered the competition with their warchest, and then the inevitable rug-pull comes once you're tied to their ecosystem and you have nowhere else to go.
Avoid these scumbags, go FOSS form the start, go TempleOS. /s but not really
I don’t know enough about its history to get the joke.
I mean, I'd give a fair shake to an OS from the SQLite team [1].
1. https://sqlite.org/codeofethics.html
But ultimately it just makes sense to adapt existing kernels / OS (say, arch) and adapt it to your needs. It can be hair wrenchingly frustrating, and requires the company to be willing to upstream changes and it still takes years, but the alternative is decades, because what sounds good and well designed on paper just melts when it hits the real world, and linux has already gone through those decades of pain.
For example any of the systems listed in Carmack’s post. Or perhaps Serenity OS, RedoxOS, etc.
If you mean exotic ones then the answer is the parts that are written are the easy parts and getting support for hardware and software is hard.
I’ve seen this firsthand. These giant tech companies try to just jump into a massive new project thinking that because they have built such an impressive website and have so much experience at scale they should just be able to handle building a new OS.
In my case it wasn’t even a new OS it was just building around an existing platform and even that was massively problematic.
The companies that build them from scratch have had it as one of their core competencies pretty much from the start.
I’m unsurprised meta had issues like this.
This is madness. The safe space culture has really gone too far.
All the FAANG do dumb shit all the time and waste huge sums of money, if you work at a FAANG the best thing you can do is stay in your lane and don’t do dumb shit — eventually it will shake out.
I have been bullied around by L7s (as a L5) sticking their nose in things, and the best thing you can do is clearly articulate what you are doing and why, and that you understand their feedback. Turns out the L7 got canned — partially due to their bullying — and I got promoted for executing and being a supportive teammate, so things worked out in the end.
The OS does process scheduling, program management, etc. Ok, you don’t want a VR headset to run certain things slowly or crash. But some Linux distributions are battle-tested and stable, and fast, so can’t you write ordinary programs that are fast and reliable (e.g. the camera movement and passthrough use RTLinux and have a failsafe that has been formally verified or extensively tested) and that’s enough?
The only thing I can imagine that would be more invasive would require a brain implant.
These days, you get a medium-level description and a Linux driver of questionable quality. Part of this is just laziness, but mostly this is a function of complexity. Modern hardware is just so complicated it would take a long time to completely document, and even longer to write a driver for.
Of course, your custom kernel will still have to have some of its own code to support core platform/chipset devices, but LKL should pretty much cover just about all I/O devices (and you also get stuff like disk filesystems and a network stack along with the device drivers).
Also, it probably wouldn't work so well for typical monolithic kernels, but it should work decently on something that has user-mode driver support.
You know, one'd think that having a complex hardware should make writing a driver easier because the hardware is able to take care of itself just fine, and provide a reasonable interface, as opposed to devices of the yore which you had to babysit, wasting your main CPU's time, and doing silly stuff like sending them two identical initialization commands with 30 to 50 microseconds delay between or whatever.
Without that, we would have probably just switched hw, because the quite obscure bug was in the ASIC, and debugging that on 2005-6-ish hw is just infeasible.
Then how do devices end up up having drivers for major OSes? It's all guesswork?
We also need to be clear what an OS is. Is it "darwin" or "macOS" - they have different scopes.
Things I'd want from an OS for an XR device.
1. Fast boot. I don't want to have to wait 2-3-4-5 minutes to reboot for those times I need to reboot.
I feel like Nintendo figured this out? It updates the OS in the background somehow and reboot is nearly instant.
2. Zero jank. I'm on XR, if the OS janks in any way people will get sick AND perceive the product as sucking. At least I do. iOS is smooth, Androind is jank AF.
Do any of the existing OSes provide this? Sure, maybe take an existing OS an modify it, assuming you can.
if youre apple, it does make sense to do stuff from scratch. i think in a way, software guys wind up building their own prisons. an api is created to solve problem X given world Y, but world Y+1 has a different set of problems - problems that may no longer be adequately addressed given the api invented for X.
people talk about "rewrite everything in rust" - I say, why stop there? lets go down to the metal. make every byte, every instruction, every syscall a commodity. imagine if we could go all the way back to bare metal programming, simply by virtue of the LLM auto-coding the bootloader, scheduler, process manager, all in-situ.
the software world is full of circularities like that. we went from Mainframe -> local -> mainframe, why not baremetal -> hosted -> baremetal?
Mind you, this XROS idea came after Oculus reorged into FB proper. It felt to me like there were FB teams (or individuals) that wanted get on the ARVR train. Carmack was absolutely right, and after the reorg his influence slowly waned for the worse.
It has some value a huge company funds these research, as long as it doesn't affect the practical real for-profit projects.
But I have wondered why one of these companies with billions of dollars to burn hasn't tried to create something new as a strategic initiative. Yes, there wouldn't be any ROI for years, and yes, the first several products on the platform would probably be better off on something more traditional.
But the long term value could potentially be astronomical.
Just another case of quarterly-report-driven decision making, I suppose. Sigh.
That jives with my sense that META is a mediocre company
Building a hobby OS taught me how little is just "software". The CPU sets the rules. Page tables exist because the MMU says so. Syscalls are privilege flips. Task switches are register loads and TLB churn. Drivers are interrupt choreography. The OS to me is just policy wrapped around fixed machinery.
You can't do it without going through their fucking app, that asks for every permissions under the sun, including GPS positioning for some reason. After finally getting this app working and pairing it with my headset, I could finally realize the controller was just dead and their was nothing to do.
Roll call!
Most opinions of this man exists in a vacuum space isolated from the real world software industry. Building an OS from scratch is one of those examples.
It’s never seems like there’s a significant reason behind them other than………”I made dat :P”
Why is such a meme among gamers about Unity and Unreal based games?
Exactly because so many make so little effort it is clear where the game is coming from.
This gives you best of both worlds - carefully designed system for the hardware with near optimal performance, and still with the ability to take advantage of the full linux kernel for management, monitoring, debugging, etc.
https://en.wikipedia.org/wiki/HarmonyOS_NEXT https://www.usenix.org/conference/osdi24/presentation/chen-h...