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).

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.

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.

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.

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.

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.

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.

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.

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.

Implement IPv6 support (big task)

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.

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.

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.

Expand our automated unit tests

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.