-*- Mode: Outline -*- Things to be done on Hurd, that we should probably not punt to a volunteer. Priorities: Check the end of this file for a task list referring to the next public release. Reported bugs generally have top priority. Non-reported and non-encountered bugs (things we know don't work, but don't really impede things) have lower priority. Things in this file are ranked with one to three !; the more, the higher priority. See `tasks', the exported task list. * RMS dictates: ** O_RDONLY==0 ** "user-friendly" naming scheme for /dev * Settle termcap v. curses with rms et. al. * Contents of =pending-changes. * Make sure all the pieces of the Hurd have adequate version stuff. ! * syslogify everything ! * fix root dependencies in filesystem, network, etc. ! * Profile things !! * Make for easier installation ! * Write coding standards suggestions for Hurd * Implement file_fetch_dir * Conform to coding standards (esp. CFLAGS setting) * Internationalization ! * Fix emacs/src/unexelf.c to deal with occasional lack of mmap ! * Libraries ** general: *** expunge special cthreads malloc finally !! *** implement all the pathconf things from Posix.1 right. ** libmom work: *** Hack interface definitions so that args are mom-ish *** Change libports and libpager to be mom-ish *** Change servers to be mom-ish ** libc: *** Version of tmpfile that takes a directory *** Hurd versions of tmpfile that don't create transient files ! *** flink *** make sure profiling works !! *** implement revoke once io_revoke is added. !! *** add chflags flags to appropriate header(s) *** declare reboot() somewhere. *** extra commas in enums in socket.h and errnos.h. ** libports: *** Get rid of general `uninibited-rpcs' mechanism in libports, & just special-case interrupt_operation. ! *** Drop wire parms to manage-operations; instead have a new-thread hook function. ! ** libstore: *** Add lock protocol for mutable stores. ** libfsserver/libnetfs: *** convert libnetfs to libfsserver ** libnetfs *** Support --readonly, --writable, and --update ! *** Implement dir_reparent. ** libpager: *** Put user-defined fns into a callback struct passed to pager_create. ! *** Make libpager paging interface able to read/write multiple pages at once. *** Check all users of pager-create.c to make sure they DTRT when it returns null. (requires changing libdiskfs to deal with null returns from diskfs_get_filemap). !! *** Remove pagers from portset if there are too many incoming requests to avoid forking too many threads. ! *** flush functions don't actually force pending delayed copies. (and in fact, they seem to block if a delayed copy is wired down) ! ** libshouldbeinlibc: *** Merge contents of libshouldbeinlibc that belong there into libc. Rename the rest to libhurdutil or somesuch. *** argp: find some way to flag certain long options as only matching exactly (add this as OPT_EXACT); use this on the built in option --program-name. *** Rewrite argp to do its own parsing. Preferably, split up libc's getopt into more primitive functions, which both argp and getopt can call. ** libdiskfs *** Add the short-circuited-but-not-builtin translator startup code from dir-lookup to fsys_getroot. Compare and match carefully these two routines and then share common code. !! *** Implement Posix O_SYNC, O_DSYNC, and O_RSYNC. *** Handle dead name notifications on execserver ports. ! *** Deal correctly with setting the translators on /servers/exec. *** Implement file_notice_changes. *** Implement async I/O. ! *** Think of a way to have when-to-sync-nodes be more flexible so it can be done right for each format. *** Check when-to-sync-nodes carefully against BSD 4.4 ufs implementation. ! *** Provide for MNT_SYNCHRONOUS, MNT_NOEXEC, MNT_NOSUID, MNT_NODEV, etc. ! *** Implement io_restrict_auth correctly. ! *** Use off_t correctly. !! *** Add a consistent message printing facility for filesystems to use (syslog, but takes special care when the root file system?). !! *** Some of diskfs_readonly_changed in ufs/ext2fs should be in generic routines. ! ** libfshelp *** Put functions here to deal with directory and file change notifications !!! *** Translator startup should provide a more useful stdin/stdout than nothing ! ** libtrivfs *** Allow for read/write/exec to be passed down. *** Implement file_exec when appropriate. !! *** Provide for the visible owner, etc., to be held in command-line args instead of the underlying node, when it's important. !! ** libps *** Whizzier columnation (autosizing?) *** Make getters more robust. * Servers ** write default pager !! ** Implement goaway in all the servers that don't already have it. !! ** (init) sleep on spinning gettys ! ** Add calls to various servers to return interesting statistical information. ** Test new-fifo & make it fifo. ! ** Login/utmp? ** fifos are flaky. ?? Details ?? ** pflocal: make peer addresses work? ** term: find a way to reduce duplicate signals from repeated VINTR input ** magic: `ls -ld /dev/fd' and `test -d /dev/fd' should work. ** proc: *** Add a version of proc_wait usable by non-parent processes, and use it in gdb; maybe just a flag WNOREAP to proc_wait that doesn't reap and allows anyone to use it. !! *** Add proc_get_tty() [returns tty opened with no flags], so that ps can be non-suid. ! *** Remove hostname/hostid functions *** add timeouts to all the msg_* calls proc makes. ! *** proc leaks dead names massively. ** pfinet *** Allow multiple pfinets to arp on the same ethernet interface for different IP addresses. !! *** Diagnose why shutdown doesn't close TCP channels properly or reliably. ! *** select for read on a UDP socket seems never to return. !!! *** Undefined functions at the end of pfinet/io-ops.c. !! ** nfs *** Implement async I/O !! *** Finish work to turn on paging. !! *** Finish excl arg work in link and rename. !! *** Implement TCP nfs. ! *** Implement V3 nfs. *** Implement nqnfs. ! *** Add Hurd-specific calls. !! *** emacs M-x server doesn't work if ~ is on nfs. !!! *** errors in mount_root should get reflected more usefully to users. ! *** nfs/libnetfs validates file_set_size based upon current node mode rather than O_WRITE. !!! ** storeio: *** Make a server (/servers/storeio?) to share multiple storeio nodes *** Get rid of global DEVICE variable and use the trivfs control hack *** Serverify, ala new-fifo. ** ufs: *** Implement clustering, a la 4.4-lite sys/kern/vfs_cluster.c. *** Make file_get_storage_info work for files with indirect blocks. !! *** Optimizations: pager.c/inode.c/libdiskfs count pager refs separately and then save mappings in _diskfs_rdwr_internal and dir.c ! *** Problems with DT_* hack: ! **** Fix multiple-links DT_* bug. **** Deal with change of type which should update directory. **** Type is also wrong for translated nodes... *** Roland sez: ENOSPC detection flaky in ufs. Try write of >page, non-page-multiple, when free space allows write size but not round_page (write size). ** ext2fs *** Try to write directories with 512-byte record boundaries. !! *** Maybe file_pager_write_page should be able to accurately reproduce holes *** Add byte-swapping. !! ** crash *** Write core files. !! * Utilities ** Write a real mount program. !! ** Make id, et. al. work with no/multiple uids. !!! ** Make things work with the `nobody' mode bits: chmod, ls, ... ! ** Make things work with filesystem extensions (author, etc.): ls!!! ** Make things work better with translators, e.g., tar... !!! ** Fix bash to turn on interrupts around syscalls more generally, especially chdir. !! ** Make su work. ! ** talk doesn't work !! ** login: Make --retry work correctly when invoked via a suid shell script by other than root (it doesn't now if the script specifies --retry="$0" because the exec server will use /dev/fd/N for name, and child_lookup() doesn't supply more than fds 0-2). !! ** Serverboot doesn't deal with symlinks properly. !!! ** Grub doesn't deal with symlinks properly. !!! ** Make w use utmp's tty instead of the process's ** fsck: *** fsck should use fsys_get_options returned device instead of /etc/fstab !! ** settrans: *** needs an option to make the active go away without using goaway. ! *** -P should print the pid of the translator before pausing ! ** ps: *** ps should timeout quickly (one second?) on non-responsive message ports. ! *** help displays for: stat letters, format specs. *** --match option? ** gdb: *** Add various mach convenience features (vminfo, &c). !! *** Be even more vigilant about noticing new threads. In particular: **** For mach-indep thread commands, before validating against internal thread list. !!! *** read core files !! *** Gdb doesn't work right if it doesn't have permission to frob the inferior process (for instance, if it's a set[ug]id program), but doesn't give a meaningful error message. Try `break main' in /bin/login. ** nfsd *** Implement TCP nfs. ! *** Implement V3 nfs. ! *** Implement nqnfs. ! *** Add Hurd-specific calls. !! *** writes don't seem to work properly !!! *** Report statfs correctly. !! * Mach: ** Have some analogue of /dev/klog that syslogd can get kernel messages from (maybe there is already?); the boot file system, and other people deeming it too risk to attempt to contact syslogd can use it too? ! ** Add a startup timestamp to tasks, and have some way of fetching it. !! ====== ??? [I'm not sure of the preconditions for this; it usually seems to happen to new login shells (but not often enough to really get a handle on it). If the command is repeated, then it usually works correctly.] login> ps aux|head bash: /bin/head: (ipc/send) invalid msg-header Broken pipe [bash only seems to print error messages in this particular format if an execve fails] I've also had it happen in shells that have been around a while. -thomas I just saw it happen in make output; there the particular error happens only when execvp fails. -thomas ??? List for version 0.2 binary release * Have term do scancodes, at least kludgily. * nfsd? * recompile libraries after libc release * Change all copyright notices to say "GNU Hurd" instead of "This program".