Ideas

Qualifying students can apply for a Haiku project (see the list of suggested projects below) between March 26th and April 6th, 2012. 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 wishes 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 (2.0), the AbiWord project would prefer the port to use their current sources (2.8.x).

The student is responsible for determining which aspects of this project to persue. AbiWord/AbiSource has participated in past GSoCs and we expect that they will again this year. This could be a possible cross project with a co-mentor from each org, so if interested in this one you may want to apply to both orgs.

Updating and Extending WebPositive

Haiku uses a WebKit based browser called WebPositive. This task would involve:

  • Update to newer WebKit codebase
  • Update (jam) build system to package WebKit as an OptionalBuildFeature, to be used by Haiku's build system
  • Native network backend. Currently we use the Curl backend, which is slow and has some other problems. Use the (unfinished) "Services Kit" instead.
  • various webpositive tickets.
  • Skill set: userland development, kernel development, possibly x86 assembly

VirtualBox port to Haiku

A port of VirtualBox to Haiku, would allow developers and users to run another operating system within Haiku. Preliminary VirtualBox port to Haiku

  • Skill set: userland development, kernel development, possibly x86 assembly

Kernel

Filesystems: general improvements (BIG)

Haiku has great support for its own filesystem, but most others are only available read-only, or not at all. It is way better for interoperability with other systems to be able to read and write to these disks.
  1. ReiserFS, BTRFS, exFAT: write support
  2. UFS2, ZFS: Read (& Write) support
  3. SMB, Windows shares: Read (& Write) support
  4. HAMMER FS: Read (& Write) support
  5. SquashFS: To support booting Haiku off SquashFS on a CD/DVD
  • Skill set: kernel, and driver development

IMAP FS: File system access to an IMAP account

In Haiku emails are stored as individual file with extended attributes. Mounting an IMAP account as a local file system is therefore a natural fit. The file system should have full read and write support (deleting mails (files), creating folders, and moving mails between folders, etc.) with local caching for better performance.

  • Skill set: kernel and file system (driver) development, network 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

BFS Partition Resizer

An often requested feature. This includes being able to resize the filesystem and its descriptive structures (eg, think of resizing an image file) and being able to resize the partitions on the drive. Ideally integrated within DriveSetup.

  • Skill set: Driver development

Drivers

ACPI Video Extensions

ACPI Video Extensions, as specified in ACPI Spec 4.0a Appendix B, adds special support to handle multiple output devices such as panels and TV-out capabilities, brightness control as well as special power management features.

Suggested work: Detect attached devices for display adapters, implement a basic driver for a display, allow display switching and brightness control.

  • Requirements: computer with ACPI that has Acpi Video Extentions (_DOS _DOD and so on)
  • Skill set: kernel development, general C/C++, userland development

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.

  • Requirements: a DV camera, a machine with a Firewire port.
  • Skill set: kernel development, API design, general C/C++, userland development

Network

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.

  • Requirements: 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.

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

IPv6 Polish

The base framework for IPv6 support was implemented as a Google Summer of Code 2010 project. Even so, there remains a lot of smaller cleanup/polish tasks that can be done as a project.
  • Tickets:
    • #7228 -- RFC: BNetworkInterfaceAddress needs to store auto-configuration flags
    • #2632 -- Possible redefinition for struct sockaddr_in, related to IPv6
    • #8317 -- Haiku needs IPv6 global scope Auto Configuration (router advertisement + DHCPv6)
  • Skill set: IPv4 and IPv6 protocols, kernel and network stack development

User Interface

Preflet GUI refactoring

Several preference applications (aka preflets) could be redesigned. This includes (but not limited to) :
  1. combining Keymap and Keyboard
  2. combining Mouse and Touchpad
  3. #6983Printer
  4. #6206integrate scrollbar options into a new Appearance preflet
  5. Shortcuts
  6. Notifications
  • Skill set: c++, UI development, usability basics

Modular edit view (BIG)

Many Haiku applications are using their own edit view to provide basic editor functionalities. All these implementations work a little bit different and create an inconsistent user experience. One solution is to provide a modular and powerful editor view that could be used in various Haiku applications.

The edit view design should be modular and extensible to make it easy to implement e.g. following features:

  • syntax highlighting
  • spell checker
  • code completion, word completion
  • line numbers, ruler, 80 character limit line, hyper links
  • working on an input stream rather than on a input file e.g. to be able to open files ~100Mb without loading them into memory in one go.
  • interface to external applications e.g. to jump from a compiler error to the according line in the code
  • Skill set: C++, UI development

Media

Merge CDPlayer into MediaPlayer

The functionality of CDPlayer could be migrated into MediaPlayer, allowing the play back of audio cd's. An alternative to CDPlayer's way of controlling the device in a low-level fashion would be to make it use the wave files as presented by the cdda-fs, subscribe to volume mounts via BVolumeRoster, present a menuitem for the CD similar to one for DVDs in the VLC Media Player, having this option populate a playlist and start playing.

  • Skill set: general C/C++, userland development

Streaming support for Media Kit and applications

The media kit and related applications in Haiku relies a lot on the BMediaFile being seekable. This makes it difficult to use with non-seekable media sources such as internet streams or DVD media. Rework what's needed to get them working properly.
  • Skill set: general C/C++, userland development

Other

Fix and improve Haiku's mail system

Haiku features an integrated mail management system allowing to manage your mail using Tracker, the file explorer. This system needs some improvements and updates. See this mailing list post for a list of TODO and related ideas
  • Skill set: general C/C++, userland development

Trac Plugin: "Test and Commit Patch" functionality

Several developers have requested the ability to simply press a button that would trigger an automatic system to test and (conditionally commit) a supplied patch.

  • Skill set: Python

Add Haiku support to Allegro 5.0

Allegro is a gaming library, it has support for BeOS/Zeta/Haiku in the 4.4 branch, but they dropped BeOS from the 5.x branch. Now that Haiku is in a usable state it would be nice to get the latest builds of Allegro 5.0 working on Haiku. It's still unclear if Allegro will be applying for GSoC but they do have a developer who'd be willing to co-mentor this with a Haiku mentor.

  • Skill set: C++, userland development

Graphical project manager tool

BeOS had CodeWarrior IDE built-in, which makes it easy to create a new project and get started on development. Haiku currently only provide make and jam in the default installation, which is far less easy to use for starting developpers. The makefile engine is somewhat simpler, but more limited. All of these tools are to be used in text mode, not so good for beginners. Create some graphical tool to easily get started on 3rd party development in a few clicks. No need for a full-blown IDE.

Tracker add-on for source control

Windows has TortoiseSVN and TortoiseGIT. Do something similar with Haiku Tracker.
  • Write a Tracker add-on that has the functionality
  • Extend support in Tracker itself where needed : icon overlays, ...

Modify the app_server to support compositing

This would be a step towards faster/smoother scrolling, window positioning and drawing. Once compositing is in place, it would also be possible to create Compiz-like effects in Haiku, eg. drop shadows and window animations. There's lots of info on what would need to be done and how to go about it in this article: https://www.haiku-os.org/articles/2011-06-15_how_transform_app_server_code_use_compositing .
  • Skill set: C++, graphics development

Evaluate Qt as a potential Haiku R2 API

While in comparison with other frameworks the BeOS API was quite nice back in the day, save for a few additions (like layout management, an improved archiving mechanism, tool tips) very little has changed since. Particularly the interface kit leaves a lot to be desired these days, both in general design and completeness. The Qt toolkit on the other hand has evolved quite nicely over time and now presents a very complete and well designed API. This project shall evaluate Qt as a potential native Haiku R2 API, replacing partially or even completely the previous BeOS/Haiku API.
  • Analyze the current state of the Qt port and add/complete what is missing/incomplete.
  • Add extension in or on top of the Qt API to provide access to Haiku specific functionality (attributes, entry_refs, resources, translators, etc.)
  • As a proof of concept port an existing Haiku application (e.g. StyledEdit) over to the extended Qt API.
  • Skill set: C++, API development