Brendan wrote:For a modern OS you'd have no choice but to support VBE (and/or GOP on UEFI); even if it's only used as a fall-back for cases where there's no native video driver.
I agree and fully intend to do so.
Brendan wrote:Proportional fonts and anti-aliasing are possible on VGA.
I don't believe it's possible to have attractive-looking anti-aliasing in 16 colours at 640x480.
Maybe if you limit the text itself to monochrome; as that gives you two shades of grey to work with, but I don't want to do that. If you've got an example that shows otherwise, I'd love to see it...
Also, standard VGA text mode is displayed (on a real monitor; most emulators don't do this) at 720 pixels per line (720x400), a software implementation would be limited to 640 (at least with good emulator support). Horizontal resolution is important for readability.
Proportional fonts will be supported in the GUI. I don't see them as worth the effort for the command-line interface.
Brendan wrote:For example, do you think you could support asynchronous IO using the storage device driver interface you've got (including
NCQ)?
Yes, absolutely. In fact, the current, extremely basic ATA driver has a software implementation of "command queuing" already. Switching that over to NCQ would be one of the easier parts of implementing ACHI. My interprocess messaging system will be used to allow asynchronous use of the entire userspace API.
Brendan wrote:This is important for decent performance, even when processes only use traditional/synchronous file IO (e.g. when 2 or more separate processes are trying to access files at the same time).
I agree completely; that's the primary reason why I have software command queuing currently.
Brendan wrote:For another example; do you think your video driver interface can be used/extended to work for hardware accelerated rendering?
Quite possibly. The device-driver interface would be no problem, but it would not be compatible with the terminal system's display multiplexing. The GUI/Application would then have to manage the fact that it may not be currently connected to any real graphics device itself.
Brendan wrote:Note that one of my test machines is an
eBox-2300, which is a 300MHz 80486SX clone (without an FPU) that supports VBE 3.0 and 1280*1024. Also note that my OS doesn't even assume a video card exists (it supports headless systems).
That's certainly an interesting "486" system. It's not at all typical of what I'd expect of a "486", it's probably faster than many of the Pentium-class systems I'm aiming to support. (It appears that the CPU core actually supports all non-FPU instructions of the Pentium unless I'm misreading the manual, so it's not even really a 486) According to a quick bit of research, the CPU used is also known as the "Vortex86SX", which is very closely related to the "Vortex86EX" used in
one of my target systems..
Brendan wrote:You're missing the point. A modern/practical OS has to consider things like security while a simple/beginner OS doesn't; and this is just another reason why modern/practical OS takes a lot more time/effort.
Yes. I'm still very close the the beginning of that time/effort. I know how the various aspects of "security" will be implemented on my OS. How a "security policy module" will be responsible for the enforcing security in the kernel and how the messaging system will allow userspace applications to run under the "supervision" of another process; enabling userspace sandboxing (and even, eventually, allow a sort of "OS virtualization" that enables the state of running applications to be saved to disk, transferred over a network, etc.). It's obviously not implemented yet (v0.0), but a few bits of the infrastructure are there.
Brendan wrote:For a simple/beginner/hobby OS it doesn't matter much if (e.g.) the entire OS fails to boot simply because something went wrong when initialising a file system. It wouldn't even matter much if the kernel panics and reboots when the user presses the wrong key.
None of that is acceptable in my system.
Brendan wrote:For a modern/practical OS (especially if its intended for servers) you do have to care about various failures and do have to try to keep things running despite failures (which doesn't necessarily mean going for full fault tolerance everywhere, but does mean handling all sorts of corner cases and thinking about things that "shouldn't" ever happen).
I agree. Having some recovery when hardware malfunctions is important, but I'm not convinced that constantly checking for memory errors is necessary. It's slow and if you're not careful, all you'll do is repeatedly check the CPU cache. Having it as an option in a diagnostics utility that's recommended on reboot after a crash is about as far as I'd go.
Brendan wrote:By "scalability" I mean how well additional CPUs improve performance. It's relatively easy to write an OS (or software in general) where doubling the number of CPUs gives you very little performance benefits; and for a hobby OS that's fine. For a modern/practical OS this isn't acceptable, and it takes a lot more time to ensure that you do get good performance benefits from increasing the number of CPUs.
Again, agreed. However, I believe that a good OS kernel should use the CPU (for itself) as little as possible, so multi-CPU scalability concerns largely affect userspace. My kernel is preemptible and multithreaded. Whatever scalability issues present themselves when I add SMP support will be dealt with at that point.
Brendan wrote:VGA is a deprecated hardware-level interface that requires special support in video cards ("VGA emulation" mode in addition to the video card's normal/native mode) and special support in the chipset (legacy VGA IO port forwarding in bridges, etc) for the purpose of maintaining backward compatibility. For UEFI there's no reason for the firmware to leave the video card in its "VGA emulation" mode and no reason for the firmware to configure the chipset for legacy stuff; and also no real reason for this legacy support to continue to exist on "legacy free" hardware.
Deprecated by whom? It's definitely a legacy interface that may go away in the coming decades, but for now it's there and is likely to remain so for a good number of years yet.
Of course it requires "special support" in video cards; any hardware interface requires support. I've never heard of a card that's able to turn off VGA "emulation" and some common OSs rely on the it being always available for things like critical error reporting ("BSOD").
Brendan wrote:For a hobby/beginner OS you can assume that VGA compatibility exists (even for UEFI systems where it may not). For a modern/practical OS you can't make assumptions that don't/won't work reliably.
As noted above, I fully intend to support other graphics devices/output methods. The code currently in my kernel itself that assumes VGA will be removed (the VGA module will remain, but only as a fallback, there's a whole "plug and play"/"hardware autoconfiguration" subsystem that I have planned that will deal with which drivers need to be loaded, rather than the fixed configuration file I have now).
Brendan wrote:
This is my point exactly. You're using your OS for "learning" and a massive amount of things aren't very relevant; but you're comparing your "massive amount of things aren't relevant" project to project/s that are intended to be modern/practical OSs that do have to care about all of these things and therefore take several orders of magnitude longer to create.
I'm pretty certain the Linus Torvalds was "learning" as he developed Linux too. In fact, every developer learns as he/she develops software. All projects are "learning" projects, whether they're intended for practical use or not.
Brendan wrote:I can almost guarantee that some time within the next 2 years you'll either stop working on any OS (e.g. job, spouse, kids or other interests get in the way) or you'll restart from scratch. I've seen it happen hundreds of times because it happens to everyone.
I'd say that BT/OS is at least my fifth serious effort at creating an "OS". From DOS-hosted bytecode interpreters written in QBasic (and later C) to modifications of Minix to Linux-hosted "alternative userspaces", I've got far more experience than you seem to realise. I've already restarted from scratch more times than I remember. BT/OS is a little over 18 months old; in that time there have been entire months when no progress has been made due to "other things getting in the way", but it's still going.
Brendan wrote:My best guess at this stage is that you'll probably never try to do anything radically different to existing OSs like Windows/Linux (and never try to build a "hover-car"); but you will discard your current project and begin trying to write a modern/practical OS (try to build a normal modern car).
Only time will tell. There are plenty of examples of people having great, potentially world-changing software ideas that they work on conceptually for years, but never write any significant code, while people with more modest ideals slowly overtake them. All of the "second systems" I mentioned were very interesting, innovative and "advanced" for their time, yet they were all overtaken by simpler, "stupider" systems that were far more quickly developed.