-*- 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) * Fix emacs/src/unexelf.c to deal with occasional lack of mmap ! * Libraries ** general: *** expunge special cthreads malloc finally !! ** 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. !! ** 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 ! ** 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. !! *** 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. ! *** fsys_get_options should return the disk name. *** Add `author_tracks_uid' flag to struct node, and use it in places that modify author/uid. Initialized to 0. !! *** Move file_getfh and fsys_getfile here (from ufs). !!! *** Use idvecs. !!! ** libfshelp *** Put functions here to deal with directory and file change notifications !!! *** Translator startup should provide a more useful stdin/stdout than nothing ! *** Add functions to do permission checking and change libdiskfs et. al. to use them. !!! ** 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? ** 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. ! ** 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. !!! ** 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 better with translators, e.g., tar, ls... !!! ** 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. !!! ** fsck: *** fsck should use fsys_get_options returned device instead of /etc/fstab !! *** If fstab mentions a bad type, fsck gets as assert failure !! ** 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. *** Add head/tail options; --match? ** 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 !! ** nfsd *** Implement TCP nfs. ! *** Implement V3 nfs. ! *** Implement nqnfs. ! *** Add Hurd-specific calls. !! *** writes don't seem to work properly !!! * 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] ??? Find out why ^G in emacs, esp at prompts, often results in a long (~2s) pause; if you hit it several times, the abort-and-dump-core ^G catcher usually gets activated. List for version 0.2 binary release * Install patch from hag for disk device in mach * Try and get new mach4 from Shantanu. * Have term do scancodes, at least kludgily. * nfsd? * released libc * Arrange GCC not to install assert.h on GNU. * recompile libraries after libc release * Change all copyright notices to say "GNU Hurd" instead of "This program".