Ideas

The Haiku project has been accepted into Google Summer of Code&trade 2009! Qualifying students can apply for a Haiku project (see the list of suggested projects below) between March 23rd and April 3rd, 2009. 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 Google Summer of Code 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.

Students, who intend to submit applications on ideas that are part of other accepted mentoring organizations, need to contact both Haiku and the other mentoring organization.

Updating VideoLAN

Currently, Haiku only has a BeOS binary of VideoLAN 0.86. This project could include porting the necessary dependencies, listed at Haiku Ports : VLC Dependency Tracker, and updating the GUI to function with VLC's current codebase.

Updating WebKit and Help In Creating a Native Haiku Web Browser

Haiku's port of WebKit needs to be improved and completed. Plus a native Haiku web browser needs to be written to make use of this port. Students interested in this will be working closely with mentor Ryan Leavengood to design and implement a simple first version of this browser, heavily inspired by Google Chrome. They will also help with designing a BHTMLView class to be used by other parts of Haiku.
Previous BeOS browser projects may also be useful references: Themis and NetOptimist.

Skill set: teamwork, c++, UI development, usability basics

Updating NetSurf

NetSurf has a fairly basic port for Haiku. Numerous aspects could be improved, including but not limited to the GUI, implementing bookmarks, file cache, downloads, printing, preference panels. Some of this work overlaps with the native browser project. Click here to see NetSurf's Google Summer of Code project ideas page, which includes some suggestions for the Haiku port.

Creating Services Kit

Services Kit would expose web services to other Haiku applications. Such web services could include Last.fm, Facebook, or Twitter. Students interested in this project will work with the mentor to implement the base code, the Twitter protocol, and a replicant to update the Twitter status. The base code includes the necessary utility functions such as HTTP/HTTPS protocol, URL formatting, and computing MD5 hashes. Another aspect of this project could include creating a preflet application for managing a user's account information.

Drivers

Enhance USB Webcam

It is desired to refactor the USB Webcam driver to allow easier compilation on other operating systems. This will allow Haiku and other operating systems to benefit from each other's work more readily. In addition, there are numerous bugs to be resolved as well as adding support for a nearly endless supply of webcams.

Skill set: teamwork, kernel, and driver development

USB Video (UVC)

This driver will support higher end webcams and other devices. This should be designed with portability to other OSes, which encourages the re-use of coding efforts for both Haiku and non-Haiku operating systems.

Skill set: teamwork, 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.

Improve PCI bus_manager

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. For a more detailed description, see : #3580

Skill set: You should have an interest in media encoders and should have experience in designing APIs. Knowledge of encoding algorithms is beneficial.

Generic S/PDIF support

This should be implemented with Media Kit, so as to allow any Media Kit aware application to make use of it.

Skill set: API design, general C/C++

Network

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

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

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

Add BFS support to FUSE

We already have the bfs_shell as part of our build system that works natively on Linux, FreeBSD, and other POSIX compliant operating systems.
This could be used to make BFS accessible read/write via FUSE.