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