I've been here for about a year and have posted a number of screenshots of this project as it has been developed, but never had the confidence necessary to post a proper announcement thread until now...とあるOS
(pronounced 'toe ah roo OS' and meaning a "A Certain Operating System") is a kernel and set of accompanying userspace programs that a couple of colleagues and myself (98% me) have been writing over the past year or so (since January 2011). The project is a learning experience, primarily focused on understanding POSIX and general operating system design. If you're looking for an experimental or non-POSIX-ish system, this isn't one, but hopefully it's still interesting enough for you to keep reading. The kernel, which is relatively lightweight and currently monolithic, supports POSIX file I/O (with a read-write-capable EXT2 driver), ring-buffer-backed pipes (that are reasonably speedy), a complete shared memory model (though lacking in a permission system), old-style POSIX signals, processes and threads as well as a few other minor things.
I started working on the project while I was on a train from Cleveland to Chicago. I happened to have had a copy of the Intel systems manuals on my Kindle and my laptop in front of me, and had a long day ahead of me, so I started writing a kernel... I'll skip the history for the first year, as it's rather boring (I made a kernel shell and ANSI-capable terminal, which was kinda fun
). In August 2011, the project become an official part of the University of Illinois Urbana-Champaign ACM student chapter's Special Interest Group on Operating Systems (UIUC ACM SIGOps for short).
The past three months have been spent building a windowing environment on top of our shared memory model in preparation for a university open day ("Engineering Open House"). I think we were rather successful:
The windowing system uses shared memory buffers for window textures, which are then rendered with a speedy hybrid stacking/compositing renderer (moving/creating/removing a window will force a rerun of the stacking algorithm, but renders to the screen happen in a draw loop ensuring that any changes made to window buffers is always accurately reflected by the display) in software. Eventually, if I have the time, I will write some real display drivers for the Intel 965 series with actual blitting, but for now we support VESA (poorly, via broken software emulation of BIOS calls; I have never had this work on real hardware because of how limited our third-party emulation layer is; I am working on replacing it with libx86emu) and the Bochs/QEMU virtual card.
My current goals for the next year include:
- Finishing the native GCC port - There are a few POSIX functions we don't yet support, mostly related to ioctl and file permissions.
- Porting bash/etc. - Similar to GCC, there are just a few things we don't yet support that we need for these.
- Networking support - Self-explanatory, I would hope...
- Building a GUI toolkit - Our windowing environment only supports passing keystrokes to windows right now and has a limited library for rendering window borders/titlebars.
The code is all licensed under the NCSA license (it's a lot like the BSD license if you're not familiar with it) and is available on GitHub
. If you want to report stupidities or general bugs that would be nice. If you want to help develop anything, there are much better projects to work on here but we'll still begrudgingly accept you. If you want to run it on real hardware, good luck as our VESA BIOS emulation doesn't actually work on any non-Sea BIOS I've ever encountered and we don't support VGA text since roughly 0.0.4 (I have only ever gotten things to boot graphically on QEMU
, but you should also have similar luck with bochs). Build requirements are a newer Clang (I'm on 2.9) or a reasonably recent GCC, genext2fs, yasm, and (if you want to generate our abysmally outdated documentation) a complete LaTeX distribution with CJK support. Unfortunately, we don't have a proper userspace toolchain available but once we have a working GCC port this will probably change, in the meantime, there is a script in the `util/` directory that will pull the newest set of pre-compiled binaries from Dropbox (run `util/grab-binaries.sh`).
I think that basically covers everything I wanted to put here for now. I'm going to post my updates in this thread as I work on new features and port more software instead of continually spamming the "Screenshots" thread.