Hi,
Before replying to the previous posts, I want to list down some of the basic goals of this project:
- Replace multiboot, i.e., several OS projects can use this bootloader.
- Be easy to use. Has a good set of tools and documentation.
- Be easy to configure.
- Support almost everything a beginner (or even advanced OSdev'er, for that matter) might require from a bootloader (nothing extra, though).
The languages I'd use would be assembly (intel style, using NASM - could be changed if several contributors demand so), and C (gcc or clang - can't change, sorry).
The planned bootloader should be able to boot from PXE, CDs, floppies and harddisks. They'd boot off from BIOS & UEFI, and would only be intended for x86 and AMD64 (x86_64). They should roughly do what GRUB does, right now. They would also support enabling paging (and long mode), picking up any video mode (based on some preferences), passing the pointers to ACPI & MPS tables (since UEFI requires you to get those pointers from the firmware), etc. Anymore, and we'd be getting into the specifications (more on that, later).
To be honest, I never wrote any bootloader for a hard disk. On the other hand, I've written one for PXE, floppies and CDs.
requimrar wrote:Splendid! I enrol.
Brendan wrote:In my opinion; the first step would be to create a specification that clearly defines how the boot loader gets any information it needs from the "thing being booted", how the boot loader passes information to the "thing being booted", and how the boot loader passes control to the "thing being booted" (including the state of various pieces of hardware when this happens - e.g. if the "thing being booted" can assume A20 is enabled, if PCI devices are pre-configured, if interrupts and interrupt controllers are setup or not, etc).
In my opinion; the first step would be to list down some of the goals the project aims to fulfill. These are nonvolatile, and remain fixed throughout the project; rest all things are secondary (including the one you just said) and volatile. I would prefer drawing up the specifications with constant advice (and guidance) from whoever decides to participate.
Brendan wrote:Without some sort of specification that developers can use to determine what they'd need to implement, developers can't know what they'd need to implement..
Developers start with goals, then draw up specifications, then implement what they'd need to implement. However, since you're perhaps one of those on these forums without whom this project would lack severe momentum, if you really require them, I'd be willing to draw up a
rough draft of the specifications.
Shall I count you in, then?
sortie wrote:Naturally, such a Generic Bootloader would have to co-exist with GRUB 2, at least to some extend. For instance, I like to run my own Multiboot-compatible operating system on my own machines, and those happen to have GRUB 2 installed. Perhaps this could be accomplished using chain loading.
For my own bootloaders, I had some sort of a stage planned which would boot from GRUB, switch back to real mode, gather the rest of the information needed, and pass on to the next stage. Or, we could chain load. Naturally, these all quirks would be planned with the specifications.
Shall I count you in?
bluemoon wrote:I also not quite comfortable with GRUB and I had write my own boot loader (with limited features just enough to load my kernel). Eventually I will need a better, more complete loader, in terms of firmware (BIOS, UEFI) and supported media and formats (CD, usb, network, or even boot image from internet#); I'm interested in GRUB alternatives.
Other than the mini text-based browser, I think we can do everything you also plan with your more complete bootloader; shall I count you in?
rdos wrote:IMHO, GRUB and GRUB 2 attempt to do too much. A bootloader should just load some binary image-file, and possibly some additional modules, and then pass some pointer to a structure in 32-bit flat mode with paging disabled. Everything else is overkill. It should definitely not relocate or fixup some types of executable formats, it should not enable paging, and it should not leave control in long mode (as that means paging must be enabled). It should be able to boot from as many file systems as possible, and this should be transparent to users (and not module-based!). There should be no "multiboot" header in the OS image, but rather the pointer passed at startup should be general enough to be able to be extended in future releases without breaking backwards compability.
Hrm. Our definitions of bootloaders seem to be contradictory. For me, a bootloader should take control from the firmware, load some binary modules, do ANYTHING firmware related, and do every
basic thing needed to be done once during boot. I guess I shouldn't count you in, then?
Regards,
Shikhin