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.
Updating AbiWordEven 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.
- AbiWord: Offcial 2010 ideas page
- Skill set: UI development, usability basics
Help Improve WebPositive, Haiku's Native WebKit Based BrowserLast 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 KitServices 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
TTY LayerRework 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.
Enhance USB WebcamIt 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 supportImplement 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
Enable the kernel to run as a userland process on top of itselfHaving 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 & ImprovementsHaiku 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_managerImplement memory, IO, and IRQ resource assignment.
Port to x86-64 ArchitecturePretty 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
Improve MediaKit's encoding supportEncoding 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 supportThis 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 supportOur 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.
Create C++ network stack class frameworkThis 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 implementationPort 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 cachingHaiku 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 ImprovementsHaiku 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.
Multi-monitor support for the app_serverThe 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 accelerationDesign 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
Create Language Bindings to Haiku's C++ APIThe 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 portCUPS 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