Ideas

Our application to become a mentor organization for the Google Summer of Code 2008 has been approved! Qualifying students can apply for our GSoC 2008 ideas listed here between now and March 31th April 7th, 2008. For details about how to apply, please check out Students: How to Apply for a Haiku Idea.

According to other mentor organizations, the most successful GSoC projects are the ones proposed by the students themselves. The following list represents our ideas and the current needs of our project. However, suggesting your own idea is encouraged!

If you find an idea marked as "big" interesting but feel you cannot completed in time, feel free to suggest splitting it into smaller parts in your proposal.

Project Areas

Applications

Extend the Network Preferences Application

Last years GSoC has brought us a new Network Preflet. It can be used to configure the devices of the system for DHCP or manual settings. Extend the applet to support profiles (named sets of settings). Integrate more settings types (at least PPP, maybe prepare for WiFi).
  • Tickets: #820
  • Skill set: networks, UI development, usability basics

Bluetooth Preferences Application

A Bluetooth stack is actively being developed by Oliver Ruiz Dorantes. The preference application would configure the stack and its services. It would be a first test case for the stack.
  • Skill set: teamwork, UI development, usability basics

Drivers

Add DVD-RAM support to the CD driver

It should be possible to use DVD-RAM media like a hard disk, including write support. Another useful extension would be Mount Rainier support for CD/DVD-RWs which allows for a similar usage.
  • Tickets: #1047, and #1085 for Mount Rainier
  • Skill set: kernel and driver development

ExpressCard with hotplugging support

Implement a bus manager for the ExpressCard slot. While we already have initial support for its preceding technology CardBus, ExpressCard support is missing yet.
  • Tickets: #1086
  • Skill set: kernel and driver development

Finish USB OHCI support

Our USB stack currently only supports UHCI (Intel), and EHCI (USB 2.0) style USB chipsets. OHCI is found in many chipsets, though, and is still often used for USB 1.1 devices on a USB 2.0 interface. There is already much code written for OHCI. The UHCI/EHCI implementations can be regarded as examples on how to talk to our USB stack.
  • Tickets: #1044
  • Skill set: kernel and driver development

Kernel

Implement paging (swap file) support

Try to intelligently handle the free space and the swap file (eventually allowing several swap files, or the reuse of other system's swap partitions - note suspend-to-disk issues with that), have a look at page compression, etc.
  • Tickets: #1972
  • Skill set: kernel development

Implement using HPET timers and other mechanisms than TSC for time keeping

On CPUs that are able to change their frequency, the TSC increment is not invariant. Therefore, we cannot use it to compute time on these machines. Unfortunately, most recent CPUs are affected due to power saving features.
  • Tickets: #1993
  • Skill set: kernel and driver development

Enable the kernel to run as a userland process on top of itself

Having a virtual userland kernel running on top of itself or another operating system like Linux or BeOS can greatly benefit kernel development and code profiling.
  • Tickets: #1102
  • Skill set: kernel development

Implement a layered file system extension architecture

The architecture should allow to transparently extend file systems with features like BeOS attributes and query support, write support, and data encryption.
  • Tickets: #1933
  • Skill set: kernel and file system development

Media

Add encoding support to our MediaKit

The current media add-on API only supports decoding media. An API for encoding has to be created that fulfills all modern requirements (ie. B-frames). Furthermore, the existing encoders should be extended to export their functionality using this API.
  • Tickets: #1043
  • Skill set: You should have an interest in media encoders and should have experience in designing APIs. A knowledge of encoding algorithms is not needed.

Write a DV media node

Last years GSoC has brought us a port of the FreeBSD firewire stack. The next logical step is to write a media node implementing DV input/output by interfacing with the new firewire stack. The node would automatically detect hot plugging of DV equipment and provide the means to access this equipment via the Media Kit APIs.
  • Skill set: kernel/driver development, FireWire protocol, Haiku Media Kit

Network

Implement ICMP error handling and propagation

The current stack implementation lacks a mechanism to deliver ICMP error messages to the protocols, and also to produce ICMP error messages on behalf of the protocol implementations. ICMP error handling would need to be implemented in the IPv4, TCP, and UDP protocols.
  • Tickets: #800, and possibly #1073
  • Skill set: network protocols, kernel level development experience probably helps

Integrate our PPP implementation

Port the PPP implementation to our new network stack. Add phone-line modem support, including HDLC framing and VJC compression (porting both algorithms is sufficient, but make sure the license is compatible to MIT). Implement CHAP authentication. Find and fix bugs.
  • Tickets: #812, #869, #873, #922, #923, #1059, maybe: #1057, #1058
  • Skill set: multi-threading basics, maybe network protocols and some kernel/drivers development, maybe UI development

Implement ZeroConf/Bonjour support

It's sufficient to port an existing solution. Options include Apple's Bonjour implementation or Avahi, though Apple's is probably preferred since it has a license more compatible with Haiku's MIT license.
  • Tickets: #1042
  • Skill set: network protocols, maybe kernel development

WiFi support (big task)

Design a WiFi stack API, and implement it. There is lots of code to look at and/or port in OpenBSD. Also, the recently adopted WiFi stack in the Linux kernel could help with the design.
  • Tickets: #1050
  • Skill set: network stack development, WiFi protocols, kernel/driver development

Implement IPv6 support (big task)

  • Skill set: IPv4 and IPv6 protocols, kernel and network stack development

User Interface

Identify and fix performance bottlenecks in our app_server

While we did try to choose the right methods to make our app_server fast, we did not optimize it at all yet. Make sure the server threads use their full thread quantum, remove potential lock contentions, improve drawing speed.
  • Tickets: #1074
  • Skill set: UI development, multi-threaded programming, algorithms, you know how to use a profiler

Implement subpixel anti-aliasing for font rendering in our app_server

This task requires understanding the rendering pipeline and Anti-Grain Geometry rendering backend which is used in the Haiku app_server. If done properly, the subpixel anti-aliasing could also extend to any vector shapes drawn by the app_server. The actual implementation of the feature is not going to result in much added code, the challenge is more in understanding the existing framework and how to change it to support the feature.
  • Skill set: following codepaths, understanding lowlevel designs in app_server and AGG

Multi-monitor support for the app_server

The app_server needs to handle multiple monitors in its internal screen representation and configuration. The drawing call dispatching would need to be split up, so that drawing commands are dispatched to different Accelerants.
To ease development, having two graphics cards in your computer is recommended, as none of the existing Haiku drivers currently support dual head output correctly (as the accelerant interface does not define a way to use it).
  • Skill set: graphics drivers, application design, AGG

Hardware 3D acceleration

Design or port an existing 3D driver interface. See for example the Gallium3D project. Another option is to write a compatibility layer to load binary Linux 3D graphics drivers. There should probably still be our own 3D acceleration API for drivers.
  • Skill set: graphics drivers, API design

Other

Implement XSI semaphore and IPC API

Implement the functionality exposed by the sys/ipc.h, sys/sem.h, and sys/shm.h headers. This will probably need some work in the kernel itself.
  • Tickets: #1980
  • Skill set: good C/C++, and eventually a bit of kernel development knowledge

Expand our automated unit tests

Port a complete POSIX testing framework and add missing unit tests for the Haiku API. You might also port a network stack testing framework.
  • Tickets: #61
  • Skill set: good C/C++ knowledge

Create a CIFS implementation

Implement a file system add-on to be able to mount Windows network shares. File systems can be developed and debugged in userland for Haiku. Mounting shares from the command line would already be a great success, but the project could be rounded off with a "Connect to Server" type of GUI which also remembers previous connections.
  • Skill set: good C and POSIX knowledge

Help with the CUPS port

Developer Ithamar Adema is working on a port of CUPS to integrate it with the Haiku printing kit.
  • Skill set: good C and POSIX knowledge