diff options
Diffstat (limited to 'TODO')
-rw-r--r-- | TODO | 327 |
1 files changed, 327 insertions, 0 deletions
@@ -0,0 +1,327 @@ +-*- 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 <bug-hurd@gnu.org> 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 ?? +** magic: `ls -ld /dev/fd' and `test -d /dev/fd' should work. +** 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 |