netbsd/pr.txt: update
[mmondor.git] / netbsd / netbsd_improvements.txt
1
2 This file is a memory helper on interesting aspects of NetBSD which could be
3 improved or researched on.
4
5
6 Status, defined by the first column:
7 - Discovered issue, no fix implemented yet.
8 = Discovered issue, fix provided in the form of a diff file.
9 + Issue was discovered, fixed by a diff file, tested, and submitted via PR
10 * The fix that was submitted via PR was accepted and commited.
11
12
13 - It would be nice if ls(1) could sort files by type or restrict the listing
14   to directories, or if find(1) supported limiting recursion to a wanted level
15   (other than to the current file system).  This would replace the common
16   instances of "ls -F | grep /" for example.
17
18 - kauth uses lists in a centralized system to allow secmodel(9) modules to
19   change the behavior.  Although non-MODULAR kernels without autoload
20   shouldn't be able to load modules, it may be too easy to modify those lists
21   assuming vulnerabilities allow to modify kernel memory.  Ensure that it's
22   possible to seal those lists, either by generating static functions rather
23   than list runners, changing the memory permissions, or similar, after
24   investigating if this is actually of concern.  This may also allow to
25   increase performance.  By static functions I actually mean in the read-only
26   code segment, rather than its visibility.
27
28 - Systrace was apparently buggy (vulnerable), but was very useful to limit
29   what software could do on a syscall-level.  It is unfortunate that it was
30   deleted instead of fixed or redesigned.
31   A similar system in userspace might be interesting, such as a custom libc,
32   or forced preloaded syscall wrapper library which cannot be overridden
33   unsetting LD_PRELOAD.  Since it would be in userland, any other libc
34   function could be intercepted, not only syscalls.
35   Ultimately, it would perhaps be possible to have sysadmin-configurable, or
36   user class integrated configuration for limits which are not currently
37   enforceable using rlimit or IP filters.  Chroot simulation would also be
38   possible for testing or build scripts, etc.
39
40 - curl being MIT-licensed, it might be a good idea to eventually include it in
41   the base system.  The advantages would be:
42   - third party maintained
43   - ftp(1) could use libcurl and also support features it doesn't currently:
44     - SSL certificate validation
45     - resume download support for FTP and HTTP[S]
46   It may also be a good idea to provide some important certificates as part of
47   the base system; the ones to the NetBSD servers for instance.
48
49 - The fact that disk devices use c or d for "whole disk" is confusing,
50   and some documentation is not clear.  Docs which need updating are for
51   instance these:
52   https://wiki.netbsd.org/ports/evbarm/allwinner/
53   http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/evbarm/conf/
54   disklabel sd1 for instance does specify for an architecture if c or d is
55   used to successfully open it.
56   Common user errors are to create large file in /dev/ by attempting to dd
57   with wrong device names like sd1 or sd1c (from x86) or sd1d (from arm etc).
58   It would seem ideal if we used z in all cases, or sd1 in all cases.
59   This is one of the few areas where NetBSD ports remain inconsistent.
60   A few man pages also say that d is used for x86 and pmax and c for all
61   others.  By them alone, it is not clear on a given architecture if it's
62   always true, considering they are sparsed partial ports lists.
63   It might not be a bad idea to also have a sysctl specifying if c or d is
64   used.  With GPT and wedges, this "label partition" remnant interface also
65   seems atavistic.
66
67 - netmap(4) support would be very useful (from FreeBSD).  This unfortunately
68   is probably a lot of work, especially to provide portably; instead of
69   needing per-ethernet-device drivers, it would be nice if a compromise could
70   be achieved via one of NetBSD's abstractions.
71
72 - Document gethostbyname_r(3).
73
74 - The security curtain feature prevents the visibility of sockets and
75   processes owned by other users, but not of SysV IPC resources (as shown by
76   ipcs(1)).  Possibly that in some cases this is necessary, considering it's
77   for IPC.  Other resources that may be nice to hide from unprivileged
78   curtained users would be various sysctl nodes, network interfaces and
79   mounted file systems.  It would also be possible to have other security
80   sysctl options for these limits.
81
82 - splash_render() can cause a panic with genfb(4) if the supplied splash image
83   is too large.  It should instead warn and continue gracefully.
84   Discovered by cfkoch.
85
86 - Verify if NetBSD supports per-page NX (called XN on ARM) bit, which ARMv6+
87   supports.  If so, update https://www.netbsd.org/docs/kernel/non-exec.html.
88   If not, this would be very nice support to have, especially that ARM devices
89   may be used for long-running network appliances which need strong security.
90
91 - Although initial SDD TRIM (and the discard mount option) are summarily
92   implemented in netbsd-7:
93   - Performance is impacted negatively because too many TRIM requests are sent
94     rather than optimizing them in decently sized ranges.  This is also the
95     case on Linux from what I remember.  Fixing this would make NetBSD perform
96     even better than Linux with TRIM.
97   - Unlike Linux, which has a batch command allowing to run through an FS to
98     report all unused blocks using TRIM (fstrim(8)), we do not currently have
99     such a command.  This means that a system that is upgrade to suddenly use
100     TRIM hardly improves the SSD's ability to more effectively perform its
101     wear-leveling.  It seems to me that the appropriate place to add such
102     functionality would be in fsck(8) however, rather than introducing a
103     redundant fstrim(8) command.
104
105 - It might be useful to have very easy to configure settings for a read-only
106   system, or for a minimal-writing system (i.e. for use with SD) mode.
107   Currently, various changes need to be done to the configuration file, and
108   one needs to be rather familiar with how the boot/init/rc scripts work.
109   See for instance:
110   http://ftp.pulsar-zone.net/conf/netbsd-sd-optimizations.txt
111
112 - Daily(5)'s uptime should also be optional, there also should be a
113   send_empty_daily defaulting to NO, like for send_empty_security.
114   On SD mounted file systems, it's nice to limit output to the minimum
115   while still being able to run wanted daily procedures.
116
117 - BozoHTTPd, as part of the base system, should support logging the
118   User-Agent and HTTP-Referer from clients.
119   I also noticed that it unnecessarily forks for every request even to serve
120   static pages, and that it reads the client input one character at a time,
121   needing a syscall per character.
122   Its chroot mode is also problematic if a syslog socket is not present in it,
123   but the manual page fails to mention it.
124
125 - On NetBSD-6/amd64, under a compat-32 NetBSD-6/i686 chroot,
126   SIOCIFGCLONERS on a SOCK_DGRAM socket (in pppd code's
127   ppp_available() fails with ENXIO.  This works fine without compat-32.
128
129 - When setting file descriptor limits via sysctl for a process which exceed
130   those of kern.maxfiles, sysctl pretends that it was successful, instead of
131   erroring with EINVAL.  This can make diagnosing limit issues difficult.
132   Moreover sysctl also silently fails if trying to set too high values for
133   the datasize.hard rlimit, or if we try to set 'unlimited' for stubs which
134   don't support it, precisely like datasize.hard too.
135   It would be nice if sysctl could tell the allowed values/ranges, not only
136   their description.
137
138 - FreeBSD-like fast path for userland to receive/generate ethernet packets,
139   for high performance userland stacks and packet processing directly using
140   ethernet hardware buffers.
141   See:
142   http://bsd.slashdot.org/story/14/08/06/1731218/facebook-seeks-devs-to-make-linux-network-stack-as-good-as-freebsds
143
144 - identd(8) should support limiting requests for specific remote ports; for
145   instance 6667 and 9999, and deny requests for other ports (or randomize
146   then, etc).
147
148 - Apparently boot.cnf(5) (BTW: why not boot.conf to be consistent with other
149   configuration files?) supports keywords from boot(8) but that is not
150   specified.  For instance, bootdev= would work in boot.cnf.
151
152 - The USB images really are minimal install images.  It would be nice to have
153   an alternate official yet minimal live NetBSD distribution provided as both
154   CD/DVD and USB images.  At least with basic commands, /rescue and in-base
155   X11.  This would permit to test the NetBSD support on hardware quickly
156   without needing to perform an install.  The kernel would use GENERIC instead
157   of INSTALL.  There would not need to be any pre-installed pkgsrc packages.
158   For instance, if X11 starts, I could then use glxinfo, xvinfo...  if it does
159   or doesn't, I could check ifconfig -a, dmesg, pcictl, hdaudioctl, etc...
160   I guess that I should however try building such a bootable USB image myself
161   basing myself on the mkliveimage or such script.
162
163 - Signed PAM implementation/files/configs, and requirement for correct
164   signatures for the PAM library+tools to function
165
166 - PRI style macros for C/POSIX types such as [s]size_t, off_t...
167
168 = Daemons run via boot init scripts which themselves drop privileges without
169   necessarily calling login(1) do not inherit any rlimit set in login.conf(5)
170   (neither from the default class nor from the class of the unprivileged
171   user that is setuid(2)s to).
172   Therefore, configuring limits in login.conf(5) is not always useful or
173   sufficient.
174   Because rlimits are inherited at fork(2), it would probably be adequate
175   for init(8) to also at least load and apply rlimits from the default class.
176   It is possible to modify default rlimit values via options(4) (some of that
177   documentation needs updating too, like OPEN_MAX which is no longer 64
178   today), but this requires kernel recompilation.  If possible, sysctl(8)
179   knobs should be provided to permit to change this default value instead.  If
180   this worked, init(8) would not need to be modified.
181   I implemented a small rc.d script which although hackish, solves the issue.
182   Once improved, ideally /etc/defaults/rc.conf should include rlimit=YES and
183   new systems should come with an /etc/rlimit.conf file.
184 #!/bin/sh
185 #
186 # $Id: netbsd_improvements.txt,v 1.58 2015/09/08 10:21:24 mmondor Exp $
187 #
188
189 # If too early at boot, the sysctl commands somehow fail.
190 # After sysctl, they seem to affect init(8), but even applying
191 # limits to process IDs 1 and $$ are not enough for those to
192 # be inherited to all future non-login daemons (i.e. started
193 # later via rc.local or other rc scripts).
194 # It might be slightly overkill, but to be sure that they get
195 # inherited we apply the limits to all currently existing
196 # processes, which works.
197
198 # PROVIDE: rlimit
199 # REQUIRE: sysctl
200 # BEFORE: network
201
202 $_rc_subr_loaded . /etc/rc.subr
203
204 name="rlimit"
205 rcvar=$name
206 conf=/etc/rlimit.conf
207
208 start_cmd="rlimit_start"
209 stop_cmd=":"
210 status_cmd="rlimit_status"
211
212 extra_commands="status"
213
214 rlimit_start()
215 {
216         echo "Configuring default rlimits."
217         if [ -f "$conf" ]; then
218                 /bin/cat "$conf" | while read l; do
219                         for p in $(/bin/ps -axopid=); do
220                                 /sbin/sysctl 2>/dev/null -q -w \
221                                         proc.$p.rlimit.$l
222                         done
223                 done
224         else
225                 echo "Warning: $rcvar enabled but $conf missing."
226         fi
227         exit 0
228 }
229
230 rlimit_status()
231 {
232         /sbin/sysctl proc.1.rlimit | /usr/bin/sed 's/proc.1.rlimit.//g' | \
233                 /usr/bin/sed 's/\ //g'
234 }
235
236 load_rc_config $name
237 run_rc_command "$1"
238
239
240 - csh(1) will reach the heap limit if given the following command:
241   "yes `yes maybe`" and similar.
242   psave() should ideally respect the ARG_MAX exec(2) limit, and it probably
243   could error with stderror() which eventually calls longjmp(3).
244   Since grepping the code of sh(1) and ksh(1) for ARG_MAX shows no results,
245   it's possible that they also should be fixed.  It doesn't seem to
246   necessarily be a security vulnerability, but it sure can be an annoyance
247   preventing graceful and quick recovery from a class of errors.
248   Bug discovered by Bernard Riedel
249
250 - Signed kernel modules
251   With ability to manage kernel keys; with keys locked in read-only non-exec
252   pages after boot
253
254 - Signed shared libraries and executables
255   VeriExec not far from that, but it's still different as it does not verify
256   signatures, it instead verifies a checksum.
257   The signatures should be added as a new special ELF section.
258   Ideally, writing to protected files should optionally be forbidden;
259   otherwise, their cached verified-signature status should be forgotten in
260   order for the next use to verify the signature again.
261   An alternative would be signatures loaded from a database, possibly using
262   fileassoc(9).
263
264 - NPF
265   - Lack of proper diagnostics/stats
266   - Lacks various old ipfilter features which are necessary
267   - Things like icmp-type and icmp-code symbolic names undocumented, numbers
268     must be used except for some
269   - Can display as syntax errors other problems
270   - Documentation not properly synchronized with implementation, and lacking
271   - npfctl show  bogus
272   - npfctl stop  may lock in a busy loop, unkillable process
273   - npfctl stats cannot show per-rule hits
274   - npflog0 logging lacks needed metadata like rule number/reason and
275     direction
276   - Annoying syntax changes between versions
277   - Appears too immature on netbsd-6, to recheck on netbsd-7
278   - Should ideally also support optional per-rule user metadata, for
279     association with IDS maintained rules; although possibly that the rule ID
280     number could serve this purpose as well.  A type of user tag would still
281     be generally useful.  Perhaps that groups can provide this.
282
283 - veriexec
284   - Lock related panic when attempting to write to a veriexec protected file
285     in strict level 2.
286
287 - psshfs
288   - When creating a new file, ls(1) afterwards may show bogus information for
289     size and owner/group, for a moment; this is magically fixed later.
290   - When reading a 0 bytes sized file, the psshfs mount daemon appears to
291     crash or exit.
292   - When ffmpeg seeks back to fix its header after encoding/transcoding a
293     file, the first 8k of the file can be an unintended block, sometimes
294     disclosing some other information from the process or from the kernel; the
295     resulting file is obviously corrupted as well.
296
297 + Enhancements to section 2 man pages (PR# lib/23152)
298   - setgroups(2) man page should specify that only secondary groups are
299     affected.
300   - Moreover, the getgid(2), setgid(2) and companions man pages should have a
301     link to setgroups(2) and getgroups(2) in their SEE ALSO section.
302   - Fix the minherit(2) man page which misses RETURN VALUES and ERRORS.
303   - The same applies to madvise(2)
304   - and to mprotect(2).
305   - Also, the msync(2) man page does not specifically mention that -1 is
306     returned if an error occurs (it however does have an errno possibilities
307     list).
308   - setsid(2) and getsid(2) should both refer eachother in SEE ALSO.
309   - A PR was sent a while ago but noone ever answered to it nor applied the
310     diff.
311   - Done and working: diff man2.diff.gz
312 XXX send mail to netbsd-doc@netbsd.org mailing list with missing changes:
313     - 
314
315 + wscons (pckbd) should support ca_fr or fc (French Canadian) keyboard mapping.
316   (PR# kern/23184)
317   Research:
318   - (ISO9995-3, ISO9995-7 ISO8879-15 CAN/CSA Z243.200.92 ISO6937)
319   - http://www.olf.gouv.qc.ca/images/ti/clavier.gif
320   - http://www.cio-dpi.gc.ca/its-nit/st_tbit_ue_f.asp
321   - http://externe.net/clavier-normalise/
322   - http://catalogs.activis.ca/clients/beaujoie_com/fr/
323   - root@gobot:/usr/src/sys/dev/pckbc# vim wskbdmap_mfii.c
324   - A PR was sent with kernel diff, and another one following it in the same
325     thread by a userland keymap file. The existing ca-fr standard was followed
326     since the normalized "standard" never was widely spread, and requires
327     features which wscons does not handle (5 mappings per key, with two group
328     sector keys). Most users are used to the older standard anyways and those
329     are the most common keyboards found and still sold today.
330   - Done and working: diff encoding_CA_FR.diff.gz,
331     file pckbd.ca_fr.iso8859-1.gz
332
333 + It appears that ps(1) always returns 0 for MSGRCV, although it works fine
334   for MSGSND. (PR# kern/26210)
335   - Cause: in /usr/src/sys/kern/uipc_socket.c:
336     - Most functions use p = curproc, like sosend(). sosend() then uses
337       p->p_stats->p_ru.ru_msgsnd++;
338       However, soreceive() does not use curproc, and has the following:
339         #ifdef notyet /* XXXX */
340                 if (uio->uio_procp) 
341                         uio->uio_procp->p_stats->p_ru.ru_msgrcv++;
342         #endif
343   - Shouldn't soreceive() also use curproc, at least now, so that it may also
344     use p->p_stats->p_ru.ru_msgrcv++; ? Other uses of curproc seem to have a
345     /* XXX */ comment. However, it at least works for now (of course, the issue
346     seems related to the MP branch, which needs to use another principle,
347     probably) I don't see the point in temporarily crippling this feature out
348     on the stable 1-6 branch, however...
349   - Done and working: diff msgrcv_acct.diff
350
351 = getsockopt(2) should return 0 or 1 instead of 0 or a bitmask in the case
352   of boolean values. Diffs were made in diffs/sockopt.diff.gz, but no PR was
353   sent yet. These diffs include network protocol fixes. The IPv6 already was
354   properly returning 0 or 1 so that one didn't need modifications.
355   Moreover, these include fixes to getsockopt/setsockopt(2) and accept(2) to
356   specify that socket options set on a passive socket cause accept(2) created
357   connected sockets to inherit those options.
358   - Done and working: diff sockopt.diff.gz
359
360 = A generic command to load wscons keymaps from /usr/share/wscons/keymaps
361   should be provided (wsmapload(8)) in /usr/sbin, like for wsfontload(8).
362   This command, as well as /etc/rc.d/wscons, should be able to support a
363   line encoding=<encoding> to use as default encoding to only perform
364   modifications related to it. wsmapload(8) and wsmap(5) man pages should
365   be written.
366   - Done and working: diff wsmapload.diff.gz
367
368 = The SysV IPC man page for shmat(2) should specify more broadly that
369   (void *)-1 is returned on error, instead of NULL.
370   - Diff shmat-2-diff.txt
371
372 - Should not lib/libc/stdlib/malloc.c verify for MAP_FAILED instead
373   of -1 at mmap(2)? It also could use queue(3) rather than rolling it's
374   own lists...
375   - MAP_FAILED verification fixed in 2.0.
376
377 - rm(1)'s rm_overwrite() does not close(2) the filedescriptor on some errors
378   which could cause the maximum number of allowed filedescriptors to be reached
379   in case of recursive deletions with the -P flag. Moreover, we would normally
380   expect the command to stop recursion in the case of such an error? In any
381   case, we expect rm(1) to return EXIT_FAILURE rather than EXIT_SUCCESS in such
382   cases rather than only issueing a warning to stderr using warn(3).
383
384 - OpenSSH does not call _exit(2) in the case of failed execve(2), but exit(3).
385   According the execve(2) manual page this is considered be a bug. Should the
386   manual page be updated, or the OpenSSH code modified? inetd(8) appears to
387   follow the manual page recommendation and use _exit(2). Some code I wrote
388   also does and works as-is on the various BSDs, as well as on Linux, fine.
389   The gnats system was used on the OpenSSH site in an attempt to send a PR
390   but the system seemed to not work; No errors were reported via the HTTP
391   interface after submission but it appeared to never make it into the PRs.
392
393 - I experienced hard freezes when hot swapping a device on a two RAID 5 set.
394   The lock did not occur immediately but after the HD was reinserted and that
395   a command issued to reconstruct/rebuild the RAID set with it.
396   XXX reproduce, describe hardware and check with tech-kern
397
398 - Various cd(4) issues:
399   - I noticed when writing a bad CDROM recovery software that read(2) errors
400     usually returned -1 with errno set to EINVAL, when it probably should have
401     been EIO or some other read error. Verify if this is specific to the cd(4)
402     driver or if it also happens for fd(4)... Then perhaps see what to do.
403     errno(7) specifies that EIO may internally be overwritten, see where.
404   - Moreover, once my program is interrupted using SIGTERM while retrying at
405     a particular block, the driver remains in an inconsistent state, my program
406     cannot be restarted, unless I reinsert the CD. However, if I leave the
407     recovery program run for long periods it still works fine, it seems that
408     the problem is related to read(2) interrupted, or close(2)/fdrelease(9)
409     or such.
410   - Another issue is that my recovery software, often when retrying to read
411     a bad block, causes the whole system to be locked for some while. This
412     seems to especially happen if any swapping must occur, but it also seems
413     to happen once in a while that even the mouse cursor in X11 be locked
414     for a minute. There could be various possibilities for this problem.
415     Process is in biowait waiting channel and CPU usage is very low at that
416     time. Possible issues are hardware or IDE driver, cd(4) driver,
417     CDROM drive, uninterruptible wait issues, etc. Check it out carefully
418     eventually. Try several drives, several IDE devices first.
419
420 - If it does not already, NetBSD should support PCMCIA RAM cards (at least
421   after the kernel is launched). This is most useful in some embedded
422   environments or on laptops with little RAM, where PCMCIA expansion RAM
423   could be used...
424
425 - I need to contact the right person to make available a
426   netbsd-qc@netbsd.org or such mailing list for regional support in Quebec.
427   A main reason is that the main language is French in Quebec, and as such the
428   Canadian regional one is not enough... I receive this request from several
429   people in the local NetBSD community here...
430   - Message was sent to majodormo-owner@netbsd.org, no response back though
431
432 - (not a BSD problem) the xscreensaver utility should allow -lock with -select
433   or -activate with -select (-select should not be considered an action, but
434   an informational parameter). For even best results, -lock would also be
435   considered a parameter instead of being mutually exclusive with -activate.
436   Example of intelligent behavior:
437   - xscreensaver-command -activate -lock -select 80
438   - xscreensaver-command -activate -select 80
439   With the current system one cannot reproduce xlock functionality (i.e.)
440   lock immediately, with the wanted "hack" without affecting the configuration.
441   Moreover, specifying the hack using a number is absurd, especially as they
442   are not numbered in the configuration file, and without a command to
443   actually display them with their ID. Either provide such command to specify
444   ID of each registered hack, or way to use a hash table with a hack name.
445
446 - I beleive that wsdisplay(4) should be responsible for mouse cursor and
447   copy/paste support when wsmouse(4) is multiplexed/attached as wsmux0.
448   This should be done against -current not 1-6 branch however.
449
450 - The X11 packages which currently install themselves in /usr/X11R6 should
451   either install themselves in /usr/pkg, /usr/pkg/X11R6 or /usr/X11R6/pkg,
452   but NEVER /usr/X11R6 where lies the standard XF86 distribution provided with
453   the OS. I should verify where to discuss this issue. It also would be
454   possible to rather install the standard set in /usr/X11R6/stand or such.
455   Having package files mixed with standard distribution files in the same
456   directories is a bad idea in general. See what to do with people maintaining
457   pkgsrc and X11 base package... A good example is packages normally installing
458   under /usr/pkg while standard distribution files are in /usr. Follow similar
459   idea for X11R6 packages.
460
461 - The GENERIC configuration file should comport all the ALTQ and ALTQ_*
462   options, at least commented out but present in 1-6
463 - The options(4) man page is not updated properly, but also should.
464
465 - OpenBSD pf seems to allow interaction with altq. Seeing that altq filter
466   rules could be more efficiently tuned by ipf, especially with the support
467   which ipf has to isolate packets into categories, I beleive that it would
468   be great if an ipf category name could be used as an altq filter parameter.
469   This would allow for instance to bandwidth limit, or to give priority, to
470   specific TCP packets with the wanted flags set, etc... I would need to use
471   a -current system to play with this, not a fix against 1-6 branch. Moreover,
472   I need to check how to implement this as best as possible without modifying
473   standard ipf distribution (or the less possible) as it's used on various OS.
474
475 - The tun(4) network interface seems to not have a byte counter. It does have a
476   packets counter however, but also should account bytes in and out.
477
478 - It would be nice if systat(1) supported nfsstat and ipfstat -t :) perhaps
479   even altqstat where available...
480
481 - The rpcbind, nfsd, rpc.statd and rpc.lockd daemons should be able to only
482   bind to the wanted interfaces, and possibly never bind to all of them by
483   default... Because of the complexity involved into properly firewalling
484   RPC and NFS services out from a public interface, when they need to be
485   available to an internal network/interface, binding all RPC based systems
486   to a wanted interface would be most useful. An example is a set of collocated
487   boxes where the two communicate via an internal dedicated ethernet port
488   pair, and another ethernet interface is used for public internet servers.
489   NFS could safely be used within the two boxes via the internal interface,
490   while not requireing special ipf rules to prevent access from the WAN one.
491
492 - The uvm(9) man page does not seem to document uvm_map_inherit().
493 - It also does not document uvm_map_advice().
494 - The uvm(9) documentation is generally incomplete, function prototypes are
495   not really useful. Because it's a very good VM for academic study, it would
496   be great to work on this documentation (although there are rather good larger
497   documents available, a good man page is always great for reference).
498
499 - fstat(1) should be able to report the full file name if requested using
500   reverse namei mappings if support was compiled in kernel, rather than only
501   the inode. Obviously to be done on -current rather than 1-6 branch.
502   - Such support exists in conjunction with linux compatibility layer
503     to provide linux-compatible /proc/<pid>/maps
504   - DragonflyBSD worked on a more generic solution to modify namei to be both
505     efficient for standard and reverse lookups, could check it's implementation
506
507 - ls(1) should be able to report the full path of a file it lists if requested
508   using reverse namei mappings if support was compiled in kernel
509   - Note: using realpath(3) may do it.
510   - Also, it would be nice if ls supported displaying files which are older or
511     more recent then a specified timestamp, in seconds at least. There is a
512     libc function to easily convert user supplied time strings, too, which
513     might be useful. find(1) seems to do this however.
514   - A first good step would be to ask if these features are wanted in a
515     BSD API related mailing list, and which to provide for ls(1) vs find(1).
516     Also check POSIX documents on this.
517   - It might be best to simply provide a realpath(1) command for scripts to
518     use?
519
520 - A truncate(1) command would be nice to have
521
522 - ksh supports tab complete in emacs mode, but requires unsusual hacks to be
523   used to do it. How to do it should be documented into the ksh manual page.
524   A section should be added as an example easy setup for interactive ksh.
525   Moreover ksh badly needs a better line editor. Otherwise, /bin/sh could be
526   enhanced with some features which ksh has and sh needs, to be used properly
527   interactively. I have both used sh and ksh independently for a while as
528   login shell, will need to note what is missing of each and decide which
529   needs the least modifications to provide what I need of an interactive shell.
530   A nice feature to import from csh would be to optionally be able to report
531   pids of started processes (especially useful when using &).
532
533 - newsyslog should only kill a daemon after all logfiles have been rotated for
534   it, instead of doing it for each. This would make rotation of httpd log
535   files for instance, more efficient. It would signal and pid to kill would be
536   queued, and executed after the whole list have been processed. If this cannot
537   be done, it would be nice to have a RedHat logrotate replacement as part of
538   the NetBSD OS itself. Of course it then could be implemented differently...
539
540 - I should be able to connect to an AF_LOCAL socket of a filesystem remounted
541   through nullfs (at least with a mount option/flag).
542
543 - The umap fs implementation should no longer have the 64 uid and 16 gids
544   limits. Moreover, a better filtering method might be useful, perhaps using
545   rules. A script should also exist to automatically create such rule files.
546   The mounter would of course parse the rules to provide the kernel with
547   a more adequate machine form.
548 - The man page does not specify strongly enough which column represents the
549   remote IDs (actually the first one, from experience). (it does, just not
550   puts it obvious enough).
551 - The new implementation should also prevent duplicates, which the current
552   one cannot avoid but only honors the first matching entry.
553   (see /usr/src/sbin/mount_umap/umap_manual).
554
555 - Several network interfaces do not support ALTQ(9), but should:
556 - ne2000
557 - we
558 - Verify if they do in -current, if they do not, send a PR
559   (possibly with diff).
560 - Actually check again 1.6 code to see if this really is a true issue.
561
562 - The various mount_* command should be moved from /sbin/ to /libexec/.
563   They have bugs which prevent the user from calling them, resulting in
564   bad paths being mounted which can no longer be unmounted without rebooting.
565   Those are called by the /sbin/mount frontend, and as such should be in
566   /libexec (not supposed to be called by users directly). Otherwise, they
567   should be fixed so that they can safely be used by users.
568
569 - Some solution should be worked out to allow users to mount msdos filesystems
570   on desktop systems, and have the permissions of all files remapped to their
571   own PID and PGID.
572 - I found a solution to this problem, allowing users to mount filesystems via
573   sysctl, and having a mountpoint in their own directory. However, a possible
574   problem persists if another user wants to use that device and mount an fs
575   on it, while it is already being mounted still by another user. I then could
576   still use mmsucomd(8) to umount it perhaps...
577
578 - When building a standard release(7) set with custom CFLAGS for optimizations,
579   there should be a flag to specify not to attempt to build the floppies, or
580   for them to be compiled without honoring CFLAGS, using the default for the
581   official release on that port. This would avoid build errors and aborts when
582   building release(7) set with -march=i686 for instance, which is annoying.
583
584 - The kernel sysctl(2) code seems to be a hack; Check -current new code and
585   see if it's worth reimplementing or if -current's is satisfactory. A new
586   hierarchy-based implementation with generic way to layout data structures
587   would be better than a bunch of functions with many switch/case for each
588   domain...
589
590 - There seems to be smb protocol in the kernel already, however options(5)
591   has nothing related to it, and no other code seems to use it. Moreover,
592   there seems to be useful features which are currently commented out on
593   NetBSD, such as sysctl and getinfo support. See if any actual code ties
594   to the smb code in the 1-6 branch...
595
596 - Thinking of a feature which would use a combination of the filesystem ID
597   and inode (or executable full binary path, or unique ID), with a hash table
598   and modifications to uipc_socket.c, so that optional support for application-
599   specific prevention of bind(2), connect(2) or sosend(). A simple database
600   would be used to specify which applications to add or remove, with a flag
601   weither to disable or enable applications by default (and consider ones
602   specified in DB as exception). Prevention would only be for AF_INET[6].
603   Offending processes would cause a new log line on the dmesg.
604   - Hmm there exists a feature already to decide which system calls an
605     application may have the right to execute or such, check it out, but I do
606     not think that it would be ideal to implement this feature.
607   - A kernel syscall would allow to modify this db as the superuser, causing
608     both the file db to be modified and internal cache to be revised.
609   - Once a process would be rejected or accepted that could be remembered
610     for faster subsequent operation. A process-specific boolean variable could
611     even be used so that no lookups be necessary even once decision is made,
612     if necessary to not loose performance.
613
614 - The undelete(2) syscall is not useful at current time, but I read about the
615   elephant filesystem based on the Log Structured Filesystem, for which this
616   could be neat. Obviously work to be done on -current only, perhaps even
617   on a branch if VFS changes are required.
618   - Obviously first check recent LFS status (used to crash at occasions when
619     I used it for source and altroot trees and building sources for a while).
620   - Audit LFS code if stability issues are still observed
621   - Verify if implementation could allow file recovery (it theoretically could
622     because of the nature of LFS, remains to see how tricky it would be).
623
624 - It would be quite trivial to implement per-process statistics on disk/network
625   transfers in time, so that an average KB/s could be shown via ps(1)...
626   And because there are common code paths for transfers, it would also be
627   possible to implement socket-specific such statistics which could be
628   available via fstat(1). Think about this and discuss it with others before
629   implementing. These statistics could include packet, connection rate/counters
630   also.
631
632 - In 1.6.1 at least, fork1(9) in src/sys/kern/kern_fork.c has code which is
633   procfs specific, which probably should be inside preprocessor conditional,
634   for performance improvements when PROCFS support is not compiled in kernel.
635   There also seems to be some code which is only needed when emulation is used.
636   It also seems that some functions called by fork1(9) are really small and
637   should be implemented as macros, like kern_descript.c's fdshare(), cwdshare()
638   or they could be inlined.
639
640 - Noticed in 1.6.1, kern_proc.c has several functions which probably should
641   be implemented as macros, unless some pointers to those functions are really
642   needed somewhere. Process list locking/unlocking is an example. Inlining is
643   another possibility.
644
645 - Attempt to reduce code duplication in the following areas of the kernel.
646   If these were centralized into documented subsystems it would both be best
647   for new developpers to know also roll their own, and it would even be
648   possible to provide architecture-specific implementations in assembler in
649   some circumstances, if wanted and considered worth it.
650   - Many subsystems roll their own hash tables functions, which could be
651     replaced by a generic system and shared by several subsystems
652   - Resource allocation systems also are duplicated... there is the extent(9)
653     system which only seems to be used by two subsystems. I can see
654     subr_rmap.c, amiga port's chip RAM allocator, pid_t allocator, and there
655     are more...
656   - Several subsystems roll their own semaphore hacks, this includes the
657     softdep code.
658   - linux compat clone(2) could wrap around NetBSD clone(2) as it now has it
659     instead of duplicating the code...
660
661 - In the unix world in general, processes do not share memory by default and
662   threads inherently share their vm space. There seems to not be any system
663   allowing processes, each running with their own vm space, to also
664   efficiently and inherently support shared memory. Here is a common scenario
665   for processes requireing shared memory:
666   - Shared memory must usually be allocated by the parent process, and
667     inherited to the children processes that are to share it, at fork(2).
668   - There then is no easy way to resize the heap of shared memory. SysV
669     doesn't allow segments to be resized. Using mmap(2) allows to resize a
670     segment, but other processes sharing that memory area must then all remap
671     the memory.
672   What I propose is to allow say, a second heap to be shared among a process
673   group, when enabled by a parent process. This heap would inherently be
674   shared among the processes, and would automatically grow or shrink as the
675   normal heap would do, causing the changes to affect all processes sharing
676   that memory.
677   Although I mentionned that it could be process group shared memory, it might
678   be prefered to simply enable the feature in a parent process, which would
679   cause children to inherit the feature, like for current shared memory maps.
680   The only difference would be that the segment would be dynamic.
681   The closest system to this is say, using libmm(3) library. Various processes
682   are allowed to use a simple allocator which gives the impression of a dynamic
683   shared heap to all processes. However, this in fact operates on fixed sized
684   shared memory segments allocated in the master parent process.
685   Although using threads simplifies the use of a shared dynamic heap, and that
686   it is possible for a thread to allocate thread-specific memory only, this
687   proposed feature would be for applications which need to assume that memory
688   is not normally shared. This is especially useful for the implementation of
689   secure public services such as internet server daemons, where threads can
690   introduce security problems.
691   Perhaps that the API could be as simple as implementing sheap_init(),
692   sheap_malloc(), sheap_free(), sheap_free_all() and sheap_destroy()...
693   - int sheap_init(int flags)
694     Initializes the dynamic shared memory heap. Children of this process will
695     inherit this heap. <flags> permits to specify if we want read, write,
696     execute, wired memory, as for mmap(2). Returned would be -1 on error with
697     errno set, or a sheap id.
698   - void *sheap_malloc(int id, size_t size)
699     Attempts to allocate memory from the specified sheap <id>. A pointer to a
700     block of <size> is returned, which is valid for all processes sharing this
701     heap. NULL could be returned on error.
702   - int sheap_free(void *mem)
703     Frees the specified memory block, previously allocated using
704     sheap_malloc(). Returns 0 on success, or -1 on error, with errno set.
705     Errors could include problems such as bad memory pointer supplied, block
706     already freed, etc. The sheap id to return the memory to would internally
707     be remembered.
708   - int sheap_free_all(int id)
709     Frees all blocks of memory which were allocated for this sheap <id>, if
710     any. This would probably be efficiently implemented. Returns 0 on success
711     or -1 on error with errno set.
712   - int sfree_destroy(int id)
713     Very similar to sfree_all(), but only affects the current process. This is
714     most useful for processes which are about to execve(2) or which no longer
715     need any reference to the shared resources associated with <id> sheap.
716     Once a process called this function on an sheap, it can no longer use that
717     sheap in any way.
718   Although the implementation would be efficient enough to use sheap_malloc()
719   and sheap_free() often enough, because those would internally use
720   heap-specific synchronization locks, etc, an application could use a system
721   like my pool_t allowing to only call those functions as needed to grow or
722   shrink pools of fixed sized objects, for enhanced performance.
723   I am still wondering how the sheap unique IDs would be generated. Either
724   they could be generated with system-wide unique IDs, and processes shareing
725   an sheap would be attached internally by the kernel to an sheap structure
726   using a pointer and a reference count, most probably. Because we could allow
727   inheritance beyong the process group, we can't just use process group
728   specific unique IDs...
729   To complete the interface, it might be ideal to also implement the
730   following:
731   - int sheap_lock_ctl(int id, int op)
732     Could follow flock(2) semantics and use the internal synchronization locks
733     used at sheap_malloc(), sheap_free(), etc. Would allow an application to
734     have shared and/or exclusive advisory locks on an sheap id, as well as
735     nonblock support... This would be great as a complement as flock(2)
736     problems related to temporary files and file reopenning in every process,
737     or fcntl(2) problems related to temporary files and bad performance,
738     could now be avoided by applications requireing shared memory. The locks
739     would inherently be existing per sheap id, and would require no files
740     internally.
741   Maybe I'll think of a generic semaphore system also similar to SysV ones..
742   This is all good also as it does not require any changes to the various
743   existing unix APIs. It also might be nice to support a flag at sheap
744   creation, and/or corresponding function, to control inheritance and advise
745   the vm about the type of use of memory... I.E. to replace madvise(2) and
746   minherit(2). This would be nice since those can operate on either pages or
747   entire regions, while the new ones would operate on a whole sheap id.
748   It also might be nice to allow such interfaces to specify weither to operate
749   on the calling process only, or on all processes shareing that sheap...
750   - int sheap_ctl(int id, int op, int *val, int *old)
751     Allows to control sheap wide parameters, either for all processes sharing
752     it, or for the current process. <id> specifies the sheap to perform
753     operation on. <op> can consist of SHEAP_INHERIT or SHEAP_MADVISE, and
754     one of SHEAP_GLOBAL or SHEAP_LOCAL. optional <val> allows to set the
755     needed state, such as MADV_SEQUENTIAL or 0 or 1, etc. Optional <old>
756     permits to retreive the current local or global status on said parameter.
757     Returns 0 on success or -1 on error.
758   Write a draft man page and post to BSD APIs mailing list, see what others
759   think and refine as necessary. It then could be implemented. The reason for
760   allowing dynamic creation of multiple sheaps is to allow applications to
761   separate as wanted the heaps. Because locks are needed for modifications to
762   a heap, it is good to control granularity wisely.
763   - I need to revise the interface and see which new syscall(s) are necessary,
764     and which parts could be in libc. In general allocation/free functions
765     could be in libc, but we definitely need kernel syscall for sheap id
766     creation/destruction, control etc.
767   - Syscall: sys_sheap_ctl() - create, destroy, resize, lock, flags
768   - Note: inherit control should be for fork(2) and execve(2), separately.
769
770 - It would be nice to expand pfil(9) somehow so that per-application filtering
771   rules/hooks could be used. This would allow the implementation of a firewall
772   which would easily track which applications are doing what, and to control
773   which to allow and whatnot, somewhat like Windows(tm) firewalls work.
774   This would be rather useful for click-and-point users, or simply to obtain
775   better per-process statistics, be able to lock off specific processes, etc.
776   I beleive that there is support in NetBSD already for executable unique IDs
777   or such. Perhaps that these could be used as identifiers to implement this.
778   - It might be worthwhile to also expand the system for unix credentials
779     based filtering. This also would be most useful on desktop stations.
780     This would allow to implement per-user/group filtering rules, etc.
781
782 - Some commands output XML property lists but should instead output a more
783   appropriate format for humans by default, with the option for XML.
784   These commands are: envstat, drvctl, hdaudioctl, ?
785
786 - Verify if the allqueue/alltree are properly handled in pthread.c code.
787   Also optimize out sysconf(_SC_PAGESIZE) cases.
788
789 - useradd/userdel/usermod/groups/chpass/user/userinfo(8) should probably
790   all support -d to allow specifying the alternate root to operate on.
791   File PR if needed, possibly with diffs.
792
793 - ioctl(2) should probably document that [EINTR] might be returned.
794   This however has a number of implications where either userland ioctl
795   wrappers from libc should restart such transparently or every such
796   interface should also specify that [EINTR] can be expected.
797   It is unfortunate that such a general purpose facility can block and
798   be interrupted by a signal.
799
800 - srtconfig(1) exists yet srt(4) does not
801
802 - http://mail-index.netbsd.org/tech-kern/2006/09/
803   - SEEK_HOLE|SEEK_DATA
804     (http://mail-index.netbsd.org/tech-kern/2006/09/26/0014.html)
805   - kqueue fs events enhancements
806     (topic: improving kqueue)
807
808 - Submit pkgsrc for ARIN rwhoisd
809
810 - It'd be nice for fs-utils to also support dd(1), and for userland to also
811   comport a truncate(1) command, as well as fs-utils to support this.
812
813 - Bug appears to exist in sh(1) with aliases, depending on the order of
814   aliases for mv, rm and cp using -i, one of the three doesn't work.
815   Diagnose better and file a PR as necessary.
816
817 - drvctl(4) missing
818
819 - There should be a note in the web PR form about that lines are not
820   automatically wrapped.  This however requires translations to various
821   languages (see the various send-pr.xml in tree).
822   File a PR with diff when possible, possibly doc-bug in misc.
823
824 - Fix oidentd package to use sysctl like our identd and submit patch to.
825   its author while also providing pkgsrc update+patch.
826   Moreover it probably should support ipf and pf for masq option.
827   AKA some work needed, it might be good to contact author to know if he
828   still maintains it and will accept patches upstream and to get a new
829   release out.
830
831 - Test WIP/SBCL, request from Asau
832   - Actually, -current lang/sbcl too, and try to downgrade
833     WIP's to 1.0.30
834
835 - proplib(3)
836   - http://code.google.com/p/portableproplib/
837   - ftp://ftp.netbsd.org/pub/NetBSD/misc/freza/
838   - http://cvs.pulsar-zone.net/cgi-bin/cvsweb.cgi/mmondor/mmsoftware/util/proplist-cl.c?rev=1.3;content-type=text%2Fx-cvsweb-markup
839
840 - pthread_attr_setstack(3) etc undocumented in pthread_attr(3)
841   See http://mail-index.NetBSD.org/tech-kern/2009/07/11/msg005452.html
842
843 - Devices without a suspend power hook: auich(4), vr(4), raid(4)
844   See about vr(4):
845   revision 1.98
846   date: 2009/09/06 14:10:42;  author: tsutsui;  state: Exp;  lines: +13 -10
847   Replace shutdownhook_establish(9) with pmf_device_register1(9).
848   Tested VIA VT86C100A (which is probed as VT3043).
849   See about raid(4):
850   http://mail-index.NetBSD.org/current-users/2009/10/16/msg010870.html
851
852 - To check that these be pulled up to netbsd-5:
853   http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/miscfs/procfs/procfs_linux.c?only_with_tag=MAIN
854   (PR 42053)
855   http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/kern/tty_pty.c?only_with_tag=MAIN
856   http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/kern/tty.c?only_with_tag=MAIN
857
858 - Implement crypt_r(3) in libcrypt
859
860 - Missing a few pthread functions to make mutexes and cond vars shared among processes
861   (quite an odd feature, though)
862
863 - Try building freepascal; provide pkgsrc stub if it works
864
865 - Document MAKE_JOBS and other aspects in mk.conf(5), also the PKG
866   conditionals
867
868 - TLS provided support for SMP kernel profiling, which would have to be ported
869   to -current considering the time which has passed since:
870   http://mail-index.netbsd.org/tech-kern/2010/12/11/msg009519.html
871
872 - See Olivier MATZ's TCP ephemeral ports patch:
873   http://mail-index.netbsd.org/tech-kern/2012/02/02/msg012624.html
874
875 - Request for project specs to remove the big network lock
876   http://mail-index.netbsd.org/tech-net/2011/09/09/msg002778.html
877
878 - "hot swap" storage devices
879   http://mail-index.netbsd.org/tech-kern/2011/09/20/msg011514.html
880
881 - boehm-gc does not use the proper interface to setup the stack.
882   See lib/46147
883
884 - Verify that autoload of modules cannot proceed for kernels not built with
885   MODULAR support, for security reasons.  Or, provide another option which can
886   be disabled.  See kern/45235.
887
888 - DRM/GEM/KMS
889   https://github.com/gsutre/netbsd-drmgem
890   <dh> I wish someone would do the necessary research and produce a 
891        single document somewhere that says "these directories are the 
892        code involved in the DRM/GEM/KMS/Xfubar mechanisms, this is how 
893        that code's connected together, these are the pieces or 
894        interfaces that particularly suck, and these are the pieces we 
895        need to update/replace/add to make the latest X work"
896        I have been meaning to try to do this, but I haven't had time 
897        and like everyone else (apparently) I don't know where to
898        start
899
900 - Improve gnats feedback exemple.  The exemple is too large and appears before
901   the actual useful information.  This confuses some people who wonder why
902   they get a port-eniac/1234 feedback reminder :)
903
904 - Confirm if pool(9) is deprecated in favor of pool_cache(9).  If so, offer to
905   migrate the few left usages of pool(9) to pool_cache(9) on -current.
906
907 - Verify if gettimeofday(2) could be significantly faster if implemented
908   around sysctl(3) or if it obtained the information from a special read-only
909   page which every process shared and which the kernel updated.
910   It appears that _lwp_ctl(2) maps such a page as well, and may be used as an
911   example.
912   Other related possible speed improvements would be for getpid(2),
913   getuid(2)/getgid(2)/getgroups(2) and other simple informative syscalls which
914   some naive code may call at an unreasonable rate without local caching.
915   We could end up with two process-mapped pages: one for the proc structure or
916   a limited version of it, and one for various global resources updated by the
917   kernel.  This or these pages should of course only be readable, not
918   writable, not executable.
919   It appears that sysctl(3) falls back to a the __sysctl(2) syscall when the
920   stub is not a user one.
921   This means that some read-only sysctls currently using the syscall could
922   also be optimized as part of this project.  sysconf(3) is another candidate.
923   Doing sysctl(3) first could possibly then provide the clean interface needed
924   for other users, perhaps even for _lwp_ctl(2).
925   The kernel should ideally not need to update every timer in the shared page
926   for performance and energy saving considerations.
927
928 - Discuss on tech-toolchain if the default compiler's policy on implicit
929   function types should be to error rather than warn.  This would avoid
930   segfaulting (and possibly vulnerable) code on amd64, because such code would
931   simply not build without error.  C99 deprecated implicit int, yet common
932   practice is still only to warn and assume int.
933
934 - drvctl(4) is not documented.  Also, is the ioctl(2) proplib interface used
935   by devpubd(8) the proper way to poll and get system notifications?
936   Document the device and its ioctls, and audit the code.
937
938 - Try to make a pkgsrc stub for xxxterm if it doesn't already exist
939
940 - util(3):
941   <dh_work> libutil should grow an estrto{l,ul,ll,ull,d}
942   <phadthai> hmm would these exit on error or return a pointer on success 
943              and NULL on error, or 0 on success or errno value on error?
944   <phadthai> a quick search failed to show me an existing implementation
945   <dh_work> they'd exit on error like emalloc and such
946
947 - The sysctl rlimit knobs should be better documented, and the getrlimit(2)
948   man page should clearly specify which sysctl knob corresponds to which
949   definition, potentially with more information about what occurs when the
950   soft and hard limits are reached.
951
952 - makemandb has multiple issues: it can crash (bin/46637) possibly opening the
953   possibility of a vulnerability, it can exit on a man page parsing error and
954   fail to continue processing other man pages, and it doesn't give enough
955   clues when reporting a parsing error (bin/46642).  It would be nice to audit
956   and as necessary rewrite some of it :(  It's also likely that another
957   language than C be better suited for this.
958
959 - mtree should support PaX attributes, even if those are part of the ELF
960   header...  if possible and reasonable.
961
962 - Make ftp(1) report the address it connects to in terse mode (now that
963   connection attempts and failings are no longer reported).
964   http://mail-index.netbsd.org/tech-net/2012/06/29/msg003511.html
965
966 - According to obache@
967   OpenSSL in NetBSD current/6.0 is pre-release snapshot of 1.0.1-stable branch,
968   so some API was changed before 1.0.1 release (include beta release) after
969   the snapshot point.
970   http://cvs.openssl.org/chngview?cn=21865
971   So this issue will be affect to any platforms using
972   OpenSSL-1.0.1-stable branch before beta1 release.
973
974 - Apparently glib2 built with kqueue support is slower than without it,
975   verify if it uses a syscall per set change rather than one per main loop
976
977 + Create net/wgetpaste package to install
978   http://wgetpaste.zlin.dk/wgetpaste-2.20.tar.bz2
979   and make it depend on bash, wget, and include a default services.conf:
980 SERVICES="${SERVICES} lugons bpaste"
981 ENGINE_lugons=lodgeit
982 URL_lugons="https://paste.lugons.org/"
983 ENGINE_bpaste=lodgeit
984 URL_bpaste="http://bpaste.net"
985 DEFAULT_SERVICE=bpaste
986
987 - On netbsd-6, wapbl(4) mentions in CAVEATS that quotas do not work with it.
988   In actuality, the new quota system works, after using newfs -q, and without
989   quota related option in fstab(5).
990   Another problem is that quota(1) should also mention the new quota system
991   along with newfs -q.
992   edquota(8) doesn't seem to work in interactive/editor mode, but works using
993   command line options such as -h.  This ideally should be fixed, or the
994   editor support removed, or at least declared as buggy.
995   When reaching the block quota limit on netbsd-6, a buggy error includes
996   (null):
997   /mnt: write failed, (null) block limit reached
998   Some commands will also report odd errors such as "/mnt: not mounted" when
999   it is mounted.  This mostly happened when trying to use quota 1 support,
1000   I'm not sure if quota1 is broken or not.
1001
1002 - tun(4) appears to support cloning like tap(4), where opening /dev/tun would
1003   possibly work.  Verify if so, and update tun(4) and MKDEV appropriately.
1004
1005 08:24 <leot> is there any NetBSD developer around? Please update this wiki 
1006              page: 
1007 http://wiki.netbsd.org/tutorials/how_to_install_netbsd_from_an_usb_memory_stick/
1008 | Now the (pre-)installation is very easy thanks to installimages (always for 
1009              amd64 and i386)... for more info please give also a look here: 
1010              ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-5.1.2/memstick/README
1011 (this 
1012              should apply as well for 5.* and 6.0*)
1013 08:24  * leot # dd if=NetBSD-6.0_BETA2-i386-install.img of=/dev/sd1d # :)
1014
1015 - The intro(2) manual page fails to mention ioctl, sysctl, kvm...
1016
1017 - The intro(3) manual page still mentions libtermcap instead of libterminfo.
1018
1019 - The ktrace(2) manual page does not list all supported flags.
1020
1021 - The pserialize(9) man page failed to mention pserialize_init(9).  This has
1022   been fixed on -current but has not been pulled up to netbsd-6
1023 - The ntpd recent fixes
1024   (http://cvsweb.netbsd.org/bsdweb.cgi/src/external/bsd/ntp/dist/ntpd/ntp_io.c.diff?r1=1.9&r2=1.10&only_with_tag=MAIN)
1025   should be pulled up to netbsd-6
1026
1027 - Document cpuctl(4) and its ioctls
1028
1029 - src/share/locale/time/Makefile missing reference to existing de_DE.UTF-8.src
1030
1031 - Support sysctl options at kernel boot time, given by bootloader
1032
1033 - Support sysctl option for rsync(2) to flush the disk cache using
1034   DIOCCACHESYNC like FSYNC_CACHE/FDISKSYNC with fsync_range(2).
1035   Another possibility could be an FFS mount option other than SYNC.
1036   This is relevant for FFS without WAPBL, as WAPBL implicitely flushes the
1037   disk cache when synchronizing its log by default (also sysctl configurable).
1038
1039 - Introduce cgd(4) in security(7)
1040
1041 - Verify if print/lout got updated to 3.40 after freeze is over
1042
1043 - Apropos -p doesn't seem to work properly.  Moreover, there are oddities,
1044   like "apropos -p 1000 prop | less" not matching prop_array* or proplib*.
1045   There also should be support for AND and OR, to match multiple words.
1046   There seems no way to have it show results for pthread_getname_np using
1047   "pthread", "pthread+name", "pthread name", it only works with
1048   "pthread_getname_np" which is pretty useless.
1049
1050 - 19:27 <@neitzel> And I noticed we still have a pretty old (as in:
1051   "outdated") BUGS section in lo(4).
1052
1053 - Two Boehm-GC packages
1054   Check png package buildlink include about BUILDLINK_TRANSFORM
1055   PR 41893
1056 14:22 <ASau> You should just carefully check that you change library name, 
1057              generate correct pkg-config file, and try building your software 
1058              against new package.
1059
1060 - /usr/src/common/lib/libc/gen/ptree.c
1061   Patricia trees in libc seem to be undocumented.
1062   Actually, other things in gen might not be documented (rb, radixtree), and
1063   possibly redundant with ptree (radixtree)?
1064
1065 - We have a wait(1) man page but no external wait(1) utility, only sh and csh
1066   builtins, which behave differently.  Thus, we could obsolete the wait(1)
1067   manual page and fix the sh(1) manual to better document its wait builtin
1068   command.  Also, sh(1) does currently mention wait, but it only specifies
1069   that a job % can be specified, when it actually accepts and works fine with
1070   PIDs.
1071