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