Fix spelling errors.
[oweals/busybox.git] / TODO
1 TODO list for busybox in no particular order. Just because something
2 is listed here doesn't mean that it is going to be added to busybox,
3 or that doing so is even a good idea. It just means that I _might_ get
4 around to it some time. If you have any good ideas, please let me know.
5
6 * login/sulogin/passwd/getty/etc are part of tinylogin, and so are not
7     needed or wanted in busybox (or else I'd have to link to libcrypt).
8
9 * Networking apps are probably going to be split out some time soon into a
10     separate package (named perhaps netkit-tiny?).  This would remove the
11     following items from BusyBox: hostid, hostname, nc, nslookup, telnet, 
12     and ping.  nfs mounting and syslogd (when it supports network logging)
13     will remain in BusyBox.
14
15  -Erik
16
17 -----------
18
19 Bugs that need fixing before the 0.44 release goes out the door:
20
21  - mkfs.minix rev 1.7 completely broke the parser.  Fix it.
22  - 'grep foo$ file' doesn't work
23  - 'grep *foo file' segfaults
24  - ps dirent race bug (need to stat the file before attempting chdir)
25  - The following commands segfault:
26         chmod -R
27         chown -R
28         chgrp -R
29         cp -a -a
30         ln -s -s
31         rm -f
32         rm -f -
33         rm -- -
34         touch -c
35   - I believe that swaponoff may also be also broken (check it).
36   - It used to be that BusyBox tar would happily overwrite existing files on
37       an extraction.  However, as of 0.42, BusyBox tar simply dies as soon as an 
38       existing file is found.
39   - Make 'mount -a' work even when /proc isn't mounted (ugly bug).
40   - Make 'ln -s /tmp/file .' work the way GNU ln does (i.e. makes a link to 
41     /tmp/file in the current directory, rather then trying and failing to create
42     a symlink named "." in the current working directory).
43   - implement 'ls -R'.
44   - "cp -a sourcedir/*" (note: no dest) - produces an odd error message about
45     the last file in the dir, rather than saying "missing destination file".
46   - "math" should also take input from stdin
47   - "more" doesn't accept " " to scroll by one page when BB_FEATURE_USE_TERMIOS
48     is not on.
49
50
51 -----------
52
53 * Make insmod actually work
54 * dnsdomainname
55 * traceroute/netstat
56 * rdate
57 * hwclock
58 * stty
59 * expr
60 * wget (or whatever I call it)
61 * tftp
62 * ftp
63 * group/commonize strings, remove dups (for i18n, l10n)
64
65
66 -----------------------
67
68 Running the following:
69
70     rm -f busybox && make LDFLAGS+=-nostdlib 2>&1 | \
71         sed -ne 's/.*undefined reference to `\(.*\)..*/\1/gp' | sort | uniq
72
73 reveals the list of all external (i.e. libc) things that BusyBox depends on.
74 It would be a very nice thing to reduce this list to an absolute minimum, and
75 then create a microLibc to provide these functions.  There is no good reason
76 for GNU libc to be so big.  I'm sure it can be a lot better.
77
78 (BTW, this is more informative if BB_FEATURE_NFSMOUNT is turned off...)
79
80 Most wanted list:
81
82     [andersen@slag busybox]$ grep -l getgroups *.[ch]
83     test.c
84
85 Policy violation.  getgroups uses libc nss, which is unlikely
86 to be present in an embedded system.
87
88 To be replaced with a busybox local glob routine:
89
90     [andersen@slag busybox]$ grep -l glob *.[ch]
91     gunzip.c
92     gzip.c
93     sh.c
94     tar.c
95     telnet.c
96
97 Can check_wildcard_match() from utility.c do this job?
98
99
100 -----------------------
101
102 Compile with debugging on, run 'nm --size-sort ./busybox'
103 and then start with the biggest things and make them smaller...
104
105 -----------------------
106
107 busybox.defs.h is too big and hard to follow.
108
109 Perhaps I need to add a better build system (like the Linux kernel?)
110
111 -----------------------
112
113 Feature request:
114
115 /bin/busybox --install -s    which makes all links to commands that it
116   can support (an optionnal -s should be used for symbolic links instead
117   of hard links).
118
119 -----------------------
120
121
122 > Have you ever thought of doig network logging in busybox syslogd ? It
123 > would quite make sense on embedded systems... :)
124
125 So far I had not considered it.  Basically, you wish to have
126 messages from the embedded box logged to a remote network
127 syslog box, right?  I can see that this would be useful.
128 I'll add this to the TODO list,
129
130
131 -----------------------
132
133
134  I think that the add_inode &c in utility.c needs to also stow the
135  st_dev field, and that du.c should NOT call `reset_inode_list'
136  because there can be hard links from inside one argv/ to inside
137  another argv/.  du.c probably ought to have an -x switch like GNU du
138  does also...
139
140
141 ------------------------------------------------------------------
142
143 An interesting email listing some apps that use /proc.  BusyBox
144 tries to avoid /proc as mush as is possible, so this stuff is
145 interesting (to me at least):
146
147
148 Date:   Fri, 25 Feb 2000 08:23:12 +0000 (GMT)
149 From: Riley Williams <rhw@MemAlpha.CX>
150 X-Sender: rhw@moo.cus.org.uk
151 To: almesber@lrc.di.epfl.ch
152 Cc: "Albert D. Cahalan" <acahalan@cs.uml.edu>,
153         Linux Kernel <linux-kernel@vger.rutgers.edu>
154 Subject: Re: What /proc should contain [was: /proc/driver/microcode]
155 In-Reply-To: <20000224165245.A29790@lrc.di.epfl.ch>
156 Message-ID: <Pine.LNX.4.21.0002250806220.8741-100000@moo.cus.org.uk>
157 Sender: owner-linux-kernel@vger.rutgers.edu
158 Precedence: bulk
159
160 Hi there.
161
162  >> Nope, most /proc access is does via programs written in C.
163
164  > That varies a lot from file to file. E.g. I haven't seen any
165  > programs that are specificly designed to read /proc/atm/* yet,
166  > and I know of only one (fuser) that reads /proc/mounts,
167  > extracting only partial information (just to pick two examples
168  > that I'm quite familiar with).
169
170 As a point of reference, here's a slightly tweaked analysis of the
171 programs on the system I'm reading your mail on. Basically, I ran the
172 following script...
173
174  Q> #!/bin/bash
175  Q> function use() {
176  Q>     for Z in $* ; do
177  Q>         strings $Z | grep /proc | sed "s=^=$Z ="
178  Q>     done
179  Q> }
180  Q> use /{,s}bin/* /usr/{,s}bin/* | sort -u | tee proc-usage
181
182 ...and then went through it removing comments and print format
183 strings. Replace /proc with /dev and you'd soon have an equivalent
184 list for that - although I can report that such is MUCH larger...
185
186 There are three programs therein that refer to /proc/mounts ...
187
188         /bin/mount
189         /bin/umount
190         /usr/bin/eject
191
192 ...and, as you stated, none that refer to /proc/atm on this system.
193 However, as this is a RedHat Linux 5.0 based system, that's not
194 necessarily an up to date reference thereto...
195
196 Here's the list anyway...
197
198 /bin/kill /proc/%d/cmdline
199 /bin/kill /proc/%d/stat
200
201 /bin/mount /proc/devices
202 /bin/mount /proc/filesystems
203 /bin/mount /proc/mounts
204
205 /bin/netstat /proc/net
206 /bin/netstat /proc/net/appletalk
207 /bin/netstat /proc/net/ax25
208 /bin/netstat /proc/net/ax25_route
209 /bin/netstat /proc/net/dev
210 /bin/netstat /proc/net/ip_masquerade
211 /bin/netstat /proc/net/ipx
212 /bin/netstat /proc/net/ipx_route
213 /bin/netstat /proc/net/netstat
214 /bin/netstat /proc/net/nr
215 /bin/netstat /proc/net/nr_neigh
216 /bin/netstat /proc/net/nr_nodes
217 /bin/netstat /proc/net/raw
218 /bin/netstat /proc/net/route
219 /bin/netstat /proc/net/rt_cache
220 /bin/netstat /proc/net/snmp
221 /bin/netstat /proc/net/tcp
222 /bin/netstat /proc/net/udp
223 /bin/netstat /proc/net/unix
224
225 /bin/umount /proc/devices
226 /bin/umount /proc/mounts
227
228 /sbin/arp /proc/net/appletalk
229 /sbin/arp /proc/net/arp
230 /sbin/arp /proc/net/ax25
231 /sbin/arp /proc/net/ipx
232 /sbin/arp /proc/net/nr
233 /sbin/arp /proc/net/unix
234
235 /sbin/cardctl /proc/devices
236
237 /sbin/cardmgr /proc/devices
238
239 /sbin/fdisk /proc/ide/%s/media
240 /sbin/fdisk /proc/scsi/scsi
241
242 /sbin/getty /proc/version
243
244 /sbin/ifconfig /proc/net
245 /sbin/ifconfig /proc/net/appletalk
246 /sbin/ifconfig /proc/net/ax25
247 /sbin/ifconfig /proc/net/dev
248 /sbin/ifconfig /proc/net/ipx
249 /sbin/ifconfig /proc/net/nr
250 /sbin/ifconfig /proc/net/unix
251
252 /sbin/ifup /proc/sys/kernel/modprobe
253
254 /sbin/ipchains /proc/net/ip_fwchains
255 /sbin/ipchains /proc/net/ip_fwnames
256 /sbin/ipchains /proc/net/ip_masquerade
257 /sbin/ipchains /proc/sys/net/ipv4/ip_forward
258
259 /sbin/ipmaddr /proc/net/dev_mcast
260 /sbin/ipmaddr /proc/net/igmp
261 /sbin/ipmaddr /proc/net/igmp6
262
263 /sbin/iptunnel /proc/net/dev
264
265 /sbin/killall5 /proc/%s/cmdline
266 /sbin/killall5 /proc/%s/exe
267 /sbin/killall5 /proc/%s/stat
268 /sbin/killall5 /proc/version
269
270 /sbin/klogd /proc/kmsg
271
272 /sbin/lsmod /proc/modules
273
274 /sbin/modprobe /proc/modules
275
276 /sbin/pidof /proc/%s/cmdline
277 /sbin/pidof /proc/%s/exe
278 /sbin/pidof /proc/%s/stat
279 /sbin/pidof /proc/version
280
281 /sbin/probe /proc/pci
282
283 /sbin/rarp /proc/net/ax25
284 /sbin/rarp /proc/net/nr
285 /sbin/rarp /proc/net/rarp
286
287 /sbin/rmmod /proc/modules
288
289 /sbin/rmmod.static /proc/modules
290
291 /sbin/route /proc/net/appletalk
292 /sbin/route /proc/net/ax25
293 /sbin/route /proc/net/ax25_route
294 /sbin/route /proc/net/ipx
295 /sbin/route /proc/net/ipx_route
296 /sbin/route /proc/net/nr
297 /sbin/route /proc/net/nr_neigh
298 /sbin/route /proc/net/nr_nodes
299 /sbin/route /proc/net/route
300 /sbin/route /proc/net/rt_cache
301 /sbin/route /proc/net/unix
302
303 /sbin/scsi_info /proc/scsi
304 /sbin/scsi_info /proc/scsi/%s
305 /sbin/scsi_info /proc/scsi/scsi
306
307 /sbin/slattach /proc/net/ax25
308 /sbin/slattach /proc/net/nr
309
310 /sbin/swapoff /proc/swaps
311
312 /sbin/swapon /proc/swaps
313
314 /sbin/uugetty /proc/version
315
316 /usr/bin/dig /proc/
317 /usr/bin/dig /proc/interrupts
318 /usr/bin/dig /proc/meminfo
319 /usr/bin/dig /proc/rtc
320 /usr/bin/dig /proc/self/status
321 /usr/bin/dig /proc/stat
322
323 /usr/bin/dnsquery /proc/
324 /usr/bin/dnsquery /proc/interrupts
325 /usr/bin/dnsquery /proc/meminfo
326 /usr/bin/dnsquery /proc/rtc
327 /usr/bin/dnsquery /proc/self/status
328 /usr/bin/dnsquery /proc/stat
329
330 /usr/bin/eject /proc/mounts
331
332 /usr/bin/emacs /proc/loadavg
333
334 /usr/bin/fetchmail /proc/net/dev
335
336 /usr/bin/free /proc/meminfo
337
338 /usr/bin/gmake /proc/loadavg
339
340 /usr/bin/gpm-root /proc/loadavg
341 /usr/bin/gpm-root /proc/meminfo
342
343 /usr/bin/host /proc/
344 /usr/bin/host /proc/interrupts
345 /usr/bin/host /proc/meminfo
346 /usr/bin/host /proc/rtc
347 /usr/bin/host /proc/self/status
348 /usr/bin/host /proc/stat
349
350 /usr/bin/hoststat /proc/loadavg
351
352 /usr/bin/hwdiag /proc/cpuinfo
353 /usr/bin/hwdiag /proc/pci
354 /usr/bin/hwdiag /proc/scsi/scsi
355 /usr/bin/hwdiag /proc/version
356
357 /usr/bin/lsdev /proc/dma
358 /usr/bin/lsdev /proc/interrupts
359 /usr/bin/lsdev /proc/ioports
360
361 /usr/bin/mailq /proc/loadavg
362
363 /usr/bin/make /proc/loadavg
364
365 /usr/bin/mcookie /proc/loadavg
366 /usr/bin/mcookie /proc/stat
367
368 /usr/bin/newaliases /proc/loadavg
369
370 /usr/bin/nslookup /proc/
371 /usr/bin/nslookup /proc/interrupts
372 /usr/bin/nslookup /proc/meminfo
373 /usr/bin/nslookup /proc/rtc
374 /usr/bin/nslookup /proc/self/status
375 /usr/bin/nslookup /proc/stat
376
377 /usr/bin/nsupdate /proc/
378 /usr/bin/nsupdate /proc/interrupts
379 /usr/bin/nsupdate /proc/meminfo
380 /usr/bin/nsupdate /proc/rtc
381 /usr/bin/nsupdate /proc/self/status
382 /usr/bin/nsupdate /proc/stat
383
384 /usr/bin/pgp /proc/version
385 /usr/bin/pgpe /proc/version
386 /usr/bin/pgpk /proc/version
387 /usr/bin/pgps /proc/version
388 /usr/bin/pgpv /proc/version
389
390 /usr/bin/procinfo /proc/cmdline
391 /usr/bin/procinfo /proc/devices
392 /usr/bin/procinfo /proc/dma
393 /usr/bin/procinfo /proc/filesystems
394 /usr/bin/procinfo /proc/interrupts
395 /usr/bin/procinfo /proc/loadavg
396 /usr/bin/procinfo /proc/meminfo
397 /usr/bin/procinfo /proc/modules
398 /usr/bin/procinfo /proc/stat
399 /usr/bin/procinfo /proc/uptime
400 /usr/bin/procinfo /proc/version
401
402 /usr/bin/purgestat /proc/loadavg
403
404 /usr/bin/screen /proc/loadavg
405
406 /usr/bin/strace /proc/%d/stat
407
408 /usr/bin/top /proc/cpuinfo
409 /usr/bin/top /proc/meminfo
410 /usr/bin/top /proc/stat
411
412 /usr/bin/vmstat /proc/%s/stat
413 /usr/bin/vmstat /proc/meminfo
414 /usr/bin/vmstat /proc/stat
415
416 /usr/sbin/atd /proc/loadavg
417
418 /usr/sbin/dnskeygen /proc/
419 /usr/sbin/dnskeygen /proc/interrupts
420 /usr/sbin/dnskeygen /proc/meminfo
421 /usr/sbin/dnskeygen /proc/rtc
422 /usr/sbin/dnskeygen /proc/self/status
423 /usr/sbin/dnskeygen /proc/stat
424
425 /usr/sbin/fuser /proc/%d/stat
426 /usr/sbin/fuser /proc/net/%s
427 /usr/sbin/fuser /proc/net/unix
428
429 /usr/sbin/in.identd /proc/net/tcp
430
431 /usr/sbin/irpd /proc/
432 /usr/sbin/irpd /proc/interrupts
433 /usr/sbin/irpd /proc/meminfo
434 /usr/sbin/irpd /proc/rtc
435 /usr/sbin/irpd /proc/self/status
436 /usr/sbin/irpd /proc/stat
437
438 /usr/sbin/named /proc/
439 /usr/sbin/named /proc/interrupts
440 /usr/sbin/named /proc/meminfo
441 /usr/sbin/named /proc/rtc
442 /usr/sbin/named /proc/self/status
443 /usr/sbin/named /proc/stat
444
445 /usr/sbin/named-xfer /proc/
446 /usr/sbin/named-xfer /proc/interrupts
447 /usr/sbin/named-xfer /proc/meminfo
448 /usr/sbin/named-xfer /proc/rtc
449 /usr/sbin/named-xfer /proc/self/status
450 /usr/sbin/named-xfer /proc/stat
451
452 /usr/sbin/readprofile /proc/profile
453
454 /usr/sbin/rwhod /proc/loadavg
455 /usr/sbin/rwhod /proc/uptime
456
457 /usr/sbin/sendmail /proc/loadavg
458
459 /usr/sbin/setconsole /proc/openprom/options
460 /usr/sbin/setconsole /proc/openprom/options/${console}-mode
461 /usr/sbin/setconsole /proc/openprom/options/input-device
462 /usr/sbin/setconsole /proc/openprom/options/output-device
463
464 Best wishes from Riley.
465
466  * Copyright (C) 1999, Memory Alpha Systems.
467  * All rights and wrongs reserved.
468
469 +----------------------------------------------------------------------+
470 | There is something frustrating about the quality and speed of Linux  |
471 | development, ie., the quality is too high and the speed is too high, |
472 | in other words, I can implement this XXXX feature, but I bet someone |
473 | else has already done so and is just about to release their patch.   |
474 +----------------------------------------------------------------------+
475  * http://www.memalpha.cx/Linux/Kernel/
476
477
478 -
479 To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
480 the body of a message to majordomo@vger.rutgers.edu
481 Please read the FAQ at http://www.tux.org/lkml/
482