-*- Mode: Outline -*- Before working on anything in this file, it's very important that you make contact with the core Hurd developers. Things herein might be slightly out of date or otherwise not easy to understand at first glance. So write to first. 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. * 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 ! * Use hostid in /etc/rc and mention it in installation instructions, when suitable sh-utils is released. * "user-friendly" naming scheme for /dev * Fix emacs/src/unexelf.c to deal with occasional lack of mmap ! * Currently libshouldbeinlibc (idvec, etc) and password.defs and login all think there is one user per-uid, and that ain't necessarily so. Needs fixed. ! * Libraries ** general: *** implement all the pathconf things from Posix.1 right. *** implement an soversion and symbol-versioning scheme similar to libc's. ** 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: *** (once vm_remap exists) implement mremap *** when a session leader _exits, it should SIGHUP, TIOCDRAIN, and revoke. !!! [it is still under discussion exactly where to address this, so don't do it in libc yet] *** convert to use libio (note exec needs conversion too) !!! *** Version of tmpfile that takes a directory *** Hurd versions of tmpfile that don't create transient files ! *** flink *** make sure profiling works !! *** add chflags flags to appropriate header(s) *** declare reboot() somewhere. *** extra commas in enums in socket.h and errnos.h. *** many functions that are syscalls in unix can potentially leak send rights if a signal handler longjmp's out past them. They should probably all be using HURD_CRITICAL_SECTION to avoid this. !! ** items relocated from libc/hurd/STATUS: *** We are not sure about possible races between setpgrp (A, pgrp) from process B vs process A receiving proc_newids. *** does sigaltstack/sigstack really work? *** hurdmalloc kludge *** think more about environment variable use viz security *** SIGINFO handler? *** itimers could be implemented better *** mmap cannot do MAP_NOEXTEND. *** unimplemented calls(?) acct getfh getfsstat madvise mincore mount msync recvmsg sendmsg sstk swapon unmount ** libports: *** Get rid of general `uninibited-rpcs' mechanism in libports, & just special-case interrupt_operation. ! ** 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. *** 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 *** file_chflags does not do proper permission checking (non-root isn't supposed to be able to change the low bits) *** 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 under the right names; change libc header to match current Posix. *** 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_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. ! *** diskfs_default_sync_interval should not be changed, keeping the option setting elsewhere, so that diskfs_append_std_options can elide the --sync=N option when it reflects the default setting. ** 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 *** Add option to print values times with a delay, and to print values relative to last printing. *** 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 ?? ** implement io_revoke for things in trans/ that need it. ! ** pflocal *** make peer addresses work? *** implement io_revoke on sockets ! ** term: *** find a way to reduce duplicate signals from repeated VINTR input *** when a session leader exits, netbsd SIGHUP's the terminal, drains output, and then revokes it. (See Posix.1-1996, p. 184, l. 64-68.) *** when a session leader sets the ospeed to 0, netbsd SIGHUP's the termianl. *** enforce session leader / controlling terminal uniqueness rules. ! (1: if a terminal is matched to a session, then another session can't make it its controlling terminal; 2: tcsetpgrp to a pgrp that's not in the right sessions must fail; 3: when a session leader exits, the association has to be torn down; bsd does SIGHUP + drain + revoke.) ** exec: *** convert stdio magic to use libio (when libc converts) !!! ** 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. ! *** 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. !! *** Implement io_revoke on sockets. ! ** nfs *** Implement async I/O !! *** Finish work to turn on paging. !! *** Implement TCP nfs. ! *** Implement V3 nfs. *** Implement nqnfs. ! *** Add Hurd-specific calls. !! *** errors in mount_root should get reflected more usefully to users. ! ** 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. *** implement io_revoke ! ** 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. !! *** If the target of a symlink is the empty string, stat seems to spin forever !!! ** crash *** Write core files. !! ** arla -- port it * Utilities ** 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. !! ** 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). !! ** 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? *** fetch and print task (and thread?) startup times. ** 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? ! ** Have the at-close actions on devices be more directly controllable by users by deleting the current at-close actions and replacing them with suitable device_set_status calls. ** Specify and implement vm_remap. ====== ??? [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 ??? * Next release: ** transparent FTP working