# Why wasn't ToaruOS written in... ## Rust Rust did not exist when the project started in January 2011. Rust's first release was in 2012, by which time ToaruOS already had the first version of its GUI. ## Go Go is not well suited for kernel development, and like Rust did not exist until after ToaruOS had reached a level of maturity. ## D While D was mature and available at the start of the ToaruOS project, its compilers were not open source until 2014. ## C++ I wrote ToaruOS at a time when I was much more competent at C than C++. I still think that's true. At this point, the effort of rewriting datastructures to make use of C++ functionality would not be a good use of time - and writing userspace code in C++ in ToaruOS-NIH is not yet possible as I have yet to get a C++ standard library set up. ## Assembly Real operating systems aren't written in pure assembly. While doing so is a laudable achievement, it was not even on my radar as a goal. ToaruOS may not be portable to other architectures at the moment, but I hope it one day will be, and that would be utterly impossible if it had been written in assembly. ## Anything other than C ToaruOS was meant as a learning experience. C was, at the time (late 2010, early 2011), *the* language used for operating system kernels and device drivers. On top of that, I was also looking to get better with C - a language I had learned while developing plugins for Compiz. ToaruOS rapidly reached a point where the prospect of rewriting it another language would be infeasible, and I have little interest in starting a new project. At this point, I want to continue with C as I think it's a language I have a reasonable chance of being able to write my own compile for, closing the loop and making ToaruOS a complete product. # Is ToaruOS just another Unix clone? ToaruOS implements many Unix-like features. It does this for several reasons, but at the top of the list is that, as a university student at the time of its inception, learning how Unix-like systems worked at a low level was a major goal of the project. There were several times during ToaruOS's development where it implemented non-Unix functionality - usually because the Unix approach was found to be too difficult or time-consuming. Today, ToaruOS has a fork-based process model, file descriptors, a traditional Linux-inspired (and thus Unix-inspired) filesystem tree, uses the same binary formats and basic filesystem as Linux (much like early Linux used the Minix filesystem and object files), implements TTYs and a virtual terminal, but it also includes several subsystems which are not based on Unix such as its approach to shared memory and its packet-based IPC mechanisms. Additionally, more of ToaruOS is focused on userspace, where the compositing window system is completely unlike X11 (though it does take some inspiration from early Wayland). # Why did you write ToaruOS? When I was still in school, my university offered a course in operating systems that several of my elder classmates had taken. That course was in a different department - electrical and computer engineering, rather than computer science - and a CS course I had already taken conflicted with the credit given for the operating systems course (despite not being an operating systems course itself). I wanted to take it, but the CS department denied me. ToaruOS was started somewhat out of spite - if they weren't going to let me take that course, I was going to write my own OS, and it would be *way* better than anything anyone would make in that course. I would say I succeed in that goal, both in within the timeframe of the course and beyond it. # Why did you start ToaruOS-NIH? I once gave a talk on ToaruOS, describing how it worked and a bit on how I had ported Python. After that talk, someone (who will remain anonymous) came up to me and had some choice words about my use of third-party libraries. In their mind, it was cheating. And they weren't alone in expressing that opinion - similar things have been said to me on forums. I wasn't really a fan of the C library ToaruOS was using (newlib), and combined with this backlash I felt compelled to go a different direction and write my own, and this became the ToaruOS-NIH project.