<?xml version="1.0"?>
<!DOCTYPE webpage
  PUBLIC "-//NetBSD//DTD Website-based NetBSD Extension//EN"
      "http://www.NetBSD.org/XML/htdocs/lang/share/xml/website-netbsd.dtd">

<webpage id="contrib-projects">
  <config param="desc" value="NetBSD Projects"/>
  <config param="cvstag" value="$NetBSD: projects.xml,v 1.130 2008/08/04 05:36:32 christos Exp $"/>
  <config param="rcsdate" value="$Date: 2008/08/04 05:36:32 $"/>
  <head>
    <title>NetBSD Projects</title>
  </head>

  <para><ulink url="../about/disclaimer.html#bsd-daemon"> <html:img
  align="right" src="../images/BSD-daemon.jpg" border="0" width="146"
  height="129" alt="BSD daemon"/></ulink>This page contains a
  non-exhaustive list of projects that either immediately
  benefit NetBSD or are of general interest to NetBSD and the Open
  Source Community.  Most of the projects listed here have at least one
  NetBSD developer who has expressed interest and would be willing to
  assist/oversee the implementation to a certain degree.</para>

  <para>A listing of possible NetBSD Summer-of-Code project suggestions
  can be found <ulink url="soc-projects.html">on the NetBSD
  Summer-of-Code page</ulink>.
  </para>

  <para>If you are interested in working on any of these projects,
  please contact the mailing list referenced next to each item, and
  possibly answer as many questions from our <ulink
  url="soc-application.html">Project Application HowTo</ulink> as
  possible.  The interested developers will be glad to respond to you
  there.</para>

  <para>Some of the projects have timing estimates.  Times are estimated
  conservatively, for a single person working full time on the project.
  An experienced developer, with knowledge of the changed subsystem/area
  of code, will probably be able to complete the project in half or less
  of the estimated time.  As with all estimates, they might be wrong
  though &mdash; in both directions.  Other projects include more
  research or have no hard target for other reasons.  For these projects
  no estimate is given.</para>

  <para>Available projects are grouped in the following areas and the
  lists were last updated on <date
  format="cvs">$Date: 2008/08/04 05:36:32 $</date>:</para>

  <toc />

  <para>You might find other ideas in <filename
  role="cvsweb">src/doc/TODO</filename> and <filename
  role="cvsweb">pkgsrc/doc/TODO</filename>.  In addition, the <ulink
  url="../developers/features/">NetBSD Port/Feature Cross
  Reference</ulink> offers a large number of smaller projects:
  <quote>just</quote> implement all the missing (marked
  <emphasis>N</emphasis>) or <emphasis>partial</emphasis>
  features.</para>

  <!--

    PROJECT TEMPLATE.  PLEASE RESPECT FIELD ORDER.

    <projects>
      <projects-toc />

      <project id="">
        <title></title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact>&a.name; <email>somebody</email></contact>
          <contact><mlist>tech-userlevel</mlist></contact>
          <who>First working person</who>
          <who>Nth working person</who>
        </project-details>

        <para>...</para>
      </project>

  -->

  <sect1 id="userland">
    <title>Generic userland work</title>

    <projects>
      <projects-toc />

      <project id="wifi-tool">
        <title>WiFi browser</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>1 month</length>
          <contact><mlist>tech-net</mlist></contact>
          <contact><mlist>tech-userlevel</mlist></contact>
        </project-details>

        <para>Create an easy to use wifi setup widget for NetBSD: browse
        and select networks in the vicinity by SSID, BSSID, channel,
        etc.</para>
      </project>

      <project id="bsdmake-enhancements">
	<title>Make enhancements</title>

	<project-details>
	  <priority>0</priority>
	  <difficulty>1</difficulty>
	  <length>1 month</length>
	  <contact><mlist>tech-toolchain</mlist></contact>
	</project-details>

	<para>BSD make (aka pmake) uses suffix rules (.c.o: ...)
	instead of pattern rules (%.c:%.o: ...) which are more
	general and flexible. The suffix module should be re-written
	so that is based on pattern rules, and pattern rules should
	be implemented. This will gain 90% compatibility with GNU make,
	and the rest (variable manipulations) can easily be added.</para>
      </project>

      <project id="rsync">
        <title>BSD licensed rsync replacement</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>2 months</length>
          <contact><mlist>tech-userlevel</mlist></contact>
        </project-details>

        <para>Create a BSD licensed drop-in replacement for rsync that can
        handle large numbers of files/directories and large files
        efficiently. The idea would be to not scan the filesystem for
        every client to detect changes that need transfer, but rather
        maintain some database that can be queried (and that also
        needs updating when files are changed on the server). See
        &man.supservers.8; for some ideas of how this could
        work. Compatibility with existing rsync clients should be
        retained.  </para>
      </project>

      <project id="troff">
        <title>BSD licensed troff/nroff replacement</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-userlevel</mlist></contact>
        </project-details>

        <para>Write a replacement for groff that is BSD licensed.
        Earlier versions of BSD UNIX had one, so maybe it could be
        revived from an earlier version of BSD UNIX, and updated to
        support newer groff-like features, at least enough to support
        our current mandoc macros.</para>
      </project>

    </projects>
  </sect1>

  <sect1 id="kernel">
    <title>Generic kernel work</title>

    <projects>
      <projects-toc />

      <project id="improve-caching">
        <title>Improve caching</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>4 months</length>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>Replace all of the knobs and wacky algorithms for sizing
        the many separate LRU caches in our kernel (for pages and for
        various kinds of objects like metadata buffers, mbufs, etc.)
        with a generalized (N-way) algorithm like IBM's ARC ("Adaptive
        Replacement Cache") to size all the caches for optimal hit
        rate.</para>
      </project>

      <project id="tcp-writing">
        <title>Improve writing to the file system</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>2 months</length>
          <contact><mlist>tech-kern</mlist></contact>
          <who>Sumantra R. Kundu <email>sumantra@gmail.com</email>,
          see the <ulink
          url="http://netbsd-soc.sourceforge.net/projects/congest/">SoC
          2006 "congest" project</ulink></who>
        </project-details>

        <para>Apply TCP-like flow control to processes writing to the
        filesystem (put them to sleep when there is "congestion"), to
        avoid enormous backlogs and provide more fair allocation of disk
        bandwidth.</para>
      </project>

      <project id="nand-flash">
        <title>NetBSD block device driver for NAND flash chips</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>2 months</length>
          <contact><mlist>tech-embed</mlist></contact>
          <who>&a.jmcneill; <email>jmcneill AT NetBSD.org</email></who>
        </project-details>

      </project>

      <project id="compressed-cache">
        <title>Compressed Cache System</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>2 months</length>
          <contact><mlist>tech-embed</mlist></contact>
        </project-details>

         <para>NetBSD version of compressed cache system (for low-memory
         devices): <ulink
         url="http://linuxcompressed.sourceforge.net/"/>.</para>
      </project>

      <project id="madwifi-ng">
        <title>Updated Atheros WiFi support</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>The latest Linux code in madwifi-ng includes a major code
        overhaul and support for advanced features (SuperAG @ 108Mbps,
        eXtended Range) available in these parts.  It would be nice to
        have these features in NetBSD, under a BSD license.</para>
      </project>

      <project id="buffer-queue">
        <title>More intelligent buffer queue management</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>2-3 months</length>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>NetBSD has a fixed, kernel-wide upper limit on transfer
        size, which is currently set to 64k on most port.  This is too
        small to have good performances on modern IDE and SCSI hardware;
        on the other hand some devices can't do more than 64k, and in
        some case are even limited to less (the Xen virtual block device
        for example).  Software RAID will also cause requests to be split
        in multiple smaller requests.</para>

        <para>NetBSD would greatly benefit from a more intelligent
        buffer queue management between the block device drivers and the
        higher levels (the framework here currently only applies some
        selectable algorithm to sort the queue).  This framework should
        be able to split buffers too large for a device into smaller
        ones, or aggregate multiple contiguous requests into a larger
        one.  This will most probably require change to at last some
        block device drivers.</para>
      </project>

      <project id="aprint">
        <title>Convert kernel printf() to aprint_*() or log()</title>

        <project-details>
          <priority>1</priority>
          <difficulty>1</difficulty>
          <length>2-4 Weeks</length>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>
  
        <para>Most of the NetBSD kernel tree still uses &man.printf.9;
        to send messages to the console, primarily during boot and
        autoconfiguration.  Each printf during autoconfiguration should
        be audited, and replaced with the appropriate
        <function>aprint_*</function> function, to make the boot verbose
        option work properly.</para>

        <para>Additionally, printfs in drivers that report status, or
        errors during normal kernel operation should be converted to use
        the &man.log.9; function instead.</para>

      </project>


    </projects>
  </sect1>

  <sect1 id="filesystems">
    <title>Filesystems</title>

    <projects>
      <projects-toc />

      <project id="simplify-ffs">
        <title>Simplify FFS</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>8-12 months</length>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>Remove the residual geometry code and datastructures from
        FFS (keep some kind of <quote>allocation groups</quote> but
        without most of what cylinder groups now have) and replace
        blocks and fragments with extents, yielding a much simpler
        filesystem well suited for modern disks.  The result would be
        useful to many operating systems beyond just NetBSD, since
        UFS/FFS is used in so many different kernels.</para>
      </project>

      <project id="xfs">
        <title>BSD licensed XFS</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>1 year for port; 3 years for rewrite by one
          developer</length>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>Implement a BSD licensed XFS.  A GPL licensed
        implementation of XFS is available at <ulink
        url="http://oss.sgi.com/projects/xfs/"/>.  It might be
        worthwhile to do a port of this filesystem and allow it to run
        as a LKM.  See also <ulink
        url="http://people.freebsd.org/~rodrigc/xfs/">FreeBSD's
        port</ulink>.</para>
      </project>

      <project id="jfs">
        <title>BSD licensed JFS</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>1 year for port; 3 years for rewrite by one
          developer</length>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>Implement a BSD licensed JFS.  A GPL licensed
        implementation of JFS is available at <ulink
        url="http://jfs.sourceforge.net/"/>.  It might be worthwhile to
        do a port of this filesystem and allow it to run as a LKM.</para>
      </project>

      <project id="usermode-ffs">
        <title>File system testing in usermode</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>2-3 months</length>
          <contact><mlist>tech-kern</mlist></contact>
          <who>&a.pooka; <email>pooka@NetBSD.org</email> as part of the
          GSoC 2005 <ulink
          url="http://netbsd-soc.sourceforge.net/projects/userfs/">userfs</ulink>
          project</who>
        </project-details>

        <para>Develop a set of libraries that permit compiling and
        running file system code in usermode. The primary purpose for
        these libraries is to permit running unit tests on the file
        system code.</para>

        <para>Also develop a test interface and a number of test cases
        to use the libraries for testing file systems. The initial test
        cases should demonstrate the functionality of the test
        system.</para>
      </project>

      <project id="kernfs-rewrite">
        <title>Rewrite kernfs and procfs</title>

        <project-details>
          <priority>3</priority>
          <difficulty>5</difficulty>
          <length>2-3 months</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>kernfs is a virtual file system that provides the user
        several information about the current system and, in some cases,
        allows him to configure some aspects of the kernel through those
        virtual files.  procfs is another virtual file system that
        provides information about the currently running
        processes.</para>

        <para>These two file systems are written in a non-extensible
        way.  For example, kernfs is built on a hardcoded table that
        always exposes the same set of files; there is no way for other
        system areas to add or remove entries from the kernfs contents.
        procfs has similar issues as someone might think of a subsystem
        that could benefit from attaching information of its own to each
        running process.  The current code is not modular, not
        well-designed and, as time has shown, there probably remain
        serious security bugs in them.</para>

        <para>Linux exposes some APIs that abstract procfs' contents and
        allow external code to manage its entries by adding or removing
        files and/ or directories.  This is a very interesting feature
        when writing loadable kernel modules as they can use this
        virtual file system to provide a way of interaction with the end
        user.</para>

        <para>NetBSD could benefit of similar APIs for both kernfs and
        procfs.  This project would consist on adding these APIs, which
        most likely requires (or suggests) a full rewrite of these file
        systems.  The developer should keep in mind the distinction
        between the two to avoid having a procfs similar to the one in
        Linux, which mixes system configuration and process
        management.</para>

        <para>In order to keep the new implementations simple, the
        developer should investigate the possibility of using tmpfs as a
        backend for kernfs and procfs.  With some changes, one could
        create a kernel "library" that allowed the creation of virtual
        file systems with few code.  For example, it's unlikely that the
        directory management routines will change among the three file
        systems, so the code from tmpfs should be reused.  Similarly
        other features should be reusable, making procfs's and kernfs's
        code a lot simpler than currently is.</para>

        <para>Alternatively, investigate FreeBSD's pseudofs and see if
        this could be a useful for this project and base for all the
        file systems mentioned above.</para>

        <para>When working in this project, it is very important to
        write a complete regression test suite for procfs and kernfs
        beforehand to ensure that the rewrites do not add
        incompatibilities.</para>
      </project>

      <project id="dotdot">
        <title>Fix <quote>..</quote> semantics, once and for all</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact>&a.perry; <email>perry AT NetBSD.org</email></contact>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>In a file system with symlinks, the file system becomes a
        graph rather than a tree. The meaning of <quote>..</quote> and
        the current working directory becomes somewhat ambiguous in such
        an environment.</para>

        <para>Rob Pike implemented a neat way of fixing this for Plan
        9. It is described in <ulink
        url="http://cm.bell-labs.com/sys/doc/lexnames.html"/>.  The
        project is simply to re-implement this for NetBSD.</para>
      </project>

      <project id="tmpfs-snapshot">
        <title>Add <quote>snapshots</quote> to tmpfs</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>Add memory-efficient <quote>snapshots</quote> to tmpfs.
        A snapshot is a <quote>view</quote> of the filesystem, frozen at
        a particular point in time.  The snapshotted filesystem is not
        frozen, only the view is.  That is, you can continue to
        read/write/create/delete files in the snapshotted
        filesystem.</para>

        <para>The interface to snapshots may resemble the interface to
        null mounts, e.g., 'mount -t snapshot /var/db /db-snapshot'
        makes a snapshot of /var/db/ at /db-snapshot/.</para>

        <para>You should exploit features of the virtual memory system
        like <quote>copy-on-write</quote> memory pages to lazily make
        copies of files that appear both in a live tmpfs and a snapshot.
        This will help conserve memory.</para>
      </project>

      <project id="tmpfs-memory-usage">
        <title>Memory-usage policies for tmpfs</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>Add configurable memory-usage policies to tmpfs, per
        discussions on NetBSD's tech-kern mailing list: % total memory,
        min/max kilobytes, etc.</para>
      </project>

      <project id="iso9660-extensions">
        <title>ISO9660 extensions</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>Add support for Apple's extensions to ISO9660 to makefs,
        especially the ability to label files with Type &amp; Creator
        IDs.  See <ulink
        url="http://developer.apple.com/technotes/fl/fl_36.html"/>.</para>
      </project>
    </projects>
  </sect1>

  <sect1 id="networking">
    <title>Networking</title>

    <projects>
      <projects-toc />

      <project id="teredo">
        <title>Teredo: Tunneling IPv6 over UDP through NATs</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-net</mlist></contact>
        </project-details>

        <para><ulink url="http://www.ietf.org/rfc/rfc4380.txt"/></para>
      </project>

      <project id="kismet">
        <title>Kismet</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-net</mlist></contact>
        </project-details>

        <para>Improve on the Kismet design and implementation in a
        Kismet replacement for BSD.</para>
      </project>

      <project id="policy-routing">
        <title>Policy routing</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>3 months</length>
          <contact><mlist>tech-net</mlist></contact>
        </project-details>

        <para>Implement the ability to route based on properties like
        QoS label, source address, etc.</para>
      </project>

      <project id="routing-cleanup">
        <title>Cleanup routing code</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>2 months</length>
          <contact><mlist>tech-net</mlist></contact>
        </project-details>

        <para>Write tests for the routing code and re-factor.  Use more
        and better-named variables.</para>

        <para>PCBs and other structures are sprinkled with route caches
        (struct route).  Sometimes they do not get updated when they
        should.  It's necessary to modify rtalloc(), at least.  Fix
        that.  Note XXX in rtalloc(); this may mark a potential memory
        leak!</para>
      </project>

      <project id="wlan-sockopts">
        <title>WLAN socket options</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-net</mlist></contact>
        </project-details>

        <para>Add socket options to NetBSD for controlling WLAN
        transmit parameters like transmit power, fragmentation
        threshold, RTS/CTS threshold, bitrate, 802.11e access category,
        on a per-socket and per-packet basis.  To set transmit
        parameters, pass radiotap headers using &man.sendmsg.2; and
        &man.setsockopt.2;.</para>
      </project>

      <project id="samplerate">
        <title>Generic SampleRate link-adaptation module</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-net</mlist></contact>
        </project-details>

        <para>Create/modify a 802.11 link-adaptation module that works
        at least as well as SampleRate, but is generic enough to be
        re-used by device drivers for ADMtek, Atheros, Intel, Ralink,
        and Realtek 802.11 chips.  Make the module export a link-quality
        metric (such as ETT) suitable for use in linkstate routing.  The
        SampleRate module in the Atheros device driver sources may be a
        suitable starting point.</para>
      </project>

      <project id="802.11-scheme">
        <title>802.11 operating scheme</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-net</mlist></contact>
        </project-details>

        <para>Design and program a scheme for extending the operating
        range of 802.11 networks by using techniques like <quote>frame
        combining</quote> and error-correcting codes to cope with low
        S/(N+I) ratio.  Implement your scheme in one or two WLAN device
        drivers &mdash; Atheros &amp; Realtek, say.</para>
      </project>

      <project id="ayame-mpls">
        <title>Ayame MPLS</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-net</mlist></contact>
        </project-details>

        <para>Integrate the <ulink url="http://www.ayame.org/">Ayame
        MPLS stack</ulink> into NetBSD-current.</para>
      </project>

      <project id="802.11-transmit-queue">
        <title>802.11 transmit queueing</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-net</mlist></contact>
        </project-details>

        <para>Modern 802.11 NICs provide two or more transmit
        descriptor rings, one for each priority level or 802.11e access
        category.  Add to NetBSD a generic facility for placing a packet
        onto a different hardware transmit queue according to its
        classification by pf or IP Filter.  Demonstrate this facility on
        more than one 802.11 chipset.</para>
      </project>

      <project id="mbuf-audit">
        <title>mbuf audit</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-net</mlist></contact>
          <who>Pavel Cahyna <email>pavel@NetBSD.org</email>, see the
          <ulink
          url="http://netbsd-soc.sourceforge.net/projects/mbuf/">SoC
          2006 "mbuf" project</ulink></who>          
        </project-details>

        <para>Audit NetBSD for misuse of shared/read-only mbuf storage,
        and fix bugs as you find them.  Improve the mbufs API to help
        developers protect against misuse in the future.</para>
      </project>
    </projects>
  </sect1>

  <sect1 id="pkgsrc">
    <title>pkgsrc infrastructure</title>

    <projects>
      <projects-toc />

      <project id="pkgsrc-unpriv">
        <title>Unprivileged pkgsrc builds</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-pkg</mlist></contact>
          <who>J&ouml;rg Sonnenberger <email>joerg@NetBSD.org</email></who>
        </project-details>

        <para>To create packages that are usable by anyone, pkgsrc
        currently requires that packages be built with superuser
        privileges. It is already possible to use pkgsrc in great parts
        without such privileges, but there haven't been many thoughts
        about how the resulting binary packages should be specified. For
        example, many packages don't care at all about the owner/group
        of their files, as long as they are not publicly overwritable.
        In the end, the binary packages should be as independent from
        the build environment as possible.</para>

        <para>For more information about the current state, see the
        <quote>How to use pkgsrc as non-root</quote> section in the
        pkgsrc guide,
        <ulink
        url="http://mail-index.NetBSD.org/tech-pkg/2006/10/09/0000.html">J&ouml;rg's
        mail on DESTDIR support</ulink> as well as <filename
        role="cvsweb">pkgsrc/mk/unprivileged.mk</filename>.</para>

      </project>

      <project id="pkg_install">
        <title>pkg_install rewrite</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-pkg</mlist></contact>
          <who>J&ouml;rg Sonnenberger <email>joerg@NetBSD.org</email>,
          see the <ulink
          url="http://netbsd-soc.sourceforge.net/projects/pkg_install/">SoC
          2006 "pkg_install" project</ulink></who>
        </project-details>

        <para>pkg_install, the set of binary utilities used to install,
        remove, create and (to some extent) update packages, has to be
        rewritten from scratch because the current code is very
        difficult to extend and modify.  Aside from rewriting these tool
        set, it would be interesting to add new functionality (basically
        improve updates).</para>

        <para>You can find more information about how the new tool
        would need to be in <ulink
        url="http://mail-index.NetBSD.org/tech-pkg/2006/04/15/0012.html">this
        tech-pkg@ thread</ulink>.</para>
      </project>

      <project id="dri">
        <title>Accelerated OpenGL</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-kern</mlist></contact>
          <contact><mlist>tech-x11</mlist></contact>
          <who>&a.bjs; <email>bjs@NetBSD.org</email></who>
        </project-details>

        <para>Make DRI and DRM work under NetBSD so that, at least, the
        free drivers included in a standard XFree86/X.Org distribution
        work in accelerated 2D and 3D modes.</para>
      </project>

    </projects>
  </sect1>

  <sect1 id="gnome">
    <title>GNOME porting and packaging</title>

    <para>Our goal is to make NetBSD a <emphasis>first-class supported
    platform</emphasis> under which the GNOME desktop can run to its full
    power.  There is still a long way to achieve this and, truth to be told,
    it might be impossible to accomplish completely (on par to Linux) unless
    the GNOME developers are shown that they should care a bit more about
    portability and do part of the work themselves.  At the moment only
    GNU/Linux can be considered a fully-supported platform, basically
    because almost all GNOME developers do their daily work under this
    operating system.</para>

    <para>No matter what, we support that NetBSD is a very good and well
    designed free operating system, and we believe that it can also make
    a great desktop environment if it is able to support all the
    features included in GNOME.  Furthermore, being good on the desktop
    will attract newer users, which in the long term means we will get
    new and fresh developers too!</para>

    <para>This section contains a list of pending tasks that need to be
    resolved before the GNOME desktop can be considered fully-functional
    under a NetBSD system.  Should you want to work on any of them, ask
    the contact person for further information.  Many thanks in
    advance!</para>

    <note>
      <title>Important information</title>

      <para>Before attacking any of the projects below, please take a
      look at the <ulink url="../docs/pkgsrc/gnome.html">GNOME
      packaging and porting</ulink> guide.  It contains some important
      documentation about handling GNOME packages and patching their
      source code.</para>
    </note>

    <para>Now, the projects list:</para>

    <projects>

      <projects-toc />

      <project id="fix-dbus-tests">
        <title>Fix D-Bus regression tests</title>

        <project-details>
          <priority>8</priority>
          <difficulty>6</difficulty>
          <length>1 week</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
        </project-details>

        <para>D-Bus is a new key component within the GNOME desktop.  It
        is starting to be used by many different applications.
        Therefore, there should be high guarantees that it works as
        expected to avoid problems in unexpected places.</para>

        <para>The easiest way to check this is by running D-Bus'
        regression tests and ensuring all tests pass.  At the time of
        this writing, only two regression tests in dbus-0.92 failed
        under NetBSD 4.0_BETA.  Diagnose and fix these.</para>

        <para>To get started, enable the <filename>debug</filename>
        option in <filename>PKG_OPTIONS</filename>, rebuild
        <filename>sysutils/dbus</filename> from pkgsrc, enter the work
        directory and run <filename>gmake check</filename> manually to
        see the problems appear.</para>

      </project>

      <project id="cleanup-libgtop">
        <title>Clean up libgtop</title>

        <project-details>
          <priority>8</priority>
          <difficulty>6</difficulty>
          <length>2 weeks</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
          <who>Igor Trindade Oliveira <email>vaxen AT
          gotfault.net</email></who>
        </project-details>

        <para>libgtop is a library that provides an abstract interface
        for querying system information such as the running process
        table, network status, etc.  It is somewhat supported under
        NetBSD but there are still too many local patches in the pkgsrc
        packages (OK, some of them are specific to DragonFly
        BSD).</para>

        <para>This is one of the hardest pieces to deal with when
        updating GNOME to a newer version.  There are so many local
        changes and the code is so confusing that it is really complex
        to handle updates.  Your task here is to clean up those local
        patches and feed them back to the mainstream authors.</para>

        <para>A lot of extra bonus points if you redo the patches to
        avoid OS-specific precompiler macros completely and develop new
        <filename>configure</filename> tests instead.  Really, there is
        no point in doing it differently.</para>

        <para>For more details on how this should be done please see the
        patches and the bug reports filled back when we did previous
        cleanups:</para>

        <itemizedlist>
          <listitem>
            <para><ulink
            url="http://bugzilla.gnome.org/show_bug.cgi?id=103086">103086:
            Extra libraries required in pkgconfig file</ulink></para>
          </listitem>

          <listitem>
            <para><ulink
            url="http://bugzilla.gnome.org/show_bug.cgi?id=135674">135674:
            Add NetBSD support and fix some problems in
            *BSD</ulink></para>
          </listitem>

          <listitem>
            <para><ulink
            url="http://bugzilla.gnome.org/show_bug.cgi?id=139809">139809:
            Argument passing between library and server
            broken</ulink></para>
          </listitem>

          <listitem>
            <para><ulink
            url="http://bugzilla.gnome.org/show_bug.cgi?id=337207">337207:
            msg_limits.c build broken in NetBSD</ulink></para>
          </listitem>

          <listitem>
            <para><ulink
            url="http://bugzilla.gnome.org/show_bug.cgi?id=337234">337234:
            Obsolete code in proctime.c breaks the build under
            NetBSD</ulink></para>
          </listitem>

          <listitem>
            <para><ulink
            url="http://bugzilla.gnome.org/show_bug.cgi?id=337235">337235:
            fsusage.c broken in NetBSD (no statfs)</ulink></para>
          </listitem>

          <listitem>
            <para><ulink
            url="http://bugzilla.gnome.org/show_bug.cgi?id=337246">337246:
            Missing GLIBTOP_SUID_* declarations in
            sysdeps</ulink></para>
          </listitem>

          <listitem>
            <para><ulink
            url="http://bugzilla.gnome.org/show_bug.cgi?id=337247">337247:
            freebsd sysdeps need to link against libkvm</ulink></para>
          </listitem>

          <listitem>
            <para><ulink
            url="http://bugzilla.gnome.org/show_bug.cgi?id=337251">337251:
            freebsd sysdeps miss glibtop_get_sysinfo_s</ulink></para>
          </listitem>
        </itemizedlist>

      </project>

      <project id="port-mono">
        <title>Port Mono</title>

        <project-details>
          <priority>7</priority>
          <difficulty>9</difficulty>
          <length>Unspecified</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
        </project-details>

        <para>GNOME 2.16 will include some applications in the core
        distribution that need the <ulink
        url="http://www.mono-project.com/">Mono</ulink> runtime
        environment to work.  There are also several very interesting
        applications out there that need Mono such as Beagle or F-Spot.
        Unfortunately, Mono does not work well under NetBSD yet.</para>

        <para>It is expected that a lot of new software will be
        developed using Mono, so it is of high priority to get the
        runtime to work under NetBSD.  Otherwise we will not be able to
        use Mono-based applications.  Things can get a lot worse if one
        of these Mono-based programs ends up being a key component
        within the GNOME desktop.</para>

      </project>

      <project id="gnome-vfs-kqueue">
        <title>Add kqueue support to GNOME VFS</title>

        <project-details>
          <priority>7</priority>
          <difficulty>5</difficulty>
          <length>1 week</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
          <who>Alan <email>jumpi AT netbsd.com.br</email></who>
        </project-details>

        <para>GNOME VFS provides an interface that allows monitoring
        external modifications to files and directories.  The interface
        provides asynchronous notifications to the interested
        applications.  For example, Nautilus uses them to update open
        foldres in real time to reflect the real on-disk
        contents.</para>

        <para>GNOME VFS uses the File Alteration Monitor (fam) to watch
        out for external file changes; this daemon made GNOME VFS
        completely unaware of the OS-specific mechanism used to receive
        asynchronous notifications.  FAM was already ported to support
        NetBSD's kqueue framework, providing real time notifications of
        file changes.</para>

        <para>However, starting from version 2.13.2, GNOME VFS
        implements support for <emphasis>inotify</emphasis> (a Linux-only interface) straight
        into its code.  This means that FAM support will eventually
        disappear, most likely because this utility is unmaintained and
        because it needs to run with superuser privileges to monitor all
        files n the system.  Therefore kqueue support needs to be
        integrated into GNOME VFS to ensure that it will continue to
        work when this happens.  After that, we should be able to remove
        GNOME VFS' dependency on FAM, making GNOME installation much
        easier for the end user.  See the instructions in <filename
        role="cvsweb">pkgsrc/sysutils/fam/MESSAGE</filename> to
        understand this last point.</para>

        <para>Assuming you are not familiar with kqueue, you might want
        to follow these steps to get started:</para>

        <orderedlist>
          <listitem>
            <para>Read the kqueue(2) manual page to get a general idea
            of the API and this <ulink
            url="http://julipedia.blogspot.com/2004/10/example-of-kqueue.html">example
            for starters</ulink>.</para>
          </listitem>

          <listitem>
            <para>Analyze the kqueue support for FAM which is in
            <filename
            role="cvsweb">pkgsrc/sysutils/fam/files/IMonKQueue.c++</filename>.
            This might be helpful to see how to apply kqueue to monitor
            for the events used by GNOME.</para>
          </listitem>

          <listitem>
            <para>Read the <filename>modules/inotify*</filename> files
            in gnome-vfs and inspect how they are used in the "file
            method".  The <filename>modules/Makefile.am</filename>
            contains a list of related sources in the
            <varname>libfile_la_SOURCES</varname> variable.</para>
          </listitem>

          <listitem>
            <para>Possibly the hardest part: write the required stuff
            (<filename>modules/kqueue*</filename>) to add kqueue
            support.</para>
          </listitem>
        </orderedlist>

      </project>

      <project id="port-ncb">
        <title>Port Nautilus CD Burner</title>

        <project-details>
          <priority>5</priority>
          <difficulty>4</difficulty>
          <length>Unknown due to lack of details</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
        </project-details>

        <para>Nautilus CD Burner is already in pkgsrc
        (<filename>sysutils/nautilus-cd-burner</filename>), and
        currently builds and installs successfully under NetBSD but it
        does not work at all.  The most likely cause is the lack of HAL
        support, which forces the code to fall-back to non-existent
        OS-specific code for NetBSD.</para>

        <para>Fixing this issue requires a working HAL port to avoid
        duplicating code in this utility.  Then, try to see if it works
        (which shouldn't give too much trouble with HAL in place).</para>

      </project>

      <project id="fix-fus-applet">
        <title>Fix the Fast User Switch applet</title>

        <project-details>
          <priority>4</priority>
          <difficulty>0</difficulty>
          <length>Unknown due to lack of details</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
        </project-details>

        <para>The Fast User Switch applet currently builds and installs
        fine under NetBSD as demonstrated by the
        <filename>x11/fast-user-switch-applet</filename> applet.
        Unfortunately it does not seem to work at all.  Trying to switch
        to another user either does nothing or blocks the X server.
        Without having investigated the issue in depth, this is most
        likely a problem in GDM, not in the applet itself.  Debug and
        fix this issue.</para>

      </project>

      <project id="port-gst">
        <title>Port GNOME System Tools</title>

        <project-details>
          <priority>2</priority>
          <difficulty>8</difficulty>
          <length>1-2 months</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
        </project-details>

        <para>GNOME System Tools provides an abstraction layer to
        Unix-like system configuration.  This tool is part of GNOME's
        core desktop, but is currently restricted to GNU/Linux operating
        systems.  Your task is to port this utility to NetBSD, which is
        possibly a non-trivial task.</para>

      </project>

      <project id="port-gnome-nettool">
        <title>Port GNOME Nettool</title>

        <project-details>
          <priority>3</priority>
          <difficulty>6</difficulty>
          <length>1 week</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
        </project-details>

        <para>GNOME Nettool is a graphical frontend for several
        console-based networking applications such as
        <filename>netstat(1)</filename>, <filename>ping(8)</filename> or
        <filename>route(8)</filename>.  GNOME Nettool currently builds
        and installs cleanly under NetBSD as demonstrated by the
        <filename>net/gnome-nettool</filename> package, but
        unfortunately it is completely useless.</para>

        <para>Because this is just a frontend of console-based
        applications, GNOME Nettool needs to be taught about the
        NetBSD-specific input and output format of all the utilities it
        uses.  It is interesting to note that GNOME Nettool currently
        includes support for the FreeBSD versions of all these tools so
        porting to NetBSD should be fairly straightforward.  The
        applicant should have knowledge of these networking tools and
        has a FreeBSD system available to compare the existing calls in
        the code and their results with those needed in NetBSD.</para>

      </project>

      <project id="fix-theme-installer">
        <title>Fix hardcoded paths in theme installer</title>

        <project-details>
          <priority>3</priority>
          <difficulty>2</difficulty>
          <length>2-3 days</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
          <who>James McHugh <email>james.mchugh AT nuigalway.ie</email></who>
        </project-details>

        <para>The theme installer included in GNOME's Control Center
        (<filename>capplets/theme-switcher/gnome-theme-installer.c</filename>)
        has several hardcoded paths to compression utilities such as
        tar, bzip2 or gzip.  This is an obvious focus of portability
        problems and should be fixed by making the code dynamically
        locate the required tools in the path.</para>

        <para>This problem does not expose under NetBSD itself because,
        by pure coincidence, the tools are located in the exact same
        pieces as in the developer's system.  However, using pkgsrc
        under other platforms (e.g. a home-built Linux system) will
        certainly make it appear.</para>

        <para>See GLib's <filename>g_find_program_in_path</filename>
        function to get started on the possible fix.</para>

      </project>

      <project id="port-ekiga">
        <title>Port Ekiga</title>

        <project-details>
          <priority>3</priority>
          <difficulty>3</difficulty>
          <length>Unknown due to lack of details</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
          <who>Magnus Henoch <email>mange AT freemail.hu</email></who>
        </project-details>

        <para>Ekiga, formerly known as GnomeMeeting, is a video
        conferencing application for the GNOME desktop.  It is now part
        of GNOME's core desktop and therefore should be ported to
        NetBSD.  A first step in porting and packaging this application
        is to get audio conferencing only to work, which should be
        quite easy.</para>

        <para>Porting the video parts of Ekiga to NetBSD might be harder
        (if not impossible without Video4Linux) and therefore is not
        required for a preliminary working package.</para>

      </project>

      <project id="feed-back-patches">
        <title>Feed back local patches</title>

        <project-details>
          <priority>8</priority>
          <difficulty>5</difficulty>
          <length>1 month</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
        </project-details>

        <para>Feed back any portability patches in pkgsrc to the
        appropriate maintainers.  There are many developers that add
        them but do not take the necessary steps to polish and submit
        them upstream.  As a result, further updates become harder and
        harder due to the increasing number of local patches.</para>

        <para>After submitting a patch, you might want to add a link to
        the upstream bug report in the patch's header to ease further
        tracking.</para>

        <para>This task can be done by anybody, yet it is a <emphasis
        role="strong">very important</emphasis> one.  You should note
        that it can also be very time consuming.</para>
      </project>

      <project id="drop-old-dirs">
        <title>Drop deprecated directories</title>

        <project-details>
          <priority>2</priority>
          <difficulty>1</difficulty>
          <length>1 week</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
        </project-details>

        <para>Drop the <filename>share/application-registry</filename>
        and <filename>share/mime-info</filename> directories from the
        <filename>xdg-dirs</filename> and
        <filename>xdg-x11-dirs</filename> packages when no package
        installs files in them.  These two directories are not used and
        thus the files they hold can simply be removed.  Your goal is to
        spot which packages still install files into those directories,
        create fixes for them, fill bug reports against the appropriate
        components to tell the authors about the issue (including the
        fixes you created) and, when accepted upstream, apply the
        patches to pkgsrc too.</para>

        <para>This is not pkgsrc's task but we are in a great position
        to do this cleanup thanks to the <filename>PLIST</filename>s: it
        is really easy to spot packages that provide obsolete stuff in
        those directories.</para>
      </project>

      <project id="drop-gstreamer0.8">
        <title>Drop GStreamer 0.8</title>

        <project-details>
          <priority>3</priority>
          <difficulty>5</difficulty>
          <length>Unknown due to lack of details</length>
          <contact>&a.jmmv; <email>jmmv AT NetBSD.org</email></contact>
        </project-details>

        <para>Drop <filename>gstreamer0.8</filename> and
        <filename>gst-plugins0.8*</filename> after no other package uses
        them.  You might attempt to port those applications that still
        use this old version to the newer 0.10 series.</para>
      </project>

    </projects>

  </sect1>

  <sect1 id="ports">
    <title>Missing ports and improvements</title>

    <projects>
      <projects-toc />

      <project id="mmu-less">
        <title>Support for MMU-less systems</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>4 months</length>
          <contact><mlist>tech-misc</mlist></contact>
          <contact><mlist>tech-ports</mlist></contact>
        </project-details>

        <para>NetBSD currently requires a system with an MMU.  This
        obviously limits the portability.  We'd be interested in an
        implementation/port of NetBSD on/to an MMU-less system.</para>
      </project>

      <project id="sun4v">
        <title>Support for sun4v (UltraSPARC T1)</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>port-sparc</mlist></contact>
          <contact><mlist>tech-ports</mlist></contact>
        </project-details>

        <para>It would be nice to support these newer highly SMP
        processors from Sun.  A Linux port already exists, and Sun has
        contributed code to the FOSS community.</para>
      </project>

      <project id="xen-restore">
        <title>Xen: implement save/restore feature</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>port-xen</mlist></contact>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>Xen (2 and 3) can save/restore (and migrate, but from the
        guest POW it's the same thing) a domain.  Some support is needed
        in guest operating system, and right now NetBSD lacks this
        support. This is mostly suspend/resume in virtual device
        drivers, and in the pmap.</para>
      </project>

      <project id="other">
        <title>Other Port suggestions</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-embed</mlist></contact>
          <contact><mlist>tech-ports</mlist></contact>
        </project-details>

        <para>See <ulink url="../ports/">this page</ulink> for ideas
        about suggested ports or not yet integrated ports.</para>
      </project>
    </projects>
  </sect1>

  <sect1 id="misc">
    <title>Miscellaneous work</title>

    <projects>
      <projects-toc />

      <project id="wedgeedit">
        <title>Universal Interactive Wedge Editor</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>1-2 months</length>
          <contact><mlist>tech-userlevel</mlist></contact>
        </project-details>

        <para>Due to the multitude of supported machine architectures
        NetBSD has to deal with many different partitioning schemes.  To
        deal with them in a uniform way (without imposing artificial
        restrictions that are not enforced by the underlying firmware or
        bootloader partitioning scheme) wedges have been designed.</para>

        <para>While the kernel part of wedges is mostly done (and
        missing parts are easy to add), a userland tool to edit wedges
        and to synthesize defaults from (machine/arch dependent) on-disk
        content is needed.</para>
      </project>

      <project id="nvidia">
        <title>Port of the NVIDIA graphics driver</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>Port the FreeBSD driver for NVIDIA graphic adapter
        distributed by NVIDIA.  Most of the work happens in the kernel,
        but making the userland part work with XFree86/X.Org and Linux
        binary emulation is needed too.</para>
      </project>

      <project id="syspkgs">
        <title>syspkgs</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-install</mlist></contact>
          <contact><mlist>tech-misc</mlist></contact>
        </project-details>

        <para><emphasis>syspkgs</emphasis> is the concept of using
        pkgsrc's <command>pkg_*</command> tools to maintain the base
        system.  That is, allow users to register and
	components of the base system with more
        ease.  There has been a lot of work in this area already, but it
        has not yet been finalized.</para>
      </project>

      <project id="valgrind">
        <title>Valgrind</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>tech-kern</mlist></contact>
        </project-details>

        <para>Port valgrind to NetBSD for pkgsrc, then use it to do an
        audit of any memory leakage.</para>

        <para>See also <ulink url="http://valgrind.org"/> and <ulink
        url="http://vg4nbsd.berlios.de"/> for work in progress.</para>
      </project>

      <project id="livecd-install">
        <title>NetBSD LiveCD with installer</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>netbsd-users</mlist></contact>
          <contact><mlist>tech-install</mlist></contact>
        </project-details>

        <para>While NetBSD has had LiveCDs for a while, there has not
        yet been a LiveCD that allows users to install NetBSD after
        test-driving it.  A LiveCD that contains a GUI based installer
        and reliably detects the platforms features would be very
        useful.</para>
      </project>

      <project id="disk-on-key-installer">
        <title>Modern CD/Disk-on-key installer</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact>&a.perry; <email>perry AT NetBSD.org</email></contact>
          <contact><mlist>tech-install</mlist></contact>
          <contact><mlist>tech-userlevel</mlist></contact>
        </project-details>

        <para>The NetBSD install system currently assumes that it needs
        to live in a memory and disk constrained environment. This is no
        longer the case.  For this project:</para>

        <orderedlist>
          <listitem>
            <para>Redo the current SSTO based installer to boot
            directly from an ISOFS or ffs-on-disk-on-key
            environment.</para>
          </listitem>
          <listitem>
            <para>Clean up the install system to take advantage of the
            newer, better install environment.</para>
          </listitem>
        </orderedlist>
      </project>

      <project id="www">
        <title>Improve website infrastructure</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact><mlist>netbsd-docs</mlist></contact>
        </project-details>

        <para>The NetBSD website building infrastructure is rather
        complex and requires significant resources.  We need to make it
        easier for anybody to contribute without having to install a
        large number of complex applications from pkgsrc or without
        having to learn the intricacies of the build process.</para>

        <para>A more detailed description of the problem is described
        in <ulink
        url="http://mail-index.NetBSD.org/netbsd-docs/2006/01/29/0001.html">this</ulink>
        and <ulink
        url="http://mail-index.NetBSD.org/netbsd-docs/2006/01/29/0002.html">this</ulink>
        email and the following discussion on the
        <mlist>netbsd-docs</mlist>.</para>

        <para>This work requires knowledge of XML, XSLT and make.  This
        is <emphasis>not</emphasis> a request for visual redesign of the
        website.</para>
      </project>

      <project id="cx">
        <title>Cx</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact>&a.perry; <email>perry AT NetBSD.org</email></contact>
        </project-details>

        <para>&a.perry; has come up with an experimental idea on how to
        improve NetBSD code quality and security on an ongoing basis. To
        test the idea out, we will need a translator between a new,
        experimental language (called Cx) and C. The student should feel
        comfortable with using lex and yacc, and should understand the
        principles of compiler technology, particularly the contents of
        a book like the Dragon book.</para>
      </project>

      <project id="flood-fill">
        <title>Flood-fill file distributor/syncer</title>

        <project-details>
          <priority>0</priority>
          <difficulty>0</difficulty>
          <length>Unspecified</length>
          <contact>&a.perry; <email>perry AT NetBSD.org</email></contact>
        </project-details>

        <para>Maintaining multiple anonymous cvs/svn/ftp/etc.
        repositories on a global basis can be a challenge.  Implement a
        novel method of maintaining large numbers of replicas of a
        master repository, based on a secure "flood fill" protocol. If
        time is available, also implement kernel hooks to make the
        change-set generation system substantially more
        efficient.</para>
      </project>

    </projects>
  </sect1>

</webpage>
