Warner's Crazy Ideas for Projects
These are ideas I've had for projects. Help yourself, though it would be nice to contact me if you are working on one of them.
- Rework Loader's md so that it needn't be compiled in. Either through a command line arg, or added elf section or, for compat, compiled in. It would be cool if we could add a MD to a specific loader (like loader.efi, or loader.kboot).
- Reworking config(8) to spit out its data as UCL so we can maybe start config.lua to replace it with better config language.
- generate loader's conf.c from a config file.
Add ability to download a chain of reviews from phabricator with git arc patch -r D1234 (-r is recursive, but I'm easy)
- Add priority boost to a driver. Have a tuneable / sysctl that lets you say "iwl:-3" or "iwl:+5" which will make iwl a little less (or more) likely to attach to a device that another device might have matched. This is used for breaking ties and dynamically selecting driver winners for things like wifi where two or more drivers could drive things
- Teach camcontrol and nvmecontrol libxo
- Create an installboot program that knows how to install all the different boot stuff there is
- Write hints glue for my devmasq code which allows one to say treat a found pnp device id as something else that we already have a driver for.
- Finish camio (a dtrace + lua script to give tcpdump-like output for CAM)
- Finish libification of syscall stuff and use it to create a new qemu bsd-user (after maybe augmenting the current syscalls.conf for missing data needed to do all of that).
- Add net support to loader.kboot
- Bring in bits of musl related to socket system calls, defines and structs -- contact me if interested
- Add https support to loader.kboot
- generalize protocol handlers in the boot loader so the above two tasks are easier.
- add FDT lua bindings to boot loader
- add pci lua bindings to boot loader
- export pci complex
- Have ways to look at vendor/product and subvendor/subproduct as well as IF and other config vars
- add ACPI lua bindings to loader
- Add UEFI lua bindings to loader
- Add linker.hints lua bindings to loader?
- Add auto load based on pnp using LUA script maybe?
- hack ofwdump to produce dts output
- or hack our in-tree dtc compiler to grok the ioctl interface of /dev/openfirm
- or hack together a read-only interface that can read the data as a dtb (eg /dev/openfirm.dtb)
- Complete files.x86 to have all the common i386/amd64 stuff that only runs there and nowhere else.
- Add vmm(4) support to QEMU
- nvmecontrol ns needs to be documented in the manual
- nvme kernel interface that's linux compatible
- add new nvme 2.0 logpages to to nvmecontrol
- and nvme-cli compatible command line options to nvmecontrol
- Need an effective 'build on install' method to allow pkg for kernel modules
- Need a way to build for a specific release for things like kernel modules
- ZFS features supported by the boot loader: Integrate that with the zpool upgrade stuff to add a 'sanity check' to make sure we can support the upgrade with the installed boot blocks. This needs a lot of work.
- Need help with a github landing script
- Need help with phabricator landing script
- Need help with src parts of bugzilla landing script
- Rework geli to only allocate 64 or 128k chunks of memory to deal with ZFS choosing 138k as the ideal size to use. This would eliminate issues there.
- Create a framework to have 'allocation free' I/O stack. In this scheme, all the memory for the I/O is allocated at the top of the stack, rather than a little bit at each layer. This will make things more robust against deadlock in low memory situations.
- Enhance the boot loader to allow loading the user to ask for a module unconditionally, but only load it if it isn't in the kernel.
- Enhance the boot loader to use the devinfo/devmatch/linker.hints information with PCI. We already have it for FDT.
- Enhance the boot loader to automatically load the .ko we need for the root filesystem.
- Enhance devinfo to produce libxo output.
Enhance /sys/ emulation for programs witten for Linux that expect this information. This is an infinite project
- gstat with autoscale mode for bandwidth. So rather than in kBps, we have xBps and report 4 sig figs: 1.234M 12.34G 123.4k etc (in progress)
- Make COMPAT_FREEBSDx loadable (all x != 32, which can't be made loadable)
- Optionally autoload system calls that are in freebsd-compatX.ko. (X != 32). Though having it autoload for compat_linux or compat_freebsd32 would be cool too, just a different project.
- libify devmatch and integrate directly into devd.
- Fix bug with usb not reporting enough information for devmatch to work.
- Have a way to print / interpret all the ACPI tables from the boot loader
- Have the boot loader compile in ACPICA and use it for things like serial console.
- firmware(9) now supports 'raw' files. We have a number of .ko packaging of firmware in the tree. Going through as many as possible to convert them to raw files will help reduce the bloat. (idea mentioned by Kyle Evans on discord)
- Add a 'delay' and 'fail-read-only' features to CAM's I/O scheduler to help simulate failures of NVMe drives and disks.
- Implement a 'quirks' system to CAM for new asc/ascq pairs. Right now we do different actions when an I/O fails with different codes. Many are 'place holder' that we've made our best guess on, but don't know for sure are right. Having a quirk that can be set from the boot loader would allow one to boot a system that has drives that are failing with the 'placeholder' errors enough to repair it.
- Implement ASPM for power state management (including callbacks for retraining, etc ala Linux).
- Implement a good syntax / command for my 'masq' system that lets newbus map the actual PNP-info to something else. This allows new devices to pretend to be old devices so old system drivers work (or have a chance of working) on them.
- USB Passthru in Bhyve