Google Summer of Code Ideas

This page lists our project ideas for Google Summer of Code 2008.

Details of our selected students and their projects can be found on our GSoC page.

Before applying for a project
  • Join our IRC channel #netsurf on Freenode and introduce yourself. Also, subscribe to the developer mailing list.
  • Have access to a computer with supported OS (RISC OS, Linux, FreeBSD, etc) or an OS relevant for the project you want to apply for (Windows, Mac OS).
  • Get up to speed with Git, as we use this for source control, and get the NetSurf source code.
  • Build NetSurf and enjoy using it. (Ask if you need help.)
  • Get familiarised with the source code – read the code documentation.
When applying for a project
  • Create a set of project milestones (ranging from a couple to maximum 10). This will be useful for you as guidance and for us to set our expectations right.
  • Include your IRC nick in your application if you've spoken with us on #netsurf, so that we recognise you.
During the project
  • Most of NetSurf team communication happens via #netsurf IRC during evenings and nights (CET). We expect you to join in on a regular basis for help, discussions and project updates. Note that you're not restricted to speaking to your assigned mentor; the whole development team are willing to help wherever they can.
  • When improving NetSurf's layout engine, be able to create test cases and verify that existing test cases don't get broken.
  • Keep NetSurf's project goals in mind, especially the first point.

Please get in touch if any of these ideas appeal to you or if you have your own idea for either NetSurf or one of NetSurf's sub-projects. Come and chat to the developers in the NetSurf IRC channel or post to the developer mailing list.

All these ideas require knowledge of C, as NetSurf is entirely written in C.

See the Feature Requests tracker for more ideas.

New CSS parser and selector engine

NetSurf's current CSS parser and selector engine has several limitations. The existing code could be improved or rewritten. The limitations include:

Improvements here would improve NetSurf's rendering of many web pages, as well as the infamous acid2 test.

In the long-term, NetSurf will be requiring a DOM StyleSheet and CSS binding. The current CSS parser and selection engine aren't really structured in a manner that permits this to happen. Therefore, this project could take one of two forms:

There is an outline description of a new CSS engine, which may be of interest to those who want to take the second approach to this project. This description is fairly complete from an external API perspective. The implementation details of a new engine are completely negotiable – we have some idea of what's needed, but the student's input will be highly valued.

Regardless of which approach is taken, we would expect that testing of the code is performed on a regular basis to ensure that things are still working as expected. New testcases should be written to exercise existing bugs and test out new functionality.

Skills required: C, CSS, parsing

Difficulty: Medium

Existing code: CSS parser and modules

References: CSS 2.1 specification DOM Level 2 Style specification

Native Windows or Mac OS X ports

NetSurf currently has user-interface layers for the RISC OS Window Manager and for GTK (on Linux, FreeBSD, etc.). The GTK interface works on Windows or Mac OS X, but a native interface for these systems would give a better experience.

Skills required: C, Windows UI development or Mac OS X UI development

Difficulty: Medium

Existing code: Declarations of functions that each interface must implement, RISC OS specific code, GTK specific code


Keyboard navigation

The browser currently requires a mouse to use. Keyboard shortcuts would move between and activate links, inputs, etc. The document structure is stored in a tree, and algorithms for walking through the tree to find the next link or input would need to be developed. A further improvement would be to take layout position into account and implement moving in 2D.

Skills required: C, HTML, CSS, usability

Difficulty: Easy

Existing code: Key press handling, Box tree structures


Printing improvements

Printing is currently only available on RISC OS, and the output is difficult for the user to predict. Work could include implementing printing for GTK, print preview, intelligent paging or reformatting, support for print stylesheets, and user control over what parts of the page are printed. This might include writing a portable base and platform-specific layer.

Skills required: C, CSS, GTK, possibly Cairo, possibly Postscript

Difficulty: Hard

Existing code: RISC OS printing implementation


PDF plotter

NetSurf's graphics output is abstracted through "plotters", which are a set of functions that render output to some destination. For example, there are plotters for RISC OS window, GTK window, and DrawFile (a vector graphics format) output. Implementing a PDF plotter would turn NetSurf into a general HTML to PDF conversion tool.

NetSurf already uses several Open Source libraries (cAres & cURL, IJG JPEG, OpenSSL, libXML2, zlib, etc), so it is likely that an existing PDF write-capable library can be found and used in this project. Firstly, research the possible candidate libraries, based on criteria like: supported programming languages, its platform independence, ease of use, licence and any other possible advantages (like support for writing other vector based file formats, etc). Such research will actually mean writing some test/prototype code using those libraries in order to get familiar with their interfaces.

It is unlikely that this project will involve developing a PDF writing library from scratch. We won't rule this out for certain, but would require some convincing arguments from you.

During the evaluation of PDF writing libraries, we expect the student to become familiar with the requirements of the NetSurf plotter interface, figuring out what the issues could be from NetSurf API point view and for the PDF write library candidates. A plan should then be devised to solve these issues.

After hooking the PDF write library into NetSurf and getting some useful PDF files from web pages, it will be time to come up with a strategy to test your code. As we tend to be lazy, at least sometimes, we won't buy the "Save as..." manual save and view in a PDF viewer approach.

It could very well be that this project involves working closely together with people assigned for the "Printing improvements" project.

These project boundaries are not set in stone. We think it is a well defined project but we're happy to hear suggestions from you to enrich the project or redefine certain aspects of it.

Skills required: C, graphics, PDF

Difficulty: Medium

Existing code: Plotter interface, RISC OS plotter, GTK plotter, DrawFile plotter


Mentor: John Tytgat

Page reader

The web is a vast resource of information and services. Traditional browsers enable its access for people who can see. NetSurf attempts to help partially sighted users with a sophisticated scaling / zoom feature, however it could be improved further with a page reading option. Speech synthesis could be used to render pages as spoken output.

There are already several libraries for speech synthesis. This project would first involve enabling NetSurf to speak the textual content of a page. Further work would improve the usability of the system by consideration for such factors as:

Skills required: C, accessibility

Difficulty: Medium – Hard

Existing code:

References: eSpeak text to speech synthesizer

Dynamic pseudo classes

NetSurf currently has no support for CSS dynamic pseudo classes (e.g. :hover). The work would involve adding support for these classes to the CSS parser and selection engine and modifying the layout engine to handle dynamic style changes.

Skills required: C, HTML, CSS

Difficulty: Hard

Existing code: CSS parser, HTML handler and layout engine

References: CSS 2.1 specification

Abstract RISC OS GUI code into a separate library

NetSurf's RISC OS user interface is rich and powerful. It supports many features such as editable toolbars, dialogue box handling and menu generation. If the interface code was abstracted into a separate library, other RISC OS applications could benefit from the availability of a sophisticated, tried and tested and style guide compliant GUI toolkit.

Skills required: C, RISC OS WIMP, OSLib

Difficulty: Medium – Hard

Existing code: RISC OS specific code

References: OSLib

Extracting the core into a library

NetSurf is currently conceptually split in two – the front-end (GUI) and the back-end (core):

These two parts are then statically linked together.

Ideally, the back-end part of the browser would be abstracted to a stand-alone library, which a front-end could provide a table of entry points to. This allows for more than one program to use NetSurf's abilities efficiently, as well as giving us a chance to rationalise and tidy up the current rather ad-hoc API.

Skills required: C

Difficulty: Medium – Hard

Existing code: See "Native Windows or Mac OS X ports" and "PDF plotter". Options code in back-end


Improved inline element handling

NetSurf's handling of inline elements is particularly incomplete. This task would involve improving the way in which these elements are handled. Particular issues include:

Skills required: C, HTML, CSS

Difficulty: Hard

Existing code: Layout code

References: CSS 2.1 specification

Improved GTK front end; tabs, downloads, etc

The GTK port, while capable of navigating the web and displaying web pages, lacks may of the features which would make it suitable for every day browsing. There are lots of features that could be added which would improve the user experience. These include:

Skills required: C, GTK

Difficulty: Medium

Existing code: GTK specific code, Core code for text selection, export, etc