Hi,
Kemp wrote:The entire project for a long time would be number 2 on that list. Number 4 would be mixed in and number 1 would come afterwards. Number 3 would be one of the last things to do.
Not necessarily. If my proposal is selected (and I'd still want to wait a week for other proposals, letting the dust settle, etc) there's several activities that can be started....
First, there's the
languages part of the regional database, which has many incomplete entries. People could just add their own information (and many helpfull people have), or someone can become responsible for seeking out the missing information and completing what they can. This only really requires a good web browser (something that can handle UTF8 character sets). Even though the regional database hasn't been integrated with the new version yet, it will be.
Then there's existing code that isn't commented and/or isn't formatted. This is a little tedious, but you only need a text editor (and optionally, GCC to make the "System Build Utility" if you want to see how your formatting looks straight away). This is also a great way to become familiar with the code itself...
There's also a whole pile of "CPU errata" that needs to be done (see
here for an example, and
this page for an explanation). This is hard work (trying to understand the manufacturer's information isn't easy).
Next, there's only a "raw floppy" boot loader at the moment. The previous version had a boot loader for GRUB, which shouldn't be too hard to modify to suit the new version (almost all of it remains the same). Also there's old code for creating bootable CD images that could be ported to the new version (most of it also remains the same, but it's a little trickier). Both of these would need a little knowledge of the OS's boot process (but very little) and some knowledge of either GRUB, or the ISO9660 format and El'Torito.
Then there's real mode code in the "boot manager". This is meant to have a menu system built into it, which has been allowed for but not implemented. The idea here is that the
boot API should have a new function to display a menu, which allows the user to select an option and returns which option was selected. This can involve scrolling the list of options (if it's too long). This is more challenging, because the boot manager runs in 640 * 480 *16 colour mode (which can be painful). There's already a system of video buffers (for performance) and code to draw characters, etc.
Also, the boot manager is supposed to get a list of options from the boot image and parse it (e.g. a boot configuration file). This boot configuration file doesn't have a format yet, but only needs to handle "variable = something". This would also include a new boot API function that allows boot modules to ask for the contents of a variable (where the boot API function tries to find it and return it).
Then there's support for a "default" video mode. This would mean writing a new (real mode) boot module that gets a list of available video modes using VBE BIOS functions, uses the boot API menu (above) to allow the user to select one of them (and test the currently selected video mode). This needs to wait until the boot manager has support for menus, but someone could start it and obtain a list of available video modes. The idea here is that if there's no video driver for the video card, the user can still use high resolution video modes.
Once the video mode selection module is done, support for different colour depths would need to be added to each "kernel setup module". There's 3 kernel setup modules (32 bit, PAE/36 bit and 64 bit) and 5 colour depths left to implement, but the same code can be used for both 32 bit and 36 bit (PAE makes no difference here). This works out to 20 routines to blit characters (8 * 8 and 8 * 16 fonts) and 10 routines to draw the title.
I'm about to run out of room (there's more), but this should at least give people an idea of what can be started. I know some of it isn't very exciting, but that's how these things go (it gets more interesting as more is implemented).
@Candy: I've got some plans for reverse engineering. Let's just say that the BIOS I'm working on could be very handy for virtualization, and that if an OS allowed any real device to be assigned to a "hypervisor", then that hypervisor could boot some other OS and create a log of every single interaction between the guest OS and the device. Unfortunately, long term plans aren't suitable for short term goals...
Cheers,
Brendan