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: |