A total effort of 14 person-weeks over real time of 28 weeks (with a closing phase of 1 person-week effort over 6 months) is estimated. The project is stretched out over this length of time not only to allow the implementor(s) time to consider design issues with care but also to allow user and tester participation. If it is felt that user participation could benefit from further stretching, please raise the issue. The times below are in logical weeks. This is not the only possible ordering just a suggested one, the implementor(s) may propose some other that makes sense in the architecture and strategy document. Each deliverable is annotated with a suggestion of what needs to be done.
Study problem and propose design. Deliverable: Architecture and strategy document. The document shall also indicate if there is a generic approach to utilities for constructing network bootable images for a range of operating systems. (Currently there is one mknbi for each operating system, perhaps a generic configurable one could replace that.) Release document to Web site.
Note: Writing a generic netboot image builder can save time when operating systems other than Linux or DOS are to be supported. I do not know how FreeBSD is loaded into memory, that needs to be researched.
Note: One suggested design for a universal image builder is a Perl program that reads a specification of segments from a specification file. This file specifies for each segment, the file it comes from, the byte offset and length of the segment, the destination address, and any segment comments. As a hypothetial example, a Linux netboot image specification might look like:
segment1 0- - 4096 0x92200 segment2 0- - 2048 0x93400 vmlinuz 0-511 512 512 0x90000 vmlinuz 512-5119 4608 40448 0x90200 vmlinuz 5120- - - 0x10000 |
Note: Probably there needs to be more specified, maybe some dynamic parameters extracted from the files.
Get user level BOOTP, DHCP and TFTP loader working under Un*x. Deliverable: A user level program that can issue a request and load a file via TFTP. Release snapshot to Web site.
Note: The NILO snapshot works and implements much of this functionality. It is event-driven as required by interrupt-driven code. Things missing include DHCP support and ARP.
Write Linux network adapter driver harness. Deliverable: Demonstrate standalone programs each incorporating one of the chosen Linux network adapter drivers that can be loaded from floppy and goes through the BOOTP/DHCP and TFTP steps, loading to memory. Release snapshot to Web site.
Note: This is probably the most challenging part of the project. The Linux drivers need support routines for hooking to I/O addresses and interrupts, timer support (jiffies), memory allocation support, some kind of tasking (top half and bottom half stuff), some printing routines (trivial). As the range of drivers tested by users increases, the support routines will be exercised and will need refinement.
At week 4 a funding review should take place to determine if resourcing is adequate.
Get callbacks from secondary loaders and PXE to work. Deliverable: a NILO image that can execute bpbatch jobs. Release snapshot.
Note: This task involves implementing hooks for the PXE specification. These hooks involve particular register assignments. The PXE callbacks have to be translated into NILO callbacks. Understanding the specifications may take some time, it's not particularly easy to read.
Write utility(ies) for creating and manipulating netbooting image for the specified operating systems. Deliverable: release snapshot.
Note: This is the universal netboot image builder and associated tools mentioned earlier. The trick is to get it to work for the OSes of interest. Personally I think a language like Perl and Python will allow these tools to be developed faster but this is up to the implementor.
Get Linux, FreeBSD and Windows (95 and 98) to boot and run. Get PnP to work. Burn test EPROM image or load EEPROM image. Deliverable: working code. Release snapshot.
Note: The effort involved in testing should not be underestimated. Just going around and resetting machines take up some real time. And there's the slow booting Windows.
Receive bug reports and fix problems. Document work. Deliverable: bug fixes, user documentation and internals documentation to LDP standard, HOWTO, Web page. Release snapshot.
Note: Hopefully documentation and bug fixing can be done in parallel.
Additional utilities as noted as required in previous weeks, e.g. menu configurator, etc. General cleanup. Deliverables: code, final release to web site, various archives and distributions.
Note: This is a catchall for any bits noted as needed in the plan generated in the first week. Packaging (RPM, deb, pkg, etc) for general consumption is important. Distributors should be enlisted ahead of time.
One extra week, spread over next 6 months, to fix any bugs reported.