Saturday, February 23, 2008
Interview with the Core Developers
Sunday, February 3, 2008
Busy Bees at the Circus
The project has been a hive of activity the past several weeks. Our first release at the beginning of the year has spawned a constant stream of chat from interested parties, and all sorts of code contributions. Within a week of our release, someone hacked together a Snake game to embed in the kernel, for example:
(A screen-shot of Snake# running on our kernel – making it rather easy to get distracted from debugging other kernel issues.)
With all the people stopping by, it's been a mad house. People have submitted patches for bugs we didn't know we had. And we've even had a bunch of contributions for command-line functionality – even though the command-line was only meant for demonstrative purposes!
One interesting sample of work on SharpOS has been an attempt at VGA graphics…
(Somebody took one of our logo submissions a bit too far…)
…but don't get too excited – the patch hasn't been trunked because most of our hardware stuff is pending until after our runtime work.
Another screenshot which reflects some miscellany that has been added to the kernel:
(Don't worry; I think that area of memory is supposed to look like that.)
…that's right, a memory dumper! Oh well, it's exciting in a nerdy way. And notice at the bottom, that William has been working on a software clock.
But the most important change in the code-base over the last couple of weeks is one that a screenshot really can't do any justice for. Chriss has added support for object instantiation - Real, genuine, live objects. And as a result, the most important and exciting work has been centered on what this means.
William has been working diligently to get type metadata into the kernel, and for the most, part has succeeded. And as a side note – it's caused some big changes for us. The kernel no longer fits on a floppy image! So because of a bug in QEmu for Windows, which is the only emulator that still supports our over-sized disk image (other than the more-buggy Bochs) – we are now including the binary for QEmu for Windows, in our repository. Our NAnt build files have been expanded – so give 'nant run' a try – and an identical functionality for Visual Studio is still being worked on.
Sander has also been working on kernel design and driver implementation. He did a much-needed cleaning of the wiki (you can actually find your way around in it now!) So big kudos to him for that, because we now have significantly less redundant questions about project information that should be retrievable from the website. And due to his work with driver implementation, at the very least, he has stirred up much-needed debate on what needs to be done, so that we can move forward as a group.
(We have a contributor, named Sam Wilson ("tecywiz121"), who has been writing a C# implementation of ISO9660, so that we will both be able to use other PC emulators again, as well as the same sort of functionality inside the kernel, when that time comes.) He says it is coming along well, so you can imagine that has everyone excited.)
But type metadata means a lot. It means we are months or even only weeks away from having reflection. And after we toss a Garbage Collector in, we'll be able to start implementing the stubs to support the Mono mscorlib – which means we are probably only 4 or 5 months away from a JIT. (Because remember, our AOT just needs some slight refactoring so that it can be AOTed to sit on top of an also-AOTed Mono mscorlib and Mono.Cecil).
We also have a contributor, David Stetz ("codan3"), working on threading (and mostly done with the base implementation.) And Chriss is working on exceptions! So even though only a month ago, our code looked dirty and dead-ended with pointers and frivolous exercises at re-inventing the standard C library, we are jumping in leaps and bounds. We are now starting to have reasonable conversations about object-oriented hardware abstractions, and the like.
Oh, and Sean Donnellan ("Donno") has updated our "SharpBot" (in IRC as "SharpOS"), to actually be rather functional, so we now have constant logs of everything said in the chat room. (Don't worry, the topic has a disclaimer.)
And a final screenshot for this post, demonstrating a listing of PCI devices:
(Listing device information is important, even if you can't understand it.)
The PCI work was done by Cédric Rousseau and Stanisław Pitucha ("viraptor"). It will undoubtedly be ported to OO and expanded, very, very soon.
Everything is all very exciting, and nothing seems to be slowing us down!