I've drafted a roadmap of all the drivers that I think a functional operating system needs, and marked which ones are already usable.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
Buses PCI - Usable USB - Usable Human interface devices PS2 - Usable USB mouse/keyboard - Usable Storage ATA - Usable ATAPI (CD/DVD drives) - Read only; does not yet support ejecting discs SATA - Usable NVMe - Usable USB mass storage devices - Usable Filesystems EsFS - Essence's custom filesystem ISO9660 - Usable FAT12 - Read only FAT32 - Read only NTFS - Read only ext2 - Read only Sound Intel HD Audio - Output to speakers only Graphics (these are too complex to write from scratch, will need to be ported) VGA w/ software rendering - Usable BIOS mode setting w/ software rendering - Usable UEFI mode setting w/ software rendering - Usable Nvidia - Started port of kernel platform layer Intel AMD Networking Network cards - i8254x working Protocol stack - Started basic implementation Wifi Bluetooth CPU architectures AMD64 - The currently only available platform; SMP working x86 - Maybe?? ARM processors Misc ACPI - Finished port of ACPICA but no power management features Raspberry Pi, Arduino, etc.
Currently I think the highest priority are SATA, ATAPI, USB mouse/keyboard and USB mass storage devices. These shouldn't be too difficult to implement.
We also need to work out a solution for graphics and network cards. I know relatively little about these topics, but I presume that these drivers will have to be ported from Linux. If you have experience working with the Linux graphics or networking stacks, your help will be much appreciated!
It'd also be nice to have audio drivers, a few more filesystems, and support for other platforms like ARM, but these are low priority.
I'm now working on a rewrite of all the userland code (I have gained a lot of experience since writing the original code), so I don't have much time to work on drivers. This means I really need contributions from other people to help develop Essence. All the drivers I've separated from the main kernel unity build are in this folder https://bitbucket.org/nakst/essence/src/master/drivers/. These should serve a good introduction into working with the kernel and writing drivers for it.
I highly recommend you join the #essence discord channel on the handmade network guild if you are interested in contributing to the project.