GSoC/GCI Archive
Google Summer of Code 2011

FreeBSD

Web Page: http://wiki.freebsd.org/IdeasPage

Mailing List: mailto:hackers@freebsd.org

The FreeBSD Project is a large, mature, and yet relatively tightly knit organization. The FreeBSD Project began 15 years ago in 1993, but is based on the work at Berkeley CSRG with open source revision history going back 30 years to 1978. There are currently over 300 developers with write access to the main revision control system, and hundreds more with access to our Perforce servers for experimental and third party development (this is also where our summer of code students have worked in previous years). We have an active mentoring program to bring all new developers into our community, not just those that we introduce to FreeBSD through the GSoC. There are hundreds of mailing lists, forums, blogs, IRC channels, and user groups all detailed on our main website. FreeBSD offers a complete operating system in which students can work, not just a kernel or specific userland stack. This allows for interesting work that spans the userland/kernel boundary. In addition to producing an operating system, FreeBSD has incubated the development of key pieces of infrastructure which are used by other open source projects including bsnmp, jemalloc, libarchive, OpenBSM, and OpenPAM.

Projects

  • (Re)implement the BFS scheduler in FreeBSD The goal of this project is to implement the BFS scheduler into the FreeBSD operating system. I will then run some benchmarks to find out how this BFS implementation compares to the existing 4BSD and ULE schedulers. I hope I could achieve some interesting results.
  • Adding DWARF2 Call Frame Information In this project, I will add DWARF2 call frame information into assembly code in FreeBSD to better support debugging mechanism. The task including two parts: 1)Add CFI directives to support 1a) stack frame unwinding 1b) registers recording 2)Design and implement a test plan.
  • Capsicum application adaptation and core libraries As core Capsicum libraries will appear in FreeBSD 9 anyway, I think it's possible to take several applications from the base system and modify them to use Capsicum sandboxes. For example, the FreeBSD syslog daemon might be an interesting application to adapt to compartmentalisation model. This project may also include developing some services for sandboxes and improvements to the libcapsicum library.
  • Change ino_t to 64-bit I propose to extend ino_t to 64-bit, nlink_t to 32-bit and add directory offset field to struct dirent, implementing all necessary compatibility wrappers to preserve backward compatibility at both kernel and user level.
  • Disk device error counters The present system has no utility statistic errors for disk devices that is not convenient for analyzing faults disk as a result unstable operation of programs. I propose to develop the command iostat -e or-E (depending of the desired information) for these statistic, also using existing and available information in the utility.
  • Finish porting FUSE to FreeBSD FreeBSD fuse kernel module was developed during Google Summer of Code 2005. Sadly it is not actively maintained since February 2007. Since than two forks of FreeBSD version where created: macfuse for Mac OS X and OpenSolaris fork. Nowadays fuse is not only actively used by desktop applications there are production quality server file systems built on top of fuse.
  • FreeBSD/arm port to NXP LPC32x0 This project aims to port FreeBSD to NXP LPC32x0 ARM9 system-on-chip family. LPC32x0-s are found in many single board computers and evaluations boards.
  • Implement TCP UTO UTO will allow connections to tolerate long periods of "silence" without being torn down. TCP UTO is fully described by RFC 5482.
  • Implement the RPS/RFS in FreeBSD The project goal is to implement RPS/RFS on FreeBSD. Highend NICs have multiple receive queues and implemented the feature called RSS, which can distribute packets across multiple processors. However, typical cheap mono-queue NICs doesn't have such ability. RPS soluve the problem by emulating RSS behavior on mono-queue NICs. RFS is the extension of RPS, which deliver packets to the CPU where application running. RPS/RFS are produced for Linux, the project will implement these behavor on FreeBSD.
  • Multibyte Encoding Support in Nvi Nvi is a BSD-licensed re-implementation of the original vi editor. While most of the userland tools in the FreeBSD base system support multibyte encodings [1], there is no nvi fork comes with sufficient multibyte encoding (both Unicode and non-Unicode) support so far. My GSoC2011 proposal aims to add the complete iconv-based multibyte encoding support to nvi.
  • Multiqueue BPF support and other BPF features The project goal is to support multiqueue network interface on BPF, and provide interfaces for multithreaded packet processing using BPF. BPF is raw interface of network devices, which allows to receive / send Data Link Layer frame directly. Modern high performance NICs have multiple receive/send queues and RSS feature, this allows to process packet concurrently on multiple processors. Main purpose of the project is to support these hardware and get benefit of parallelism.
  • pkgng: Implementation of sub-commands to convert .rpm and .deb to pkgng package format pkgng is a project that aims to provide an alternative to pkg_install. It is based on libpkgng, a new library dealing with package management tasks. My goal is to implement a new sub-command to pkgng so it will be able to convert .rpm and .deb archives to .txz ones (the pkgng package format).
  • Replacing the old regex implementation The regex implementation in FreeBSD's libc is quite outdated. It is not developed any more, it is slow and it does not support wide characters. We need a modern version with better I18N support, good performance and standard-compliance. The work that has been done on grep also showed that there is quite much to optimize in this area. This project pretends to port the TRE regex implementation and apply some compatibility/optimization changes to suit better our needs.