Wrap-up Reports 2009 : Google Summer of Code, Haiku Code Drive

This year eight students were funded to work with Haiku during the summer months, six from Google in their Google Summer of Code program and two from Haiku Inc. for Haiku Code Drive. It is both my pleasure and honor to announce that overall this year has been more successful than last. Five of the six Google Summer of Code students passed, as well as one of two Haiku Code Drive students. On top of this achievement, Adrien Destugues and Bryce Groff were granted commit access for Haiku. Maxime Simon was approved by WebKit to receive commit access as well!

Before getting into the actual results for each student, it is worth re-visiting how we got here. This is the third year in which Haiku was selected to participate in Google Summer of Code. Each year we, as an organization, strive to improve our process for both the participating students and our community. Perhaps the most significant modification was the introduction of requiring students to resolve one or more tickets in our bug tracker. The intention was to ensure each applicant had a minimal level of exposure to our project. This includes navigating and building Haiku’s source code, as well as communicating through our mailing lists and other collaboration tools. Having the requirement fairly open ended allowed the applicants to provide our mentors with initial insight to their motivation, skill, and communicative abilities. The results speak for themselves: an increased number of passing students puts the proverbial stamp of approval on this new addition to our selection process. And now for the summaries for each student…

Adrien Destugues: Locale Kit

Adrien’s project centered around adding internationalization support to Haiku, in the form of string translations and formatting information to meet the standard conventions for a user selectable region/language. Such data includes, but is not limited to, calendar and monetary values. Aspects of the implementation ranged from:
  • integrating branches/components/gsoc-locale-kit. Recently, this code has been merged to trunk. Improving the preflet and integrating the Locale Kit throughout Haiku are tasks where community contributions would greatly be appreciated.

    Bryce Groff: Partitioning Support

    Prior to Bryce’s work, DriveSetup had some functionality for volume management, being able to initialize pre-existing partitions as BFS volumes. However the ability to create and delete partitions was absent. This work consisted of finalizing the initial design of the Disk Device API, the Intel partition and extended partition add-ons, and updating DriveSetup to utilize those additions. Most of this code was not in the userland program, but in fact much deeper in the API. Bryce’s work was committed to trunk, as individual patches were ready. While some functionality, such as installing a basic partition boot record was missing, R1 Alpha1 did indeed ship with a partition manager capable of creating and deleting partitions.

    Ma Jie: ZeroConf+mDNSResponder

    ZeroConf essentially provides the ability to discover network resources, such as printers. Such network discovery is communicated over DNS multicast, which in this case is provided by mDNSResponder. A well known implementation of this functionality is Apple’s Bonjour. The first task for this project was to enhance Haiku’s existing network implementation to allow it to work with mDNSResponder. Once that was in place, the bulk of the project continued:
    • porting mDNSResponder
    • implementing a native API for service discovery
    • writing several clients to utilize the new API
    A service browser was implemented, which displays services available in your local area network. A service notifier was implemented, which pops up a bubble notification whenever services are found or lost. The API, while functional, is not fully mature. For instance, synchronous operations are not yet implemented. This leads to using an inconvenient asynchronous mode within mDNSResponder. Poorman, Haiku’s simple web server, has been enhanced with ZeroConf support, but until Haiku’s DNS resolver is able to process ZeroConf domain names, it will have limited functionality. As of now, some of Ma Jie’s patches have been committed to trunk. The remainder of his work, while fulfilling the project goals, is not yet ready to be submitted in it’s current state.

    Raghu Nagireddy: BFS FUSE

    Raghu was another student participating in Haiku Code Drive. A BFS Fuse implementation would provide read/write functionality to other operating systems that are FUSE capable. As you may imagine, this could easily help strengthen the adoption rate of Haiku, as it increases BFS’s interoperability and thus Haiku’s overall usability. In the first half of the semester, Raghu provided a working BFS FUSE implementation, which was committed to Haiku’s repository. In theory, any of Haiku’s supported file system could make use of it. However in practice, currently only the BFS code can be compiled as an FS shell module. The rest of the program did not go as well. BFS Defragmentation was slated to be the next phase of development. Raghu began studying the B+Tree implementation and even proposed a design plan. Unfortunately, he was not able provide any code for it.

    Obaro Ogbo: CIFS Client

    During the application reviewal process, Obaro seemed to be one of the top students. Unfortunately due to unforeseen circumstances, Obaro was left without internet access for the better part of the program and wasn’t able to complete his project.

    Ankur Sethi: Text Indexing

    Ankur was one of two students selected to take part in Haiku Code Drive, an independent program that runs along side Google Summer of Code and has similar goals. Ankur’s project was to implement full-text searching, similar to Mac OS X’s Spotlight. This involved creating an index_server to manage indexing new and existing files, DataTranslators to allow the indexer to farm data from specific file types, and a basic GUI for performing searches. The core of the searching functionality is provided by CLucene, which was also ported by Ankur. Originally he intended to use OSDrawer for hosting his project, but ran into some issues which lead to using Google Code. Currently performing simple text searches is possible. Future work involves writing additional DataTranslators, a preflet, and ideally integrating the search UI into Tracker’s “Find” utility.

    Maxime Simon: WebKit and Native Browser

    Web browsers have been a sore spot for Haiku over the years. Even though we are using a fork of Mozilla’s 1.8 codebase, commonly known as the Firefox 2 branch, much is left to be desired. A native browser utilizing WebKit fits in line with Haiku; primarily since this combination would possess a better multi-threaded design. In late 2007, Maxime’s mentor Ryan Leavengood did an initial port of WebKit. While reasonably functional, the code quickly lost synchronicity with the official repository. Maxime’s task included applying and updating the Haiku specific code to WebKit’s latest code and to then prepare this work into patches, bug reports and eventual commits to WebKit’s repository. During this time, the WebKit developers initiated the process for bestowing commit access to Maxime. By the end of the project only two major known issues remained: scrolling and viewing pages with JavaScript. On the native browser front, several features were implemented:
    • a multi-process prototype in the existing browser shell
    • a bookmarking library
    • a basic toolbar
    These last two items were designed so as to allow other applications to make use of them. The majority of patches have already been accepted in the WebKit Repository and more are in the queue – hopefully Maxime will be committing those himself! The browser’s source code is being hosted at http://github.com/leavengood/Haiku-Browser/commits/master While the repository mentions it as “Haiku Browser”, it isn’t confirmed to be the actual name. Now that the Summer of Code is complete Maxime’s mentor Ryan Leavengood will be taking a more active role in the improvement of the WebKit port and the continued development of the new browser. Contributions to either project are welcomed!

    Johannes Wischert: ARM Port

    Given Haiku’s small resource footprint, a port to an ARM based architecture seems to be a natural fit. To aid development, the Gumstix Verdex was first targeted, as it can be emulated by Qemu. However, the Gumstix Overo with Tobi expansion board is the ultimate goal. Shortly before Google Summer of Code, Johannes modified Haiku’s toolchain to support creating ARM binaries. The goals included implementing a modified U-Boot bootloader, porting the kernel, and drivers for the microSD reader and serial port. Quoting his blog: “The Haiku loader that gets loaded by u-boot finally is able to load the kernel and start it and we even have minimal framebuffer support running.” His code was also committed to trunk throughout the summer as individual patches. Some instructions for building and testing the port were posted by his mentor, Fran├žois Revol to the haiku-development mailing list. Having completed the project’s goals, a foundation for Haiku on ARM has been put in place and much more remains for a fully functional port.

    Overall, this was perhaps the most successful Summer of Code on our books yet! Our deepest thanks go out to Google for providing us with this opportunity, the community members who donated to Haiku Code Drive 2008, and to the community members who stepped up to mentor these exceptional students! We implore you to help these new community members feel welcomed and to work with them on improving the projects. They have done a magnificent job over this summer and deserve our hats off to them! Well Done!