Ideas

The Haiku project has been accepted to participate in Google Summer of Code&trade 2010! Qualifying students can apply for a Haiku project (see the list of suggested projects below) between March 29th and April 9th, 2010. 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. Also, many of these ideas are not sufficient as stand-alone projects and would need to be combined with others on this list or of your own suggestion.

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.

Project Areas

Applications

Updating AbiWord

Even though an older AbiWord port is being hosted at OSDrawer : AbiWord Project Page, the AbiWord project would prefer the port to use their current sources. The student is responsible for determining which aspects of this project to persue.

Help Improve WebPositive, Haiku's Native WebKit Based Browser

Last year and again recently, Haiku's port of WebKit was significantly improved. A native Haiku web browser, WebPositive, has started to be written to make use of this port. Students interested in this will be need to contact us on the possible areas to work on, as WebPositive is heavily in development.
  • Skill set: teamwork, c++, UI development, usability basics

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.
  • Skill set: UI development, usability basics, C++, API design, some experience with HTTP/HTTPS

Drivers

TTY Layer

Rework our current TTY layer into a module, and create an API that fulfills the need of a serial port, this includes both traditional RS232 as well as serial over USB. Integrate the new API into the serial drivers that are already in our repository, and make sure everything works as expected. Until now the serial port was reserved for kernel debugging, but it is now time for proper userland support.
  • Tickets: #35 #3232
  • Skill set: kernel, and driver development

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, USB knowledge, 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

Kernel

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

Various File System Drivers & Improvements

Haiku has great support for its own file system, but most others are only available read-only or simply not accessible. For better interoperability with other systems, it is desired to be able to read and write to these partition types. To note, while FUSE is an option in some cases, it is preferred to implement advanced features such as synchronous writing. Combining this project with others may be needed as well.
  • Ext, ReiserFS: write support
  • UFS2 : Read (& Write) support
  • ZFS: Read (& Write) support

Improve PCI bus_manager

Implement memory, IO, and IRQ resource assignment.
  • Tickets: #3, #4, #5
  • Skill set: kernel development

Port to x86-64 Architecture

Pretty much all current x86 desktop CPU are capable of running in 64 bit mode, but Haiku can use them only as 32 bit CPUs. Particularly because most exist code has not been written with 64 bit safety in mind, a port of the complete operating system is probably not realistic as a GSoC project. Porting at least boot loader and kernel should be absolutely feasible, though.
  • Ticket: #1141
  • Skill set: kernel development

Media

Improve MediaKit's encoding support

Encoding support is still relatively new to MediaKit and there are several areas could use additional development. The BEncoder is one of the API's to be implemented. Adding support for more codecs and updating the port of Xiph would need to be done as well.
  • 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++

AV/1394 support

Our Firewire stack supports DV receiving, but not controlling the A/V device (ie play/stop). This requires to modify the Firewire stack for FCP frame support. See AV/C Digital Interface Command Set General Specification for reference.
  • Skill set: kernel development, API design, general C/C++, userland development
  • Hardware requirements: a DV camera, a machine with a Firewire port.

Network

Create C++ network stack class framework

This would involve designing and implementing an API to replicate similar functionality as cURL, but not limited to it (ie. WebDAV support comes to mind).

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

NFSv4 client with xattr support and caching

Haiku has an NFS client, but using the out of date NFSv2 specification and the old file system API. This makes it unusable for any practical purpose. Also, the current implementation doesn't support caching, which makes it slow, and lacks xattr handling, which is very important in Haiku.
  • Skill set: network protocols, maybe kernel development, userland development

WiFi integration and encryption support (big task)

Integrate the WiFi stack into the userland tools available (ifconfig, and NetworkStatus), and implement WiFi encryption support (also in the userland tools). For the latter, there is lots of code to look at and/or port in FreeBSD.
  • Skill set: network stack development, WiFi protocols, kernel/driver development

Implement IPv6 support (big task)

IPv6 is a new network protocol that allows easier management of the Internet. Without it, at some point Haiku will be unable to join any network. Write an IPv6 protocol handler and integrate it to Haiku's network stack. To note, a mentor needs to be found for this task.
  • Skill set: IPv4 and IPv6 protocols, kernel and network stack development

Bluetooth Stack Improvements

Haiku Bluetooth Stack implements basic functionality on lower and middle layers, this functionality needs to be completed and Bluetooth 2.X possibilities explored.
  • Requirement: Bluetooth enabled Haiku system
  • Skill set: C++, kernel development, userland development, global bluetooth stack knowledge(optional)
  • Tasks: RemoteDevices Database, UserLand tools(Preferences), Pairing/Auth/Encryption use cases, etc.

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

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 Language Bindings to Haiku's C++ API

The goal of this project is to allow non-C/C++ developers the ability to write programs in their language of choice and to integrate with Haiku's API, creating a more native feeling application. Ideally bindings will be created in SWIG and will have another layer to abstract the SWIG bindings into an interface that is more appropriate for the language, such as python or perl.
  • Skill set: ability to interpret C/C++ API

Continue the CUPS port

CUPS is used on most UNIX system to manage printers. The Haiku project would like to recycle their drivers and not write new ones for every available printer. Either port CUPS itself and integrate it to the printing kit in Haiku, or make the printing kit able to use CUPS driver files. To note, developer Ithamar Adema has started a port of CUPS to integrate it with the Haiku printing kit.
  • Skill set: good C and POSIX knowledge