From: Bruce <ill...@gm...> - 2007-08-05 00:55:08
|
About time I exercised some brain cells, and attempt to process your e-mail and respond to it. On 7/27/07, William Lahti <xfu...@gm...> wrote: > > Our roadmap is lackluster in terms of providing a real sense of > progress... our first milestone is trivial in comparison to our second > milestone, and the massive size of it could be enough to stall > development. While the completion of the AOT is one of our biggest > priorities as it sets the course for completing our initial nanokernel > and process system, there are many other steps between that must be > completed before the AOT can actually produce managed code for the > kernel. I think we should expand our roadmap with more, smaller, > milestones that provide a clear and step-by-step plan to bring our > first fully-functional kernel to release. And consequently, with plenty of sub-tasks to flesh it all out. Milestone 1 stays unchanged > This milestone is a good PR/attraction point because we'll be able to > offer a download of SharpOS for OS enthusiasts to play with. It will > be a good time for us to show the world how much we've cut the endless > loop of the chicken/egg problem of running C# code (of any variety) > without lower level support code written in a traditional language > like C/C++. So we need functioning console read/write code. Okay, I've added a Ticket for such. A good amount of the code appears to be in place, and I can't wait to explore what is and isn't there, and hopefully flesh it out with a ' System.Console' style wrapper. Milestone 2: a functional runtime and kernel testcase system > The integration of our runtime code into the trunk kernel, preparing > for subsequent AOT support for managed code. We will model the runtime > in such a way that makes integration with the AOT's managed code > support a no-brainer :). This milestone would also call for a new > testcase system for the kernel internals-- while the > SharpOS.Kernel.Tests code actually tests the functionality of the AOT, > this testcase system would stress the real trunk kernel as we've > written it. I don't have a solid direction on how we would do this... > any ideas? For the AOT supporting runtime implementation? I guess we need to evaluate the type of function calls that need to be performed, and set them up as AOT stubs. Obviously memory management and constructors are part of it. We have to figure out how we map, a structure that represents a relocatable pointer to a managed object, to the managed object reference being used in the original C# code at hand. Though not 'runtime' related, (but definitely 'runtime' dependent'), I think we could even possibly get IL exception throwing code, on this level of the kernel, to call ADC code to generate an exception interrupt. As far as testing, I say just use conditional compileation to optionally both include and execute tests. We can't directly strap it to NUnit, but we could strap it to the end of the boot-sequence when compiled for such. This is probably the best way to make sure that tests are interacting with our kernel under the same circumstances as our kernel interacts with our kernel. Milestone 3: Korlib > We will need to have a light, kernel-level mscorlib that we've > tentatively called Korlib up to this point. We should strive to create > a corlib codebase that can be used both for korlib and the userspace > mscorlib (via C#/AOT conditional compilation). The korlib does not > need to be complete, only functional enough to begin running managed > code in the kernel. This is definitely the next step. As soon as we can start instatiating managed objects, (mostly) worry free, we can start importing pieces of Mono's corlib. Whether we conditionally compile or conditionally AOT, I'm sure we want to share as much code with Mono's corlib as possible. Even if we don't... well, we can still use most of their unit tests. But assuming we *do* want to use our code - we have to consider whether or not we can make use of code repo diffing to help maintain our branch. Regardless, I definitely agree that the korlib is not something thats going to appear overnight. Regardless of whether its conditionally compiled or conditionally AOTed, we still have to consider what is involved in getting the AOT to match an entire assembly of our code in the place of the normal mscorlib. We might have to move to an Errors/Warnings type return results for the AOT, so that we can get accurate reporting on which parts of the kernel won't AOT against our korlib. Milestone 4: Stable AOT support for managed code > The AOT at this point should be able to generate managed code (aka > EDC) with help from our kernel runtime. Technically, anything that would be able to be AOTed against the korlib could make this requirement seem fullfilled. We need to either flesh out the amount of differences between milestone 3 and 4, or merge them to something like "enough of a korlib to have a scheduler" or "enough of a korlib to have a VM". Milestone 5: Completion of a partially managed/unmanaged scheduler > implementation supporting pluggable scheduler plugins (maybe even > using more than one scheduler plugin at a time for different > processes?) as well as a process subsystem for > management/monitoring/destruction of managed processes (from code > precompiled into the kernel) How much managed vs "unmanaged"? By managed you mean running in (and depending on) the VM? I have to think on this one. I'm not sure that any of the scheduler needs to be unmanaged. I'm going to have to think about this one, because I'm getting confused by my own implications... Milestone 6: Cyclic compilation of the AOT engine > The AOT should now be capable of compiling itself into the kernel > (as-is). Naturally it's use will be limited since it is not yet > suitable for use as a JIT engine. > > Milestone 5: Stabilization and completion of version 1.0 of our AOT > compiler > This would be equivalent to our current milestone 2 > > Milestone 6: Refactor the AOT so it can be used as a suitable JIT > engine for the kernel as well as the AOT engine used to compile the > kernel. > The title says it all on this one > > Milestone 7: Integrate the JIT and have support for loading/JITing IL > assemblies at kernel runtime, using the process/scheduler code we've > written. > > Milestone 8: An initial release of the SharpOS kernel. These last several milestones are beautifully seperated, and I don't have any questions or issues caused by how they are described. This is mostly off the top of my head, but it does quantify much of > the work we need to do to in getting a real initial kernel out the > door. If you have additions/changes i'd love to hear them-- I don't > really know everything necessary to make a kernel or else I would've > done it already!! Hardware? During or after all of these steps? After might be good, but it is definitely something to consider. |