OpenSSL update
[ikiwiki.git] / docs / developer / ProjectsPage.mdwn
index 91ae343..b9c3c16 100644 (file)
@@ -65,7 +65,7 @@ Projects that can be clearly used for Google Code-In are marked with their categ
 * [http://bulk.fefe.de/scalability/](http://bulk.fefe.de/scalability/) 
 * [http://bulk.fefe.de/lk2006/talk.pdf](http://bulk.fefe.de/lk2006/talk.pdf)
 
-### Clean our code to make it [style(9)](http://leaf.dragonflybsd.org/cgi/web-man?command#style&sectionANY) compatible.  (GCI:Code)
+### Clean our code to make it [style(9)](http://leaf.dragonflybsd.org/cgi/web-man?command=style&section=ANY#style&sectionANY) compatible.  (GCI:Code)
 * Compile and test your changes.
 * Verify that the checksum (sha(1)) of the unmodified object matches the checksum of the cleaned object.  Check also with strip(1)+sha(1)  
 
@@ -87,8 +87,8 @@ Projects that can be clearly used for Google Code-In are marked with their categ
 * Network, Disk
 
 ### SMART capabilities
-* Add to natacontrol (see NetBSD's atactl?)
 * Add to camcontrol
+* Add to natacontrol (see NetBSD's atactl?)
 
 ### Disk scheduling rc scripts (GCI:Code)
 * Create a rc script to manage the disk/io scheduling system
@@ -96,14 +96,15 @@ Projects that can be clearly used for Google Code-In are marked with their categ
 * Per-device and device class or similar defaults should be definable in rc.conf also
 * The bulk of this functionality could be implemented in a resurrected "dschedctl" utility and exposed through the rc interface using just a thin wrapper, allowing hotplug scripts and etc. an easier option to use the same facilities.
 
-### Add usage() to vkernels (GCI:Code)
-* Most userspace applications have a (traditionally) usage() routine which prints helpful information when passed -h or -? or any unknown command line argument or incorrect syntax.
-* Add a usage() to the vkernel's argument parsing.
-
 ### libHAMMER 
 * HAMMER has the capability to expose very rich information to userland through ioctl's.
 * Currently the hammer(8) utility makes use of this information in an ad-hoc manner.
 * Port this core functionality into a public libhammer library so that other base and third party utilities may take advantage of it.
+* See commit: cb7575e6a89409a2041a37fcfc22ce9e41297ab8 -- libHAMMER already exists, port functionality into it!
+
+### Clean up crypt(3) consumers
+* crypt(3) can legitimately return NULL on error, but many consumers do not check for this, instead passing the return directly to str[n]cmp. Fix these cases.
+* Fix these cases in pkgsrc as well.
 
 ## Kernel projects 
 
@@ -138,6 +139,18 @@ Projects that can be clearly used for Google Code-In are marked with their categ
 * A pluggable kernel I/O scheduler already exists
 * Implement additional disk scheduling policies
 
+### Implement boot cache
+* Effectively a smart readahead.
+* Store the pattern of incoming read requests of the boot disk. (Likely into an array structure for better linear readback, We mmap() the whole thing into RAM on boot.)
+* Sort pattern into a playback list. (Burstsort or a simple quick sort to get things going?)
+* Provide feedback of boot cache playback list hit rate for better adaptiveness.
+
+### Improve kernel boot speed
+* Research source of delays in boot process, keyboard init, scsi?
+* Better thread some hardware init, for example USB?
+* Perhaps look to see how Linux can boot in one second, better pci scan code?
+* "Some kernel work made it possible to do asynchronous initialization of some subsystems. For example, the modified kernel starts the Advanced Host Controller Interface (AHCI) initialization, to handle storage, at the same time as the Universal Host Controller Interface (UHCI), in order to handle USB" - http://lwn.net/Articles/299483/
+
 ### Modify firmware framework 
 * We currently use the firmware(9) FreeBSD also uses
 * It would be more appropriate to avoid future problems with redistribution problems, etc, to adapt the wifi firmware stuff to use the firmware(9) we used to have before, which was able to load firmware files from userland (/etc/firmware).
@@ -169,8 +182,7 @@ Projects that can be clearly used for Google Code-In are marked with their categ
 
 ### Remove zalloc
 * zalloc is a deprecated kernel interface and all current consumers can be ported to objcache, with varying levels of difficulty.
-* Easier: kqueue, nfs nodes, ufs dirhash, aio, crypto, vm_map_entry
-* Harder: zlib, pv entries
+* zlib, pv entries
 * Once all consumers are ported, zalloc can be removed.
 
 ### Document all sysctl's
@@ -212,5 +224,28 @@ Projects that can be clearly used for Google Code-In are marked with their categ
 ### vnode dumps
 * It would be beneficial to be able to have crash dumps written to an ordinary file in configurations where swap is not configured.
 
+### Kernel allocator feature enhancements
+* Enhance objcache in a manner that will allow the initialization to specify allocation functions which will allocate and free entire slabs of memory, not just single objects.
+* Rework the kmalloc allocator to sit on top of objcache (there are various dependencies to making this work).
+* Create or sort out a metric for vnode/other cache object cycling rate that can indicate realistic memory pressure.
+* Clear out free objcache slabs under memory pressure.
+* Add reclaim functionality to objcache, such that it may ask consumers to free objects back into it under memory pressure.
+
+### Tear out serializers
+* Serializers could be _carefully_ replaced with MTX locks
+
+### Tear out condvars
+* Conditional vars -- condvar(9), could be replaced with other locking primitives and our tsleep/wakeup interlock.
+
+### Make karc4random in libkern per-cpu
+* Verify that it is possible and safe to do this, what care would need to be taken, especially with respect to the random seeding?
+* Pull out locks around calls to karc4rand*
+
+## Live images enhancement
+
+The live images are pretty rough to use currently. The following minimum enhancements should be added:
+
+1. Let the user choose the keyboard layout at startup, do not assume QWERTY
+2. Configure network interfaces automatically, using DHCP
 
 For more theoretical projects and project concepts see [[ResearchProjects|/docs/developer/ResearchProjectsPage]]