GSoC/GCI Archive
Google Summer of Code 2014

FreeBSD

License: New and Simplified BSD licenses

Web Page: https://wiki.freebsd.org/SummerOfCode2014Ideas

Mailing List: http://lists.freebsd.org/mailman/listinfo/freebsd-hackers

FreeBSD is an advanced operating system for modern server, desktop, and embedded computer platforms. The FreeBSD Project began over 20 years ago in 1993, but is based on the work at Berkeley CSRG with open source revision history going back 35 years to 1978.  Over those years the code base has gone through continuous development, improvement, and optimization. The FreeBSD Project is a large, mature, and yet relatively tightly knit organization, developed and maintained by a large team of individuals. FreeBSD provides advanced networking, impressive security features, and world class performance and is used by some of the world's busiest web sites and most pervasive embedded networking and storage devices. 

There are currently over 300 developers with write access to the main revision control system, and hundreds more with access to our Perforce and Subversion 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

  • A new enhanced bootsplash I propose a new bootsplash mechanism. Currently, we can enable bootsplash by adding few options such as splash_bmp_load to /boot/loader.conf but it only displays an image file so I cannot reassure that the system works well. Therefore, I want to develop a new bootsplash mechanism which enables enhancements of attractiveness, such as progress bar. I think this will greatly improve user experience. I’m planning to implement this using src/sys/dev/fb, SYSINIT and kernel module system.
  • BSNMP Enhancements The goal of this project is to add enhancements to BSNMP, a portable SNMP framework consisting of a daemon, modules and tools. This project proposes to add full IPv6 support as a loadable transport module to BSNMP.
  • CTF implementation and use in the kernel debugger The main idea behind this project is to add the capability of pretty printing data structures contained inside the FreeBSD kernel source based on the CTF data contained in the SUNW_ctf section of the kernel binaries. Due to licensing problems, which are too off-topic for this proposal to explain, the existing library code for parsing the CTF data is not applicable. Thus, as a part of the project, a fresh new BSD-licensed CTF data parsing library is needed.
  • FreeBSD preseed installation (PXE) I would like to make FUI (Fully Automatic Installer) which is known from Linux systems like kickstart from Red Hat or Jumpstart in Solaris. I want to make modified diskless FreeBSD system. After boot will run automatic installer using pressed configuration file.
  • High-speed firewall: convert IPFW/PF rules to C module The objective of this project is to finally deliver a program able to read a IPFW firewalling rules, and deliver a KLD for the FreeBSD kernel to provide with in-kernel filtering. Also, by the comments, the future work could be changed.
  • Implement Intel SMAP and kernel patching framework In first phase, I want to implement the Intel SMAP (Supervisor Mode Access Prevention) technology for x86-64 architecture. In second phase, I plan to implement boot/load time kernel and kernel module patching (instruction patching) framework.
  • Implementation of evdev protocol and touchscreens support This project aims to implement evdev protocol support in FreeBSD kernel, thus allowing to use xorg unmodified evdev input driver (xf86-input-evdev) and adding generic support for touchscreen devices.
  • Improve Unicode support in FreeBSD Implement strcoll and strcoll_l functions, improve wc/mb functions as well as C11 and POSIX standart functions. One of the goals of this project is to let some projects like PostgreSQL to be built without ICU as dependency (thus strcoll and strcoll_l are the absolutely necessary functions). However, I personally treat this project as a possibility to provide better Unicode support everywhere where we can (I don't think we can do it till GSoC finishes, but at least we must take a good start).
  • Instruction caching for bhyve The Virtual Machine Monitor (VMM) must emulate all guest accesses to APIC control registers which requires VM exits and VM entries. In order to emulate, one needs to fetch and decode the instruction which are very expensive operations. Instead of doing this at each VMexit, one can cache the instruction. However when using the cached instruction from a particular instruction pointer, you must guarantee that the guest won't modify that instruction in memory.
  • Kernel debugging support for LLDB LLDB is the debugger from LLVM projects. As GDB on FreeBSD is out-dated due to license issues, we are seeing a recent success of porting a new debugger -- LLDB to FreeBSD. Currently, LLDB supports userland debugging on amd64, mips and i386 platforms. However, kernel debugging is not implemented yet and it is listed as a long-term goal. In this GSoC project, I'm aiming to enable kernel debugging for LLDB on FreeBSD.
  • Machine readable output from userland utilities I want to work on the project "Machine readable output from userland utilities". I am going to use the existing libraries (libnv and libucl). In the process I will make some changes to these libraries (like adding XML support to libucl).
  • Modular scripting system for FreeBSD loader with Lua support The objective this project is to decouple the scripting language from the loader making it modular. Then add support for Lua scripts and incrementally add loader features to Lua.
  • Pkg pluggable repositories Pkg is the novel package management system designed for using in *BSD. Currently, pkg can work merely with binary remote repositories that are specific for an architecture and are updated by FreeBSD build cluster. My idea is to write abstract repositories layer that will be able to handle multiple source types, such as ports, pkgsrc or even software specific repositories, such as CPAN. Performance, priorities and options interaction are the subjects of investigation.
  • Porting FreeBSD on Android Emulator We're living in a smart-phone era, where every phone is a fully-featured computer, sometimes outperforming laptops from 2-3 years ago. For FreeBSD to participate in the smart-phone revolution, it'd be really good if we could run it on the smartphone. There's a large number of specialized military grade solutions, where having a full control over the OS and the full software stack would be very good.