[[!template id=project title="Userspace file system and device driver code sharing" contact=""" [tech-userlevel](mailto:tech-userlevel@NetBSD.org) """ mentors=""" [Antti Kantee](mailto:pooka@NetBSD.org) """ category="userland" difficulty="easy" duration="3 months" done_by="Vyacheslav Matyushin" description=""" As is well-known, [[!template id=man name="puffs" section="3" collection="NetBSD-5.1"]] is the NetBSD userspace file system framework. It provides support for implementing file servers in userspace. A lesser known "cousin" of puffs is the Pass-to-Userspace Device, or [[!template id=man name="pud" section="4" collection="NetBSD-5.1"]] framework, which provides support for implementing character and block device servers in userspace. Both use [[!template id=man name="putter" section="9" collection="NetBSD-5.1"]] for transmitting requests to and from the kernel. Currently, puffs includes a userspace support library: libpuffs. It provides two facets: * file system routines and callback interface * generic parts, including kernel request handling On the other hand, pud is without a userspace support library and servers talk with kernel directly with `read()` and `write()`. The goal of the project is to modify libpuffs into a generic library which pud and puffs can share, and provide libpuffs and libpud built on this base. The submission should include a rough analysis of the source modules of libpuffs and what is going to happen to them during the project. This project is fairly straightforward, but involves a reasonable amount of work. Plenty of [documentation](http://www.netbsd.org/docs/puffs/#moreinfo) exists to make the learning curve manageable. This project is an excellent opportunity to practise getting your hands dirty with real world systems. """ ]] [[!tag gsoc]]