GSoC/GCI Archive
Google Summer of Code 2014

Plan 9 from Bell Labs

License: Lucent Public License Version 1.02

Web Page: http://www.plan9.bell-labs.com/wiki/plan9/gsoc-2014-ideas/index.html

Mailing List: http://www.plan9.bell-labs.com/wiki/plan9/mailing_lists/index.html

Plan 9 is an operating system originally developed by the same group at Bell Labs which developed Unix. The central idea in Plan 9 is the use of a single resource sharing protocol for access to everything in the system, from regular files to device drivers to the windowing system. Plan 9 extends the concept Unix popularized of "everything is a file" much further, exposing a lot of power. Plan 9 is used in a wide variety of environments, from embedded systems and appliances to workstations and supercomputers. The ideas from Plan 9 also show up in a variety of other systems, including, most notably, Inferno (a sibling OS project to Plan 9 which adds a virtual machine and language), Nix (a new kernel for amd64 systems exploring ideas for many-core systems), 9vx (a port of Plan 9 to the vx32 virtual machine library), and Plan 9 from User Space (a port of many of the Plan 9 applications and libraries to POSIX environments). In Summer of Code, we serve as an umbrella organization for projects related to these technologies. In addition to projects focusing on the operating systems themselves, we encourage applications for projects using the same technology and ideas in other environments.

Projects

  • A Multi-Queue Scheduler for Plan 9 The process scheduler in Plan 9 utilizes a global run queue. However, on multiprocessor systems, the global run queue may become a bottleneck when the number of processes increase, as well as a point of lock contention. The premise of this project would then be to mitigate this, and one way of doing that would be to have per-processor run queues. To maintain reasonable system-wide balance, load balancing algorithms are employed to balance the load across the per-processor run-queues.
  • Advanced Dis interpreter for web browsers in Dart I intend to complete, maintain and expand last year’s “Dis Interpreter” project. Some important features (channels, multiplexing) need to work properly before there can be decent support for modules, which are essential to run decent Limbo programs. The main targets are System, followed by Dial and Draw.
  • Improvements to the HTML5 draw server I propose to improve the HTML5 drawterm I worked on last summer to make it a production-quality terminal for Plan 9, and to separate out its 9p library to make it available to other applications. This will involve cleaning up the existing code to fix display and input issues, and implementing cpu(1)'s protocol to allow for authentication.
  • Plan9 Kernel MCS lock with a Compatible Calling Interface MCS lock is a well-known synchronization protocol, which scales much better than spin locks. However, The current lock protocol in Plan 9 kernel is based on spin locks. This work proposes to replace the original lock implementation with MCS lock, but the interface of MCS lock is compatible with the current implementation.
  • Porting Raspberry Pi audio drivers to Plan 9 Implement audio drivers for the BCM2835 SoC, specifically for the Raspberry Pi, for Plan 9. Implement PCM for the 3.5mm audio jack, HDMI, and optionally I²S.