| 1 |
-*- Mode: Outline -*- |
| 2 |
|
| 3 |
Before working on anything in this file, it's very important that you |
| 4 |
make contact with the core Hurd developers. Things herein might be |
| 5 |
slightly out of date or otherwise not easy to understand at first |
| 6 |
glance. So write to <bug-hurd@gnu.org> first. |
| 7 |
|
| 8 |
Priorities: |
| 9 |
Check the end of this file for a task list referring to the next |
| 10 |
public release. |
| 11 |
|
| 12 |
Reported bugs generally have top priority. |
| 13 |
Non-reported and non-encountered bugs (things we know don't work, |
| 14 |
but don't really impede things) have lower priority. |
| 15 |
Things in this file are ranked with one to three !; the more, the |
| 16 |
higher priority. |
| 17 |
|
| 18 |
See `tasks', the exported task list. |
| 19 |
|
| 20 |
* Contents of =pending-changes. |
| 21 |
* Make sure all the pieces of the Hurd have adequate version stuff. ! |
| 22 |
* syslogify everything ! |
| 23 |
* fix root dependencies in filesystem, network, etc. ! |
| 24 |
* Profile things !! |
| 25 |
* Write coding standards suggestions for Hurd |
| 26 |
* Implement file_fetch_dir |
| 27 |
* Conform to coding standards (esp. CFLAGS setting) |
| 28 |
* Internationalization ! |
| 29 |
* Use hostid in /etc/rc and mention it in installation instructions, |
| 30 |
when suitable sh-utils is released. |
| 31 |
* "user-friendly" naming scheme for /dev |
| 32 |
|
| 33 |
* Fix emacs/src/unexelf.c to deal with occasional lack of mmap ! |
| 34 |
|
| 35 |
* Currently libshouldbeinlibc (idvec, etc) and password.defs and login |
| 36 |
all think there is one user per-uid, and that ain't necessarily so. |
| 37 |
Needs fixed. ! |
| 38 |
|
| 39 |
* Libraries |
| 40 |
|
| 41 |
** general: |
| 42 |
*** implement all the pathconf things from Posix.1 right. |
| 43 |
*** implement an soversion and symbol-versioning scheme similar to libc's. |
| 44 |
|
| 45 |
** libc: |
| 46 |
*** (once vm_remap exists) implement mremap |
| 47 |
*** when a session leader _exits, it should SIGHUP, TIOCDRAIN, and revoke. !!! |
| 48 |
[it is still under discussion exactly where to address this, |
| 49 |
so don't do it in libc yet] |
| 50 |
*** Version of tmpfile that takes a directory |
| 51 |
*** Hurd versions of tmpfile that don't create transient files ! |
| 52 |
*** flink |
| 53 |
*** make sure profiling works !! |
| 54 |
*** many functions that are syscalls in unix can potentially leak send rights |
| 55 |
if a signal handler longjmp's out past them. They should probably all |
| 56 |
be using HURD_CRITICAL_SECTION to avoid this. !! |
| 57 |
** items relocated from libc/hurd/STATUS: |
| 58 |
*** We are not sure about possible races between setpgrp (A, pgrp) from |
| 59 |
process B vs process A receiving proc_newids. |
| 60 |
*** does sigaltstack/sigstack really work? -- NO |
| 61 |
*** hurdmalloc kludge |
| 62 |
*** think more about environment variable use viz security |
| 63 |
*** SIGINFO handler? |
| 64 |
*** itimers could be implemented better |
| 65 |
*** mmap cannot do MAP_NOEXTEND. |
| 66 |
*** unimplemented calls(?) |
| 67 |
acct |
| 68 |
getfh |
| 69 |
getfsstat |
| 70 |
madvise |
| 71 |
mincore |
| 72 |
mount |
| 73 |
msync |
| 74 |
sstk |
| 75 |
swapon |
| 76 |
unmount |
| 77 |
|
| 78 |
|
| 79 |
** libports: |
| 80 |
*** Get rid of general `uninibited-rpcs' mechanism in libports, & just |
| 81 |
special-case interrupt_operation. ! |
| 82 |
|
| 83 |
** libstore: |
| 84 |
*** Add lock protocol for mutable stores. |
| 85 |
*** Creating/opening stores with STORE_INACTIVE should work (and then the hack |
| 86 |
in storeio/dev.c should be removed). |
| 87 |
|
| 88 |
** libfsserver/libnetfs: |
| 89 |
*** convert libnetfs to libfsserver |
| 90 |
|
| 91 |
** libnetfs |
| 92 |
*** Support --readonly, --writable, and --update ! |
| 93 |
*** Implement dir_reparent. |
| 94 |
|
| 95 |
** libpager: |
| 96 |
*** Put user-defined fns into a callback struct passed to pager_create. ! |
| 97 |
*** Make libpager paging interface able to read/write multiple pages at once. |
| 98 |
*** Remove pagers from portset if there are too many incoming requests to |
| 99 |
avoid forking too many threads. ! |
| 100 |
*** flush functions don't actually force pending delayed copies. (and in |
| 101 |
fact, they seem to block if a delayed copy is wired down) ! |
| 102 |
|
| 103 |
** libshouldbeinlibc: |
| 104 |
*** Merge contents of libshouldbeinlibc that belong there into libc. |
| 105 |
Rename the rest to libhurdutil or somesuch. |
| 106 |
|
| 107 |
** libdiskfs |
| 108 |
*** file_chflags does not do proper permission checking (non-root isn't |
| 109 |
supposed to be able to change the low bits) |
| 110 |
*** Add the short-circuited-but-not-builtin translator startup code from |
| 111 |
dir-lookup to fsys_getroot. Compare and match carefully these two |
| 112 |
routines and then share common code. |
| 113 |
*** Implement Posix O_SYNC, O_DSYNC, and O_RSYNC under the right |
| 114 |
names; change libc header to match current Posix. |
| 115 |
*** Handle dead name notifications on execserver ports. ! |
| 116 |
*** Deal correctly with setting the translators on /servers/exec. |
| 117 |
*** Implement file_notice_changes. |
| 118 |
*** Implement async I/O. ! |
| 119 |
*** Think of a way to have when-to-sync-nodes be more flexible so it can |
| 120 |
be done right for each format. |
| 121 |
*** Check when-to-sync-nodes carefully against BSD 4.4 ufs implementation. ! |
| 122 |
*** Provide for MNT_NODEV, etc. ! |
| 123 |
*** Implement io_restrict_auth correctly. ! |
| 124 |
*** Use off_t correctly. !! |
| 125 |
*** Add a consistent message printing facility for filesystems to use |
| 126 |
(syslog, but takes special care when the root file system?). !! |
| 127 |
*** Some of diskfs_readonly_changed in ufs/ext2fs should be in generic |
| 128 |
routines. ! |
| 129 |
*** diskfs_default_sync_interval should not be changed, keeping the option |
| 130 |
setting elsewhere, so that diskfs_append_std_options can elide the |
| 131 |
--sync=N option when it reflects the default setting. |
| 132 |
|
| 133 |
** libfshelp |
| 134 |
*** Put functions here to deal with directory and file change notifications !!! |
| 135 |
*** Translator startup should provide a more useful stdin/stdout than nothing ! |
| 136 |
|
| 137 |
** libtrivfs |
| 138 |
*** Allow for read/write/exec to be passed down. |
| 139 |
*** Implement file_exec when appropriate. !! |
| 140 |
*** Provide for the visible owner, etc., to be held in command-line args |
| 141 |
instead of the underlying node, when it's important. !! |
| 142 |
|
| 143 |
** libps |
| 144 |
*** Add option to print values times with a delay, |
| 145 |
and to print values relative to last printing. |
| 146 |
*** Whizzier columnation (autosizing?) |
| 147 |
*** Make getters more robust. |
| 148 |
|
| 149 |
* Servers |
| 150 |
** finish default pager in defpager !! |
| 151 |
** Implement goaway in all the servers that don't already have it. !! |
| 152 |
** (init) sleep on spinning gettys ! |
| 153 |
** Add calls to various servers to return interesting statistical information. |
| 154 |
** Test new-fifo & make it fifo. ! |
| 155 |
** Login/utmp? |
| 156 |
** fifos are flaky. ?? Details ?? |
| 157 |
** implement io_revoke for things in trans/ that need it. ! |
| 158 |
|
| 159 |
** pflocal |
| 160 |
*** make peer addresses work? |
| 161 |
*** implement io_revoke on sockets ! |
| 162 |
|
| 163 |
** term: |
| 164 |
*** find a way to reduce duplicate signals from repeated VINTR input |
| 165 |
*** when a session leader exits, netbsd SIGHUP's the terminal, drains output, |
| 166 |
and then revokes it. (See Posix.1-1996, p. 184, l. 64-68.) |
| 167 |
*** when a session leader sets the ospeed to 0, netbsd SIGHUP's the termianl. |
| 168 |
*** enforce session leader / controlling terminal uniqueness rules. ! |
| 169 |
(1: if a terminal is matched to a session, then another session |
| 170 |
can't make it its controlling terminal; |
| 171 |
2: tcsetpgrp to a pgrp that's not in the right sessions must |
| 172 |
fail; |
| 173 |
3: when a session leader exits, the association has to be torn |
| 174 |
down; bsd does SIGHUP + drain + revoke.) |
| 175 |
|
| 176 |
** exec: |
| 177 |
*** either resurrect or excise BFD exec server |
| 178 |
(needs stdio magic converted to use libio when libc converts) |
| 179 |
|
| 180 |
** proc: |
| 181 |
*** Add a version of proc_wait usable by non-parent processes, and use it in |
| 182 |
gdb; maybe just a flag WNOREAP to proc_wait that doesn't reap and allows |
| 183 |
anyone to use it. !! |
| 184 |
*** Add proc_get_tty() [returns tty opened with no flags], so that ps can be |
| 185 |
non-suid. ! |
| 186 |
*** add timeouts to all the msg_* calls proc makes. ! |
| 187 |
|
| 188 |
** pfinet |
| 189 |
*** Allow multiple pfinets to arp on the same ethernet interface for different |
| 190 |
IP addresses. !! |
| 191 |
*** Diagnose why shutdown doesn't close TCP channels properly or reliably. ! |
| 192 |
*** select for read on a UDP socket seems never to return. !!! |
| 193 |
*** Undefined functions at the end of pfinet/io-ops.c. !! |
| 194 |
*** Implement io_revoke on sockets. ! |
| 195 |
|
| 196 |
** nfs |
| 197 |
*** Implement async I/O !! |
| 198 |
*** Finish work to turn on paging. !! |
| 199 |
*** Implement TCP nfs. ! |
| 200 |
*** Implement V3 nfs. |
| 201 |
*** Implement nqnfs. ! |
| 202 |
*** Add Hurd-specific calls. !! |
| 203 |
*** errors in mount_root should get reflected more usefully to users. ! |
| 204 |
|
| 205 |
** storeio: |
| 206 |
*** Make a server (/servers/storeio?) to share multiple storeio nodes |
| 207 |
*** Serverify, ala new-fifo. |
| 208 |
*** implement io_revoke ! |
| 209 |
|
| 210 |
** ufs: |
| 211 |
*** Implement clustering, a la 4.4-lite sys/kern/vfs_cluster.c. |
| 212 |
*** Make file_get_storage_info work for files with indirect blocks. !! |
| 213 |
*** Optimizations: |
| 214 |
pager.c/inode.c/libdiskfs count pager refs separately and then save |
| 215 |
mappings in _diskfs_rdwr_internal and dir.c ! |
| 216 |
*** Problems with DT_* hack: ! |
| 217 |
**** Fix multiple-links DT_* bug. |
| 218 |
**** Deal with change of type which should update directory. |
| 219 |
**** Type is also wrong for translated nodes... |
| 220 |
*** Roland sez: ENOSPC detection flaky in ufs. Try write of >page, |
| 221 |
non-page-multiple, when free space allows write size but not |
| 222 |
round_page (write size). |
| 223 |
|
| 224 |
** ext2fs |
| 225 |
*** Try to write directories with 512-byte record boundaries. !! |
| 226 |
*** Maybe file_pager_write_page should be able to accurately reproduce holes |
| 227 |
*** Add byte-swapping. !! |
| 228 |
*** If the target of a symlink is the empty string, stat seems to spin forever !!! |
| 229 |
|
| 230 |
** crash |
| 231 |
*** Write core files. !! |
| 232 |
|
| 233 |
** arla -- port it |
| 234 |
|
| 235 |
|
| 236 |
* Utilities |
| 237 |
** Make id, et. al. work with no/multiple uids. !!! |
| 238 |
** Make things work with the `nobody' mode bits: chmod, ls, ... ! |
| 239 |
** Make things work with filesystem extensions (author, etc.): ls!!! |
| 240 |
** Make things work better with translators, e.g., tar... !!! |
| 241 |
** Fix bash to turn on interrupts around syscalls more generally, |
| 242 |
especially chdir. !! |
| 243 |
** talk doesn't work !! |
| 244 |
** login: Make --retry work correctly when invoked via a suid shell |
| 245 |
script by other than root (it doesn't now if the script specifies |
| 246 |
--retry="$0" because the exec server will use /dev/fd/N for name, |
| 247 |
and child_lookup() doesn't supply more than fds 0-2). !! |
| 248 |
** Make w use utmp's tty instead of the process's |
| 249 |
|
| 250 |
** fsck: |
| 251 |
*** fsck should use fsys_get_options returned device instead of /etc/fstab !! |
| 252 |
|
| 253 |
** settrans: |
| 254 |
*** needs an option to make the active go away without using goaway. ! |
| 255 |
|
| 256 |
** ps: |
| 257 |
*** ps should timeout quickly (one second?) on non-responsive message ports. ! |
| 258 |
*** help displays for: stat letters, format specs. |
| 259 |
*** --match option? |
| 260 |
*** fetch and print task (and thread?) startup times. |
| 261 |
|
| 262 |
** gdb: |
| 263 |
*** Add various mach convenience features (vminfo, &c). !! |
| 264 |
*** Be even more vigilant about noticing new threads. In particular: |
| 265 |
**** For mach-indep thread commands, before validating against |
| 266 |
internal thread list. !!! |
| 267 |
*** read core files !! |
| 268 |
*** Gdb doesn't work right if it doesn't have permission to frob the |
| 269 |
inferior process (for instance, if it's a set[ug]id program), but |
| 270 |
doesn't give a meaningful error message. Try `break main' in /bin/login. |
| 271 |
|
| 272 |
** nfsd |
| 273 |
*** Implement TCP nfs. ! |
| 274 |
*** Implement V3 nfs. ! |
| 275 |
*** Implement nqnfs. ! |
| 276 |
*** Add Hurd-specific calls. !! |
| 277 |
*** writes don't seem to work properly !!! |
| 278 |
*** Report statfs correctly. !! |
| 279 |
|
| 280 |
* Mach: |
| 281 |
** Have the at-close actions on devices be more directly controllable |
| 282 |
by users by deleting the current at-close actions and replacing |
| 283 |
them with suitable device_set_status calls. |
| 284 |
** Specify and implement vm_remap. |
| 285 |
|
| 286 |
====== |
| 287 |
|
| 288 |
??? |
| 289 |
[I'm not sure of the preconditions for this; it usually seems to happen to |
| 290 |
new login shells (but not often enough to really get a handle on it). |
| 291 |
If the command is repeated, then it usually works correctly.] |
| 292 |
login> ps aux|head |
| 293 |
bash: /bin/head: (ipc/send) invalid msg-header |
| 294 |
Broken pipe |
| 295 |
[bash only seems to print error messages in this particular format if an |
| 296 |
execve fails] |
| 297 |
|
| 298 |
I've also had it happen in shells that have been around a while. -thomas |
| 299 |
|
| 300 |
I just saw it happen in make output; there the particular error |
| 301 |
happens only when execvp fails. -thomas |
| 302 |
??? |
| 303 |
|
| 304 |
* Next release: |