June 14th, 2009
After a long time of not working on Symmetry due to University and other commitments, I put in a bit of work today and made a lot of progress in getting Symmetry multitasking. Today it actually did show some evidence of running two things at once, even if it does crash after about four seconds…
Still, it’s a big improvement from before, when either it would just run one of the threads, or immediately restart the virtual machine.
The updated code is in Git, but is disabled.
Posted in Development | No Comments »
February 28th, 2009
I made a small breakthrough today with the first Symmetry release, 0.1 (Codename Interceptor), with the two most critical defects in the development branch being fixed. These were both problems that stemmed from a problem in Symmetry’s memory management, and have been blocking progress in the kernel for around three months now. With these fixed, as well as some good progress on vector support, Symmetry is well on the way to gaining multitasking and Elf executable support!
According to Trac. we are now 58% of the way to the 0.1 release. I expect that this will be done mid-year.
Posted in Development, News | No Comments »
February 12th, 2009
Symmetry’s build system has recently been completely revamped, making builds faster and more efficient, and making the source tree much cleaner in general. The old makefile used to build every source file every time it was run, which makes it far slower than it needs to be having only changed one or two files. It would also dump every object file in the top of the kernel source directory, which would make it rather messy.
The new build system solves all these problems, and will be far more portable than the old version. Whereas the old version was hard-wired to only compile for the x86 architecture, it would be very difficult to port it without writing large parts of the kernel target for every additional arch. The new one should be able to just work when you change one of the variables.
The new makefile now exists out of the source tree, in the build directory (instead of being in the kernel directory before). I also moved the image and ramdisk folders out so now just the source is in the kernel’s source directory, as it should be.
Posted in Development | No Comments »
December 21st, 2008

Normally I develop Symmetry on my Linux box, which runs Ubuntu 8.10. This makes everything very easy, as you can just install the packages for gcc, binutils, nasm, git and mkisofs, and Symmetry will (usually) just work. In the next month I’m going to have a lot of spare time to work on Symmetry in the next few weeks, but I’m going to be away from home - with my laptop, an Apple MacBook running Mac OS X Leopard. While OS X does have GCC, it can only generate binaries in the Mach-O format. Building an ELF executable which GRUB can load, on the other hand, requires making a GCC cross compiler. Although this is a somewhat daunting task, it’s really quite easy with a good guide like the one at the osdev.org wiki.
Although I had some problems trying to build Symmetry at first, now I’ve got everything working nicely. I’ll have to save some documentation for when I’m without internet (like on plane trips), but apart from that, there shouldn’t be any problems developing when I’m away now!
Posted in News | No Comments »
November 20th, 2008
I haven’t really been able to do any work on Symmetry recently, given that I have been quite busy with the end of school recently, and that my development computer is not currently set up. So at the moment, it is actually quite badly broken - the latest version I compiled would just quit with a triple fault. This is because I have been getting ready to add multitasking support recently, and some of the infrastructure that I have implemented is fairly broken.
I am going to try and get this fixed as soon as possible.
Posted in Development | No Comments »
October 8th, 2008
I have spent most of the time that I have been working on Symmetry trying to find a bug that was causing a General Page Fault (or GPF) at startup. The fault would be raised when I tried to create a heap, so I thought it would therefore be something wrong with the paging or heap management code. After a week or two, it occured to me that there might be a problem with the GDT entries being wrong, and sure enough, it turned out that there was an error setting up the gates, making the whole memory not work as expected. It turned out that this was also causing another GPF in the ACPI initialisation.
So now I am able to test in Bochs and on real machines, instead of just in VirtualBox and QEMU like before. Now I can finish off the heap management (I just have to finish deallocation) and then I’ll move on to multitasking and user mode. I’ve already started to write an ELF executable parser, and once I have those things finished, hopefully I can get Newlib ported to my OS, and then compile apps for it!
Posted in Development | No Comments »
September 30th, 2008
I updated the CD image and the binaries archive in the downloads section today to the latest build. This features the newly improved keyboard driver (which was previously disabled, as an optimisation error produced a general page fault).
The screenshot of this version has also been updated, as the new version looks slightly different. While updating this, I also put the lightbox script back into the new theme.
Posted in Releases | No Comments »
September 28th, 2008
I posted a new screenshot of Symmetry running in Virtualbox, just after I finished the basic initrd support today. I also moved the older screenshots into the screenshot archive, because the main screenshot page was getting far too big.
I will probably post a screenshot of the GRUB splash as well, but I should alter it first because it still says “Stephen’s Operating System” on it instead of the new name… Afterwards, I will also make a new CD image and post it in the downloads.
Posted in Site News | No Comments »
September 28th, 2008
I finished Symmetry’s basic virtual file system today. Right now, the only thing that gets mounted on it is the dev directory, and a few files off the ramdisk. The ramdisk (or initrd) is just a tar archive that GRUB loads, and Symmetry parses and mounts on the filesystem. I chose a tar archive over a custom tutorial (as is used in JamesM’s tutorials, which my VFS was somewhat based on), because this way I don’t have to make a program to write the initrd, parsing it is almost as simple as a basic custom FS, and most people would have tar installed, so I can use it in the makefile.
The code, as always, is in our repository at Gitorious.
Posted in Development | No Comments »
September 21st, 2008
I’m working on heap management at the moment with Symmetry - now I can dynamically allocate memory, and I have the necessary infrastructure to free it as well - I just have to finish off that function.
I also added a PIT driver (as I will need that for multitasking) and I also did a quick keyboard manager (the callback just prints out a word), but that isn’t working too well - as soon as a key is pressed, I get a general protection fault…
Speaking of general protection faults, my ACPI code triggers one on my computer (when running it as the main OS) but not in Virtualbox, QEMU or Bochs… So, I have to fix that, although it could be quite hard to track down, not being able to test it in an emulator… I also get a GPF when enabling memory management in Bochs, so I will also have to see if that happens on real hardware…
Posted in Development | No Comments »