Rusky wrote:However, yes: sharing UDI environments would be silly, and that might make this kind of situation technically infeasible. I don't know enough about UDI to be sure, but binary blobs would probably preclude certain OS designs, even within the same processor architecture, and infuriate certain members here.
Operating systems are complex and the UDI environment would be tied to this complexity so it would be difficult to use the same thing in the boot loader without implementing much of the same functionality. After all, if the boot loader has the same functionality as the OS, what's the purpose of the OS? Fortunately, an UDI environment for something like a boot loader would be
really simple to implement.
DavidCooper wrote:Love4Boobies wrote:I'm still waiting for you to explain why this auxiliary OS is useful. You just took the driver interface and power management support out of the main OS and put them in what you call an auxiliary OS.
I've already explained that it's the equivalent of a real-mode OS working in tandem with the BIOS. As soon as you switch into protected mode, you lose direct access to the BIOS, but if you had equivalent services available which run in protected mode you would be able to have a 32/64-bit OS working in tandem with a 32/64-bit BIOS. Collectively the two things would behave as a single OS, and as the main OS gets more advanced it can decouple more and more components from the auxiliary OS and incorporate them more directly into itself in order to use them more efficiently.
I figured this was what you were looking for but waited for you to make the claim. You see, the BIOS functionality was never really lost; it was merely moved from the firmware into the OS because it's more flexible that way:
- Firmware vendors don't need to implement uber-efficient drivers that take advantage of many-core technologies and whatnot.
- Drivers are typically provided by hardware vendors, not OS developers.
- It's not feasible to get a large EEPROM chip and flash it everytime you install a new device. Don't even get me started on hot plugging.
- Driver interfaces are typically molded after operating systems for efficiency reasons (UDI being an exception).
You're not trying to offer lost functionality. Instead, you're trying to move it out of the OS again into another module you invented. I do understand that you're talking about a pre-installed library for hobby OSes. However, as I already explained before, hobby OS developers can just port whatever components they like (be that udiref, ACPICA, or anything else) with greater flexibility by using the source code---all you want is to pre-package the stuff YOU think is useful in a binary blob, thus creating technical difficulties, as well as increased overhead.
DavidCooper wrote:This is about making hobby OS development easier so that an OS designer can quickly achieve a high level of functionality and be able to go on improving his/her OS by modifying the way it ties in with the auxiliary OS. An advanced version of such an OS will incorporate every aspect of the auxiliary OS directly into itself to the point that there is no longer any separation between the two, and by that point it could be performing on the same level of Linux or Windows if sufficient drivers become available.
You're saying the same thing over and over again. I specifically asked you to stop telling me how things would work and explain to me
why they should work like that.
- UDI drivers would offer all the functionality regardless of whether they are implemented in the main or auxiliary OS.
- In the case of things like ACPICA, just because you're pre-packaging it doesn't mean it's any easier to use than the source code. It still takes work to integrate everything and/or properly use all the information it provides. Hence, there are 0 advantages; the disadvantages are covered in many parts of this post (flexbility, incompatibilities, etc.).
DavidCooper wrote:Why don't you also create a second such auxiliary OS to provide a validating XML parser and TCP/IP support?
You could have a whole bunch of auxiliary OSes or universal modules capable of being built into a wide range of main OSes. It doesn't really matter whether they're one block or many.
Right, my my actual point behind that remark was that there should be 0 extra modules rather than more than 1. That would be done by implementing the auxiliary OS inside the main OS. And that's consistent with what happens in every OS today
DavidCooper wrote:A lot of work needed for no apparent gain, esp. in order to cover all corner cases (e.g., Should the binary blob be compiled for a flat memory model? Should there be a whole bunch of binary blobs for all the modules or should there be a startup compiler with the ability to cache the blobs on a per-machine basis?).
Would anyone seriously want to use anything other than a flat memory model? I was imagining a whole lot of relocatable device drivers in binary form on a storage device and the appropriate ones being loaded in - you wouldn't compile anything after the binary files have been created, and that would all be done in advance. Maybe that isn't practical because of the number of different versions of each driver that you'd have to have on the storage device, so perhaps it would be better to compile them to create versions specific to the machine they're going to be run on, but you'd only have to do that once for each machine as you could then store the results on the internal drive and load them from there every time in future.
It's irrelevant whether the OS uses segmentation or not. The point is that the auxiliary OS might have restrictions. Anyway, I wasn't expecting answers for these questions; I was just showing some of the many engineering problems to consider and work around---it's likely not feasible to create something that is compatible with all OS designs. I've got plenty more examples.
I would now like for you to put together a list of advantages. All you've done so far was to describe
how the thing would work; it's time to describe
why. No better way to convince people that pro/con lists.
I've given you plenty of reasons above. The main one though is simply to recreate the real mode BIOS services in 32-bit mode form and to add further functionality too, thereby making it easier for people like most of the members of this site to create their own OS and build something powerful in a short time. Most of the power would come from the auxiliary OS, but that isn't any different from old real-mode OSes getting most of their functionality from the BIOS.
DavidCooper wrote:Finally, to demonstrate that you're not the kind of guy who thinks a design though, I'll give you a better goal for your project: An open source bare bones OS that implements ACPICA, udiref, and whatever else you think is useful. No more need to relocate anything and thus create startup overhead, no more design compatibility problems, no more flexibility problems, and a much cleaner design. People can just work on top of the building blocks provided by this project.
And then you've just created a highly restrictive community OS project which does everything one way rather than allowing everyone to create their own OS project doing many things their own way while drawing upon the same underlying essential functionality in those areas where everyone's going to do things much the same way anyway.
I'm not trying to create a restrictive community; what I am trying to do is to make the community understand that they need to think about their designs. Often times people seem to mistake "different" for "better" and this seems like a perfect example to me.
You still haven't answered why the bare bones OS wasn't a better design.
DavidCooper wrote:The BIOS doesn't limit the design of a real-mode OS, and the auxiliary OS I'm proposing wouldn't limit the design of the main OSes that run alongside it either.
Really? How would it work with segmentation? How would it work with managed OSes? etc.
DavidCooper wrote:Anyway, it's probably too late to be worth bothering to start on an auxiliary OS project now as it's likely to be overtaken by events long before it can get anywhere useful, so it should at best be considered an idea that missed its time, and at worst a lame idea from someone who knows next to nothing.
Don't take it personally, some ideas are just bad. It's not an offense towards you or anyone else. It's important to have lots of ideas but to also analyze them carefully.