Projects/Summer of Code/2008/Ideas

< Projects‎ | Summer of Code‎ | 2008
Revision as of 09:41, 18 March 2008 by Thiago (Talk | contribs)

Jump to: navigation, search

This page is an open list for ideas for the 2008 edition of Google Summer of Code. This page is open for new ideas from anyone - you do need to log in to the wiki to edit this page though (see below for why).

This list is not exhaustive. It is just a collection of some ideas. To get further ideas, please feel free to use any resources and past ideas.

Before proceeding, read the participation instructions and the notes on editing this page. They are useful for students and developers alike.


Past ideas

You may want to take a look at the ideas page for 2006 and 2007. Many of the ideas there are still valid today.

Notes on editing this page

Before making any modifications, please log in to Techbase. This will help us track who is contributing to the ideas. This page is protected, so you can't modify it without logging in anyways.

When adding a new idea, please bear in mind the question: can a student with very little knowledge of KDE code complete this work in three months? If you can't answer "yes", your idea is probably not for this page. Please remember that this is not a generic wishlist page for KDE developers.

When making modifications to existing ideas, please consider whether you're changing it more fundamentally or just superficially. If your changes are substantial, you probably have an entirely new idea. Similarly, if your idea is modified and you feel it no longer reflects your original thought, please split the idea in two, restoring yours.

Please use the talk page if you want to discuss an idea.

Finally, do not delete ideas without a reason for doing so (like, for instance, being contrary to KDE ideals, being completely unrelated to KDE, being unfeasible, etc.) -- you may want to state in the talk page why you removed the idea.

Do not re-add ideas that were removed without discussing first with the developers of the target application.

Project ideas

These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.

If there is no specific contact given you can ask questions on the general KDE development list See the KDE mailing lists page for information on available mailing lists and how to subscribe.

When adding an idea to this section, please try to include the following data:

  • if the application is not widely known, a description of what it does and where its code lives
  • a brief explanation
  • the expected results
  • pre-requisites for working on your project
  • if applicable, links to more information or discussions
  • mailing list or IRC channel for your application/library/module
  • your name and email address for contact (if you're willing to be a mentor)

KDE Libs

KDE Core libraries

The KDE core libraries (kdecore, kdeui, kio, kparts) are the most basic libraries that all KDE applications depend upon.

Project: ODF writer

Brief explanation: The ODF file format could be used for a wide range of applications, not just traditional office tools such as a word processor or spreadsheet.

As an example, consider a tool like ksnapshot (which does screenshot captures). When writing documentation on how to perform some task with an application, you might work through the application taking many screenshots. If we had a class in kdelibs that could write ODF files, and the right application integration, perhaps the tool could create a file full of screenshots, which could then be annotated with some explanation to create a "visual guide" for that task.

ODF is a pretty simple format to write (much less simple to read, because of the many options), and there is significant expertise in the KOffice community on that format.

Expected results:

  • Properly designed, implemented, documented and tested class(es) for ODF writing.
  • Two usages of the class in different KDE applications (e.g. Okular and ksnapshot).

Hints for proposal:

  • Explain what design and coding principles you will apply (goal: convince us that the code will be suitable for kdelibs)
  • Identify schedule for each element (goal: demonstrate that the task can be completed in the time you have available)
  • State your understanding of ODF (goal: demonstrate commitment to the task outcomes)

Knowledge prerequisites: Sound C++ and Qt knowledge. Some familiarity with other ODF tools would be useful.

Mentor: TBA

Project: Diskspace Service

Brief explanation:

Applications that write large amounts of data to partitions must nor fill them up completely. As an example there is strigi/soprano which can have a large index and will fill your ~ until 0 bytes remain. Other applications are e.g. those that write data to .thumbnails.

To prevent this there is the need for a service that can be queried by applications, whether the user-set limit of remaining MB is already reached or not.

As an extra the user could be notified if the set limit is reached.

Mentor: Sebastian Trueg

Project: Support for fingerprint authentication

Brief explanation: Many laptops come with a simple fingerprint scanner that can be used to authenticate users. It would be nice if KDE had support for these fingerprint scanner integrated. This way you could use them to log into KDE, unlock KWallet, maybe even use it to enter nickname in highscores for games... It would probably be a good idea to work with fprint project when integrating the support.

Project: Smart toolbars

Brief explanation: Currently the policy is to have as few buttons in toolbar as possible by default. Only the ones that have a very high chance of being used by almost all users of an application. Maybe there could be an option added to toolbars so that it would monitor which actions (from menus) the user uses. When the new smart toolbar notices that the user has used some action very frequently and which doesn't have a button in the toolbar yet, it could suggest to the user to automatically add it to the toolbar. Buttons could also be removed after not using toolbar buttons for a long time. Off course there should be 3 options for this feature: 1. to automatically add and remove toolbar buttons without asking, 2. to ask before adding or removing, and 3. to disable this feature so that toolbars are the same as now.


Solid is the KDE hardware abstraction layer, that enables KDE programs to get consistent results when running on different platforms.


Phonon is the KDE audio abstraction layer, that enables KDE programs to produce basic and medium-level multimedia functionality in any platform without platform-specific code.


KHTML is the current KDE HTML engine, used by the Konqueror web-browser and other applications to display HTML in their interfaces.


KJS is the JavaScript engine used by KHTML and Kross to run JavaScript programs.


Sonnet is the KDE grammar, spell-checker and language-detection engine.


Kross is a modular scripting framework that provides a complete framework to embed scripting interpreters like Python, Ruby and KDE JavaScript transparently into native applications to bridge the static and dynamic worlds together.


Oxygen is the KDE 4's default look-and-feel. It comprises of the Oxygen icon set (including the palette and guidelines for icons), the Oxygen sound theme, the Oxygen wallpaper collection, the Oxygen window decoration and the Oxygen widget style. Note that for Summer of Code, you must produce code, so the window decoration and widget styles are your more likely candidates.


  • Implement an easy usable fineprint-like solution for collecting pages from different printing sources (browser, kword, krita...) and allow it to rearrange single pages (not printing jobs), delete pages, add blank pages. Information also in wish-list-item: 90989. I am the reporter of this wish, you can contact me there. I do not have the abilities to program, but I am willing to help testing an implementation and discuss how it should look like.
  • WARNING! i'm doing exactly this for my semester project at school (we are two students, so we can't apply for SoC with this). We are probably developing it in pure QT (the other student is a gnome user).You can get in contact with me:

KDE Base applications


Konqueror is KDE's powerful web browser and file manager.

Project: Bookmark Wallet

Description: This isn't actually a project to be a part of Konqueror itself, but rather a separate application similar to KWallet. The application should provide a database for the storage of URL bookmarks. The database should be able to connect to remote storage, such as the Google bookmarks service, for synchronization and backup. The URLs should be easily manageable, and include a concept of ratings for the URLs. A plugin should be written to allow Konqueror to easily interface into the system, or preferably Konqueror itself should be modified to use the storage system when it is available. The application should provide an interface which is easy to connect to from a browser plugin, so that plugins could be written for other browsers, such as Firefox, as well. There should also be a plugin interface into the database, to allow support for other remote storage backends, such as foxmarks, to be created. The application should handle multiple concurrent connections to the database without issues. Additionally, the application should provide an event interface to notify all connected browsers whenever a bookmark is added, changed or removed.

Comment: Rather than developing a separate application, interested students should have a look at the Akonadi resource localbookmarks

Comment: Would be great if this would include saving RSS-Feeds in as well, synchronising them with webbased feedreaders

Comment: a database of feeds would indeed be great. If implemented with a "feedtype" field, it would solve the problem of feeds containing news that's best read in a traditional aggregator, audio that's best heard in a music player, video that's best seen in a video player, etc. Apps could just open the query the feed DB for suitable feeds. Or perhaps they could query for feeds with particular enclosure mimetypes? Hmm. That raises the issue of pre-loading the feed, and integration with libsyndication.


Dolphin is KDE 4's default file manager application.

Project: Support Windows' "Previous Versions"

Description: Shadow Copy (also called Volume Snapshot Service or VSS) is a feature introduced with Windows XP with SP1, Windows Server 2003, and available in all releases of Microsoft Windows thereafter, that allows taking manual or automatic backup copies or snapshots of a file or folder on a specific volume at a specific point in time. It is used by NTBackup and the Volume Shadow Copy service to backup files. In Windows Vista, it is used by Windows Vista's backup utility, System Restore and the Previous Versions feature. Samba supports Shadow Copy since version 3.0.3.


Konsole is KDE's terminal application.

Kate and KWrite

Kate is KDE's Advanced Text Editor, both a full-featured text editor application and a KPart engine ready for embedding into other applications (like KDevelop, Quanta and Kile). KWrite is a simple text editor based on the KatePart engine and is KDE's default text editor.

Project: vi mode for the Kate editor

Project overview: Create a vi-like modal editing mode for the Kate editor part and improve the kate command line to a point where it can be used efficiently for vi commands in this mode.

Expected results: This project should implement a vi-like, modal editing mode for kate. This mode will be selectable by the user.

Mentor: Christoph Cullmann has agreed to mentor this project.

KDE Workspace


Plasma is KDE 4's desktop and panel tool, replacing KDE 3's kicker and kdesktop. It's an advanced and powerful application with revolutionary ideas.

  • Plasma Packages
    • Plasma provides a simple packaging system for widget (plasmoids), SVG themes, wallpaper sets and indeed any type of application add-on data. It is not a replacement for apt, rpm, klick, etc. but rather is designed to help with the challenge of creating, sharing, installing and managing run time add-ons as have been made popular with KDE's Get Hot New Stuff framework.
      • Project I: A GUI Creator For Packages: This project involves taking the already started user application "plasmagik" and refining it to be ready for production use. The application must take a plasma package description, display it in a user friendly way in the UI and allow the user of the application to add files to the various nodes in the structure (e.g. graphics to an "images" entry). In particular this project would consist of:
        • Removing assumptions based on the plasmoid package structure and instead using the generic Plasma::PackageStructure class.
        • Making the UI more user friendly
        • Streamlining the upload support
        • Writing a tutorial on KDE's TechBase on how to employ the application as an add-on creator.
        • As the plasmagik application already has had a fair amount of work done it and an active community of developers interested in its future, the scope and support for this project should be within the limits and expectations of the SoC.
      • Project II: Package Management: This project involves creating a small utility application consisting of a dialog and a control panel that uses it which allows the user to list, share and remove installed Plasma packages. As there are no dependencies, binary compatibility, etc issues usually associated with full package management applications, this would be well suited to a SoC project.
  • Zeroconf Integration: This project would involved adding a zeroconf announce and discovery feature to libplasma that would provide a Plasma::Applet with a simple API to find other Applets of the same type on the local network. A test plasmoid would be created to prove the working status of the zeroconf support. Remaining time would be spent adding zeroconf features to applicable existing plasmoids.
  • DataEngine + Plasmoid for zeroconf services: Browser for zeroconf services available (perhaps doable with above project as well?)
  • Physics Engine: Take an existing 2D physics engine and experiment with using it within a containment to emulate "natural" object interactions. taken
  • Setting a video as desktop background
  • Dynamic desktop background: A desktop background which displays different wallpapers according to information like time of the day, season, weather etc.
  • Mobile device containment: Implement a Plasma::Containment that is appropriate in form factor and UI layout for a UMPC/tablet style device.
  • Touchscreen profile: The use of UMPC form factors with a touch screen is increasing -- certainly in some business areas. Plasma is prepared for handling different form factors and for providing a user interface experience that adjusts to device characteristics. The touchscreen profile SoC project (touchscreen hardware will probably be arranged through the mentors) aims to identify where Plasma / KDE works well and where it doesn't on small (VGA or SXGA) screen sizes; then it will fix the bits where it doesn't work well and introduce a general mechanism for handling small screens. In addition, UMPC on-screen keyboards introduce new UI challenges; integrating these in a meaningful way with plasma is an extra part of this project (or possibly an extra project). Dialog and menu handling on small screens, with pagination of menus and (re)pagination of tabbed dialogs is another topic. Mentors: Adriaan de Groot and Armijn Hemel.


KRunner manages the screen locking, run command dialog and provides a general natural language interface to applications, desktop services, network locations, files and data (e.g. math calculations, spell checking, word definitions, etc). It replaced the Run Command dialog in kdesktop from KDE3, is multithreaded and shares code with Plasma.

Some of the items below may take an entire SoC project, others may be better combined to flesh out an entire summer's worth of work.

  • Ranking: Results are returned to KRunner by individual runners. These result must then be ordered for the user prior to display. This project would consist of improving the ranking of returned results by working on two related fronts:
    • Tweaking individual runners to more accurately rate their own results.
    • Improving the final ranking system employed by the host application.
  • Abstracting runner management out of KRunner: The main pieces of using runners (SearchContext, SearchMatch and AbstractRunner) exist in a shared library (libplasma). However, much of the code for managing the actual runners at runtime is contained within the krunner application itself. Abstracting this code out would make it easier for other components and applications to user runners as well.
  • Using runners in Kickoff: The kickoff menu has a search tab. Currently it does it's own internal search. It should, instead, be using AbstractRunners for this. This task would go well with the runner management task above.
  • Xesam search runner: Write an AbstractRunner plugin that uses the Xesam query spec to forward user queries to a search store. The trick will be in making it performant as well as providing support for paging through requests.
  • Write as many runners of your choice: one might call this a "marathon" (get it? runners? as many as you can? ahaha! *sigh*). I wrote [this blog entry] looking for ideas for runners and got many, many suggestions. I think it reasonable to expect that over the course of a summer's work one might be able to write 5-10 runners depending which ones were selected.


KWin is KDE's X11 Window Manager program, greatly improved when compared to its older brother in KDE 3.

  • Compiz-like Effects in KWin: Effects like Desktop Cube often greatly improve the usability, especially when it comes to multiple desktops, and they are just cool.


KDM is KDE's Display Manager and login application.

  • More Ways of entering login data: Currently, KDM only supports logging in with Username and Password in two fields on the one login mask. Entering first Username and then Password in two separate masks (Yeah, just like GDM) or searching for users while typing in the letters of a username would be really handy and cool.


  • Plasma Dashboard Screensaver: There could be a new default screensaver added. When started it would show the Plasma Dashboard with all the plasmoids on it. The Dashboard could be the default one (the one that shows up when you press Ctrl+F12) or the user could create a custom one just for this screensaver. These two options should be in the screensaver's properties. For creating custom layout there should be some tool to set background and add plasmoids.

KDE Runtime

Project: KHelpcenter: What's this explosion

Description: A lot of help about elements of the user interface is available in the form of "What's This?" texts. Unfortunately it's pretty cumbersome to get to this information for a user as it needs clicking on the "question mark button" in the title bar of the window/dialog and then clicking on the user interface element. This project is about making this information more conveniently available by providing an "exploded" view of the "What's This?" help as part of the application's manual in KHelpcenter.

All "What's This?" texts of a given window could get displayed in a view at once, e.g. by using some bubble views and connecting lines to the interface elements. These views could be extracted from the run-time instances of the windows by inspecting the widget hierarchy. This could either be done as a special offline run to pre-generate help pages or dynamically at run-time of the application. Investigations of what method would be the best would be part of the project.

Mentor: Cornelius Schumacher

Project: KHelpcenter: Cheat sheets

Description: Task based documentation of applications can often be presented best as step-by-step instructions how to achieve certain user goals. With the help of application's D-Bus interfaces KHelpcenter could be extended to provide interactive versions of these step-by-step instructions. Users would be provided with explanations and instructions how to accomplish tasks together with links that would open corresponding dialogs, execute described actions, etc. In the Eclipse project this kind of help is called cheat sheets.

Mentor: Cornelius Schumacher



Project: Improve ISO OpenDocument support

Explanation: Improve loading and saving of the ISO OpenDocument format what includes 1) extend the current saving code, 2) extend the current loading code and 3) probably also extend the rendering engine aka the text flake-shape.

Expected results: be sure everything we are able to load, display and edit is also saved back correctly using the default file format.

Mentor: Sebastian Sauer <>

Project: Collaborative editing of documents over a network.

Explanation: Make it possible for two or more users to work at the same document in KWord at the same time over a network. Both users would open the same document, and changes made by each user are synchronized to the other user's editing session.

Project: Version control integration.

Explanation: Integrate version control system support with KWord to allow easy control over revisions of documents. It should be possible to connect with remote revision control systems, to allow collaborative work on projects, similarly to how software is developed. It should be easy for the user to browse through the history of document versions in the version control system, to see what has changed. CVS, Subversion and git should be supported.

Project: Improve legacy MS Office (2003) documents support

Explanation: Current MS Office formats support is kinda limited (especially write support). To decrease the barrier for adoption, better MS Office support is a way to do that.



Kexi is an integrated data management application for desktop users like Microsoft Access.

Project: Improve Kexi Data Import/Export

Brief explanation: Currently Kexi allows importing CSV files into an existing database, and converting MySQL/PostgreSQL/MS Access databases into Kexi databases.

The aim of this project is to provide plugin(s) that import from more database backends/formats.

You can select backend you want to implement migration for:

  • HSQLDB - the Base's DB backend (ODB file format, very important to have)
  • ODBC
  • Paradox
  • DBase (e.g. using Xbase)
  • Firebird (note: pending licence checks if we want GPL-compliance)

For the ODBC driver, a migration plugin and a backend plugin should be provided. For Paradox, only a migration plugin is required, although this will require modifying the migration framework to allow more than one file to be selected as the source database (i.e. the database to be imported).

Both a migration plugin and a backend plugin could be provided for HSQLDB, which should be implemented using JNI to invoke JDBC methods in the HSQLDB library. To avoid Java and dependencies, a small tool could be developed in Java to export/import to/from a intermediate format, and then used from within a Kexi migration plugin.

In any case, migration plugins are simpler to implement than direct access plugins (drivers), so these can be developed first.

Expected results: HSQL support would enable Base format for KDE and KOffice itself, a good companion to already existing OpenDocument support. ODBC connectivity would add many new possibilities directly to KDE.

Knowledge Pre-Requisite: knowledge of C++, (knowledge of Qt and experience with a given database format/backend is recommended)

More info:

Mentor: Jaroslaw Staniek <>, Sebastian Sauer <>

Mailing list: kexi at

Project: Kexi Web Forms

Brief explanation: Web Forms allow to read-only or read-write access to database projects created with Kexi. It is optional feature for uses where client has no Kexi installed for any reason. The fact that the Web Forms will use Web standards, adds another advantage over competitors like MS Access (which uses proprietary Windows-only ActiveX bindings).

Proposed solution is to develop a small standalone web server. It is probably already written in C++ or C by FOSS community. Good examples are lighttpd - and (being already in KDEnetwork module) KPF -

The web server would be dynamically linked to kexidb and thus can access Kexi databases via universal KexiDB API, and create HTML content on demand as an answer to HTTP requests.

For alternative solution see "Alternative solution for Kexi forms using PHP" below.

Expected results: Shortly, it is internet-enabler for KOffice/KDE data management.

Knowledge Pre-Requisite: knowledge of C++ and HTTP/web standards, (knowledge of Qt and experience with a given database format/backend is recommended)

More info: Solution proposed by Jacek Migdal last year

Mentor: Jaroslaw Staniek <>

Mailing list: kexi at

Project: Alternative Solution for Kexi Forms Using PHP

Brief explanation: Create a Kexi plugin generating PHP code saving it directy to the filesystem. This will require Apache (or other PHP-compatible web server) to be present and configured, and also will require the plugin to be packaged with a script that will install appropriate tools that allow r/w accessing the Apache/php subdirs.

Expected results: The generated code could directly access MySQL or PostgreSQL servers at the backend, so users could immediately have a robust server-side solution without complex requirements.

Knowledge Pre-Requisite: knowledge of PHP, web standards and C++, (knowledge of Qt is recommended)

Mentor: Jaroslaw Staniek <>

Mailing list: kexi at


Project: Sumi-e brush engine

Project Information: While there is already an attempt at a sumi-e brush engine in Krita, the current code is limited and uses an old-fashioned way of simulating brushes.

Expected results: This project should implement an anti-aliased, bidirectional ink-transfer simulation of a sumi-e brush, together with a user interface to define brushes. The brushes should react to pressure, tilt and rotation of the a tablet stylus. The results should be realistic. Loan hardware for use during the development phase is available.

Knowledge Pre-Requisite: Basic knowledge of basic 2d graphics principles. A list of relevant papers and books is available.

Mentor: Boudewijn Rempt <> The mentor can help preparing the project proposal for submission to Google.

Project: Sketch-pad interface for Krita

Project Information: Krita is a large and complex application built around a sophisticated painting engine. The goal of this project is to create a new interface around the Krita engine, specialized for quick sketching.

Expected results: This project should implement a new interface around Krita, presenting the user a single-layer plus tracing paper interface with a single freehand sketching tool. Easy to use and graphic color and paint operation (brush, pencil, eraser etc.) interface elements must be designed and implemented.

Knowledge Pre-Requisite: C++


Project: Shader filters and generators for Krita

Project Information: Some initial work has already been done to make it possible to write filters in the OpenGL shading language. This project should take that initial code as a basis and implement a fully functioning plugin for Krita that allows filters and shaders to be executed on images in any colorspace.

Expected results: The plugin should have a finished user interface and make it possible to experiment with shader filters in an interactive way. Example filters must be implemented.

Knowledge Pre-Requisite: C++, OpenGL.


Project: Animation support

Project Information: There is no support at all in Krita for animated images such as GIF or MNG or for working with images in an animation context, such as textures or backgrounds in applications like Blender. The applicant should first investigate user needs and use cases and then implement support in the user interface and in the import/export filters.

Expected results: A user-friendly way of working with animated images (i.e., not by making each frame a layer), but e.g. a docker that shows the the animation running in thumbnail format. Import/export filters for relevant file formats.

Knowledge Pre-Requisite: C++


Project: RAW plugin

Project Information: Krita's current raw plugin is based on a shell exit to dcraw. This is not sufficient and needs to be re-implemented.

Expected results: A next generation plugin should implement loading of raw images either through libopenraw or libkdcraw; preferably designed in such a way that we can switch libraries when opportune. The plugin should allow the user to set conversion parameters in a way that is useful to photographers. An extension to this project could be the implementation of a bayer colorspace model: that is, a colormodel that allows us to load the raw images and edit them in the native raw format, without conversion.

Knowledge Pre-Requisite: C++


Project: PSD and Gimp plugins

Project Information: Krita is powerful enough to handle nearly all that the Gimp and Photoshop are capable of saving. This project is about creating dedicated file import/export filters that can handle as much of these file formats as possible, possibly through the use of existing libraries.

Expected results: 4 plugins: psd import/export and xcf import/export. These plugins should be able to handle complex files in all supported colorspaces.

Knowledge Pre-Requisite: C++


Project: Photoshop-compatible brush engine

Project Information: A paintop plugin that can load and handle current photoshop brushes. This entails reverse engineering of the Photoshop brush file format and implementing a procedural brush engine that matches the Photoshop brush engine.

Expected results: A procedural brush engine with settings dialog that can load and save current photoshop brush files.

Knowledge Pre-Requisite: C++


Project: Workspaces

Project Information: A workspace is a loadable package of settings that finetune Krita for a particular purpose. A workspace could contain additional plugins (like an image browser plugin for batch operations) and a subset of resources. Example workspaces could be batch-editing of images, editing of animation sequences or painting or sketching.

Expected results: the user interface and framework to make packages of plugins and resources that users can switch between. Also extra plugins to extend krita in areas like batch processing that do not exist yet.

Knowledge Pre-Requisite: C++, artistic workflow


Project: Kipi and digikam plugins compatibility

Project Information: Kipi and digikam provide lots of interesting plugins for working with 8 and 16 bit RGBA images. It would be great to be able to re-use those plugins from within Krita.

Expected results: Two plugins that load kipi and digikam filters into two new menus in the filter menu. Code to convert Krita layers to the digikam image representation and back, taking care of icc profiles and other niceties.

Knowledge Pre-Requisite: C++, artistic workflow




Umbrello is the UML drawing and design tool in KDE.

Project: Add the capability to draw SysML diagrams (

Project: Port Umbrello to QGraphicsView


Project: Kobby. A text editor which allows multiple users modify a set of documents at the same time. This is called a collaborative text editor.

Brief explanation:

  • The idea is to create a KDE based application that depends on the infinote library which is the successor of the obby library.
  • It would be really nice to have integration with already existing editing and coding solutions: as KDevelop, or Kate for instance.
  • It would be even better if it was a katepart plugin so it can be used everywhere kateparts are used. The plugin integration can probably be done by extending KTextEditor to use the infinote API.

You can find the Gobby page here, where you can also check out the infinote library code. Svn repository: svn://


COMMENT: I had filed my vision of collaborative editing in KDE applications as wishlist item 149498. Also see bugs 79721 and 145011



Project: Marble - Routing

Project Information: Marble is a generic geographical map widget and framework that is meant to be used by KDE4 applications. It is also distributed as a standalone application in KDE4.

Brief explanation:

  • Build on the inclusion of OpenStreetMap data in Marble.
  • Implement routing algorithms, ex. A*
  • implement a display of the route on the globe.
  • Optionally, show a list of roads and turns to get to destination.

Expected results: Ability to chose start point, end point and type of transport (car, bike, foot etc.) and get a display of a route on the globe.

Knowledge Pre-Requisite: Required: C++. Could be useful: Qt, knowledge of OpenStreetMap.


Project: Marble - OSM Annotation

Brief exmplanation:

  • With a UMPC (possibly with built-in GPS receiver), it is possible to go into the field and hold a "verification party" to check the accuracy of OSM data. However, making notes when the OSM data is inaccurate is somehow annoying.
  • This project will implement on-screen annotation for OSM data overlaid on Marble, including mark and circle (i.e. drawing stuff on the map) and text annotation (taken together, it means you can draw a circle on the map and add a note saying what's wrong there).
  • Integration with UMPC stylus and on-screen keyboard input methods is needed.
  • Aggressive caching of Marble / OSM data in order to display it in the field is needed as well (compare Google Earth on an iPod).
  • Bonus points for optimizing for battery life.

Mentor: Adriaan de Groot and Armijn Hemel. Touchscreen hardware might be provided on loan through the mentors.


Project: Parley - Practice

Project Information: Parley is the vocabulary trainer that comes with KDE4. It is based on KVocTrain but has a much improved GUI. It allows to manage and exchange vocabulary collections that are stored in XML and provides advanced features, such as different practice modes.

Brief explanation: The library and the GUI for editing vocabulary have been rewritten to a great extent. Now the thing that is still lacking is the most important part, the actual vocabulary practice. Based on QGraphicsView a nice practice dialog can be implemented, learning does not have to look boring.

Expected results: A working practice which supports different modes of practice, ranging from multiple choice and written tests to conjugation and other grammar practices. Support for themeing is desireable.

Knowledge Pre-Requisite: Required: C++. Could be useful: Qt, QGraphicsView, basic SVG knowledge.

Mentor: Frederik Gladhorn <frederik DOT gladhorn AT kdemail DOT net>


Project: KStars: Millions of stars

Project Information: KStars is a desktop planetarium program for KDE. Its display includes 130,000 stars down to 9th magnitude, which is well below the naked-eye limit, but inadequate for advanced purposes.

Brief explanation: We would like to see KStars displaying millions of stars, without adversely affecting the program's responsiveness. Much of the infrastructure needed to accomplish this was implemented as part of the KDE-4.0 port, but the remaining work to make millions of stars a reality would be a nice SoC project.

Expected results: Expanding the KStars database to include at least a million stars, while maintaining the current level of responsiveness. This will likely require asynchronous disk i/o to read in regionalized chunks of stars data, so that only the onscreen portion of the sky is loaded into memory.

Knowledge Pre-Requisite: Required: C++, and probably Qt. Threaded programming a plus.

Mentor: Jason Harris <kstars AT 30doradus DOT org>

Project: KStars: Prettyfication

Project Information: KStars is a desktop planetarium program for KDE. The display is interactive, but it could be made more beautiful.

Brief explanation: We often get good suggestions for making KStars look better. Choose any of the following ideas: realistic rendering of asteroids and comets (including tails!); texture-mapping of the sky (this would mostly allow a photorealistic Milky Way); texture-mapping of planets; realistic sky-lighting effects (i.e., sky is blue in the daytime, gets gradually darker and colorful at sunset).

Expected results: Successful implementation of any of these ideas to make KStars more beautiful.

Knowledge Pre-Requisite: Required: C++.

Mentor: Jason Harris <kstars AT 30doradus DOT org>

Project: KStars: Printable star charts

Project Information: KStars is a desktop planetarium program for KDE. It already has a print feature, but the printed chart could be much better.

Brief explanation: A printed star chart should at least include a legend explaining the symbols, and provide some information on the location of the user, the time and date, etc. The user would ideally be able to annotate the chart in various ways.

Expected results: Significant improvements to the printed star charts in KStars.

Knowledge Pre-Requisite: Basic programming skills, ability to quickly learn QPainter API.

Mentor: Jason Harris <kstars AT 30doradus DOT org>

Project: KStars: Many Moons

Project Information: KStars is a desktop planetarium program for KDE. It currently includes Earth's moon and 4 of Jupiter's moons.

Brief explanation: Generalize the JupiterMoons class to encapsulate any planet's Moons. The project will require some research to identify a public source of orbital data for planetary moons, most likely from a NASA webpage.

Expected results: Implement moons for at least Mars, Jupiter, Saturn, and Pluto with the new system.

Knowledge Pre-Requisite: Required: C++. The project doesn't require much contact with Qt/KDE APIs, and the existing JupiterMoons class can be used as a template.

Mentor: Jason Harris <kstars AT 30doradus DOT org>


Project: Step: 3d mode

Project Information: Step is an interactive physical simulator for KDE. Currently it lives in playground but it will be included in kdeedu package for KDE 4.1.

Brief explanation: Implement physical simulation in 3d. This involves:

  • convert all classes in StepCore to templates with dimension as a template parameter, implement specialized versions where required, modify meta-object system to handle it
  • implement 3d mode in GUI: viewing and editing

Expected results: Ability to create, edit and view 3d simulations in Step with the same set of objects as in 2d.

Knowledge Pre-Requisite: Required: C++, basic OpenGL, basic physics (mechanics). Could be useful: Qt.

Mentor: Vladimir Kuznetsov <ks dot vladimir at gmail dot com>

Project: Step: a game

Project Information: Step is an interactive physical simulator for KDE. Currently it lives in playground but it will be included in kdeedu package for KDE 4.1.

Brief explanation: The idea is to create a game based on physical simulation where the player have a fixed list of equipment (like springs, balls, cat and mice, teapot, etc.) and should use it to build a machine to achieve a given goal (for example put the ball in a basket, capture the mice, prepare a tea, etc.). The user places the equipment, than press Start button which starts physical simulation and if (in certain time limit) the goal is achieved the game is won. In the other case the user could try again. Similar projects: old game named "The Incredible Machine" and newer (but commercial) one named "Crazy Machines".

The game can be implemented as standalone application using StepCore or as special restricted 'game' mode for Step (probably with tweaked graphics).

Expected results: Playable game and several levels to test it.

Knowledge Pre-Requisite: Required: C++. Could be useful: Qt, basic physics (mechanics).

Mentor: Vladimir Kuznetsov <ks dot vladimir at gmail dot com>

Project: Step: simulation of chemical reactions

Project Information: Step is an interactive physical simulator for KDE. Currently it lives in playground but it will be included in kdeedu package for KDE 4.1. This project also relates to Kalzium.

Brief explanation: Simulate some basic chemical reactions using classical molecular dynamics methods with empirical potentials. At first initial settings for simulation should be prepared by hand (as XML file), if there will be enough time an editor could be implemented too. This project involves:

  • convert required classes from StepCore to handle 3d simulations (you will need only several classes which are trivial to convert)
  • implement required objects and potentials in StepCore
  • implement GUI for observing the simulation (investigate the possibility to use avogadro library for visualization), GUI should also allow altering of some properties like masses and charges
  • prepare demonstrations of several common reactions

Expected results: Chemical reaction viewer which could load predefined experiment, modify some basic properties and run the simulation. Prepared simulation for several common reactions.

Knowledge Pre-Requisite: Required: C++, physics, basic chemistry. Could be useful: Qt, basic quantum mechanics, knowledge of common molecular dynamics simulation techniques and numerical methods.

Mentor: Vladimir Kuznetsov <ks dot vladimir at gmail dot com>

Project: Step: fast water and gas simulation

Project Information: Step is an interactive physical simulator for KDE. Currently it lives in playground but it will be included in kdeedu package for KDE 4.1.

Brief explanation: Currently Step has molecular dynamics based simulation of gas and water (that is a gas is simulated as a collection of particles). This is very usefull for demonstrating microscopical properties of the gas as well as its connection with macroscopical quantities like temperature. But this is far from optimal to demonstrate things like a boat floating in the water, water flowing from a glass, etc. This project involves:

  • investigate fast methods of simulating water and gas: ranging from molecular dynamics but with simplified potentials, various optimizations, coarse graining methods, to lattice Boltzmann methods; investigate existing libraries for water simulation (for example take a look at elbeem library from Blender)
  • implement selected method of simulation or incorporate selected library in StepCore
  • implement GUI in Step for creating and modifying macroscopical quantities of gas and watter

Expected results: Ability to easily simulate in Step experiments like a boat floating in the water, water flowing from a glass, etc.

Knowledge Pre-Requisite: Required: C++, physics, numerical methods. Could be useful: Qt.

Mentor: Vladimir Kuznetsov <ks dot vladimir at gmail dot com>

Project: Step: other ideas

Project Information: Step is an interactive physical simulator for KDE. Currently it lives in playground but it will be included in kdeedu package for KDE 4.1.

Brief explanation: These are smaller ideas related to Step. You can combine several of them to compose you project.

  • use KAlgebra library for parsing user-supplied expressions in PropertiesBrowser; allow value in Meter, x- and y-values in Graph to be arbitrary expression; implement ParametricForce object that will apply a force given by user-supplied expression; implement a series of ParametricJoint objects that will allow creation of various parametric constraints (like fixed particle trajectory)
  • scripting for Step using either QtScript or Kross
  • multi-threaded calculations in StepCore (knowledge pre-requisite: multi-threaded programming)
  • correctly handle stiff problems in StepCore (knowledge pre-requisite: numerical methods)
  • calculation of gravitational and electromagnetic force between non-point objects by integrating (knowledge pre-requisite: numerical methods)
  • make StepCore compilable without Qt
  • improve soft-body support: implement automatic creation of arbitrary-shaped soft bodies, better soft-body border handling, investigate better (more accurate) methods of modeling soft bodies (knowledge pre-requisite: physics)
  • support for non-convex polygons (probably by implementing triangulation)
  • optimize collision detection (AABB trees, etc.)
  • framework for dynamic object creation/destruction in order to allow implementing particle emitters
  • statistical models (for example prey/predator model)

If you have other ideas please feel free to propose them !

Mentor: Vladimir Kuznetsov <ks dot vladimir at gmail dot com>


Project: RoxGT

Project Information: RoxGT is a OSS done by Ugo Sangiori for building Graph-based applications. It aims essentially for academic jobs, such as graph algorithm execution and theorem proofs.

Brief explanation: Rewrite the RoxGT, today it's written in Java as a Eclipse Plugin. This project aims to transform RoxGT into a full featured KDE4-Application, with all the benefits that Kross can give for the implementation of the algorithm execution in every language suported by Kross, and not only Java.

Possibly integration of RoxGT in Marble, as a kparts to do things like 'shortest path between 2 points' when marble is used as GPS mode. Possibly integration of RoxGT in Umbrello, examining the UML and searching for design flaws into the Graph-generated UML.

Expected results: Ability to create, edit and view simulations in graphical mode of Graph-Theory algorithm execution.

Knowledge Pre-Requisite: Required: C++, Could be useful: Qt.

Mentor: Looking for One.

Student Tomaz Canabrava - tomaz <dot> canabrava <at> gmail <dot> com

KDE PIM (Personal Information Management)



Project: Beautiful month view

Description: The month view of KOrganizer has a long history, which is beginning to show, especially in terms of visually attractivity and performance. With KDE 4 and especially the latest versions of Qt 4 there is an unprecedented opportunity to add some beauty to this view. The goal of this project would be to create a new version of the month view which is able to display a month's worth of events in a beautiful, efficient and user-friendly way. This would include appointments, todos, multi-day events. In addition of a good display of events one could also think about advanced ideas like dynamical zooming of days, 3D indicators of categories or calendar associations, and more. There is a lot of room for creativity in this project.

Mentor: Cornelius Schumacher



Project: Message-View: Use more than one line per message

Project Information: As known from other email-apps there is a use-case for having three panes next to each other. However the message-list is currently restricted to one line per message which makes it quite unuseable for that purpose. Thus a new view is needed.

Knowledge Prerequisite: Qt Interview Framework


Akonadi ( is the framework for groupware and other PIM applications for KDE4.1 and later.

Project: Akonadi backend for Microsoft Exchange Groupware server

Project Information: The proposed SoC task will implement an Akonadi backend to allow users to work with Microsoft Exchange servers and applications using compatible protocols (e.g. Outlook).

Brief explanation: The implementation will almost certainly need to use the OpenChange ( libraries. A proof-of-concept implementation has been done (available in KDE's SVN archive), but has bit-rotted as the OpenChange libraries have evolved.

Expected results: A completed, and tested, backend that can operate with a current Microsoft Exchange server. Important capabilities include:

  • ability to receive mail,
  • ability to create and receive appointments, and to view the calendar,
  • ability to access the address book, and
  • ability to create and receive tasks.

Sending mail is outside the scope of Akonadi, and is a "growth" potential if the project is proceeding particularly well.

Knowledge Prerequisite: You need to have some familiarity with groupware applications (e.g. knowledge of how appointments and address books are used). C and C++ is pretty much essential, and at least passing knowledge of Qt. It would be useful (but not absolutely essential) if you had access to a Microsoft Exchange server you can use for testing - we may be able to arrange access.

Mentor: Optional, possibly Brad Hards <>

Project: Akonadi testing framework

Project Information: Akonadi uses helper processes, called Agents, to do the actual processing of PIM data, e.g. transfer from/to an external storage. Agent functionality can depend on operations on the Akonadi store performed by other participating processes (Agents and/or clients), e.g. updating an external storage when a user application applies changes to PIM data.

Brief explanation: In order to test such a setup automatically or semi-automatically, a testing framework needs to provide the following items:

  • means to launch Akonadi in a defined state, e.g. by restoring a data base dump
  • means to start a certain set of Agents
  • means to trigger changes on Akonadi's data
  • means to check the resulting state of Akonadi

Expected results:

  • tools or test templates for developers to create and run test scenarios, probably using a scripting language like Python or Ruby.
  • example test scenarios for at least one agent and one resource

Knowledge Pre-Requisite: An understanding of the concept of collaborating services, knowledge how to setup shell environments

Mentor: Kevin Krammer <>

Project: Akonadi Resouce: GroupDAV

Description: GroupDAV is a standard protocol to access groupware servers. It's for example implemented by or Citadel. The task of this project is to create a native Akonadi resource to provide access to GroupDAV enabled servers to all KDE applications, in particular the KDE PIM suite. There is an existing KDE 3 based KResource supporting GroupDAV which could be used as a starting point.

Mentor: Cornelius Schumacher

Project: Akonadi Resource: Google Calendar

Description: Googgle Calendar provides an API to access the calendar data on the server. The task of this project would be to implement an Akonadi resource, so that any accessible Google calendar can be displayed and edited in Akonadi enabled applications, e.g. in KOrganizer.

Mentor: Cornelius Schumacher

Project: Akonadi Resource: Google Contacts

Description: Googgle recently has opened their Google Contacts Data API. This makes it possible to access the contacts data which is stored at Google, e.g. for GMail. The task of this project would be to implement an Akonadi resource to access contact data stored at Google, so that it can be displayed in Akonadi enabled applications, e.g. in KAddressbook.

Mentor: Cornelius Schumacher

Project: Akonadi Agent: PIM Data Mining

Description: PIM data usually contains a lot of related PIM data in some explicit or implicit form. Emails contain contact data as sender or recipients or as part of the signature. Emails also can contain calendar data, e.g. when sending groupware invitations or just by mentioning a date as part of an informal mail about getting together for a beer. The goal of this project is to implement an Akonadi agent which transparently collects all this information in the background and makes it available to the user e.g. as a special address book ("Email addresses of people to whose emails I answered on a mailing list", etc.). There are many interesting options what and how to implement this and part of the project would be to investigate, what makes sense to be collected and which methods are best suited to get the most useful information from the available raw data.

Mentor: Cornelius Schumacher

KDE Games

Project: Polytris clone

Description: Polytris is an old DOS game based on the Tetris concept. Its unique feature is that the number of blocks a piece is build from isn't fixed to four as in the original Tetris, but that it's variable. There are the simple one block pieces which fit everywhere, but there are also the challenging ten block pieces, which provide a complex setting which then has to be filled with other pieces. Difficulty of the game increases over time not by letting pieces fall faster, but by increasing the average number of blocks the pieces are constructed of.

The task of this project is to create a KDE 4 version of this game. In addition of implementation of the basic game functionality extra credits are given for great playability, beautiful appearance, and a creative and motivating scoring scheme.

Mentor: Cornelius Schumacher

KDE Development & Web Development


Project Information: Kompare is a graphical difference viewer.

Project: Semantic diff

Brief explanation: Implement a plugin-based approach for different (potentially incomplete) diff-algorithms. Documents are not just lines of text, but have semantics, and these plugins should help to see changes made to the document.

Possible plugins are:

  • File information diff: show date, size, last-modification, ...
  • Programming language diff: detect changes like renamed variables, reindentation, namespace-changes, changes in comments, other refactorings ... (the more the better)
  • XML-diff
  • Latex-diff: whitespace is ignored.
  • config-file diff: in many config-files the order does not matter.
  • Image diff: at least show both images next to each other.
  • Video diff: show both videos next to each other and link their time. Should be interesting for diffs after reencoding.

Expected Result: A native and Kross (for scripting) plugin-support for Kompare. Some of the above mentioned plugins.

Knowledge Pre-Requisite: Some knowledge of the Qt/KDE framework. Knowledge of C++.

Comment: I think one of the most obvious applications of this is in SVG: it would be possible to graphically show the original image + new_rect merged as new_image fairly easily. You could even make elements transparent, and show them in steps, with onion-skinning, almost animating from previous version to new version. I'd also really like to see this "semantic-diff" for ODF documents.


Project Information: KLinkStatus is a link checker, part of the kdewebdev module.

Project: Aided correction of broken links

Brief explanation: Currently, it is possible to find out broken links but it is not possible to fix them. It would be great if those links could also be corrected within KLinkStatus. The corrector should present the user with sugestions, like a spell checker does (it might be possible to reuse some of the KSpell heuristics). Possible errors are typos in domain and paths, absolute vs relative path, and wrong directories.

Expected results: Ability to fix broken links, being effectively assisted with suggestions.

Knowledge Pre-Requisite: Some knowledge of the Qt/KDE framework. Language wise, this feature can be implemented using C++ or a script language like Python, Ruby or Javascript.

Mentor: Paulo Moura Guedes <moura at kdewebdev dot org>

Project: Site check automation

Brief explanation: KLinkStatus already provide a D-Bus interface that allows to check sites in the background based on a configuration file and then export the results to HTML. A system administrator can already automate check using cron jobs. However it would be nice to offer a nice frontend inside KLinkStatus (without the need of super user permissions). The results could then be exported into files and/or emailed to the site administrator.

Expected results: Easy site check automation and notification system.

Knowledge Pre-Requisite: Some knowledge of the Qt/KDE framework. Language wise, this feature can be implemented using C++ or a script language like Python, Ruby or Javascript.

Mentor: Paulo Moura Guedes <moura at kdewebdev dot org>

Project: HTML validation

Brief explanation: HTML validation is a very requested feature by users. KLinkStatus already have the infrastructure for this, using libtidy, but some work is still missing in order to actually correct the HTML documents.

Expected results: - Visual indication of which document have HTML validation problems - Ability to fix individual documents or several documents at a time - Ability to efectively preview, compare (perhaps using the Kompare kpart) and edit partial parts of a document - Configurable HTML validation parameters

Knowledge Pre-Requisite: Some knowledge of the Qt/KDE framework. Language wise, this feature can be implemented using C++ and, for some parts of it, a script language like Python, Ruby or Javascript.

Mentor: Paulo Moura Guedes <moura at kdewebdev dot org>



KDE Network


Add NX support to KRDC.

Project: NX support in KRDC.

Brief explanation: KRDC lacks NX support, which is gaining momentum in the free software world. Build upon the work done by George Wright in the 2006 SoC and the work done by Urs Wolfer in the 2007 SoC to create a top quality NX client for KDE.

Expected results: Fully working NX integration for KRDC, including support for advanced NX features such as sound, VNC/RDP tunnelling etc. Feature parity with the commercial NX client shouldn't be necessary, but aiming for that isn't a bad idea. All NX connection handling code should be in the cross-platform client library nxcl (C++/STL/autotools), and all GUI specific code should be in KRDC.

Knowledge Prerequisites: Knowledge of the NX protocol (see for an older version of the protocol), C++/STL/Qt/KDE coding and cross platform coding.

Resources: , , ,

Mentor: George Wright <gwright at kde dot org>


Decibel is a realtime communication framework for KDE 4.x.

Project: KDE4 integration

Brief Explanation: Decibel should integrate well with the KDE 4 environment. This includes getting contact data from Akonadi and storing contact state there, storing account data in KWallet as well as integration with Nepomuk to store semantic information on connections made.

Expected Results: A working and tested implementation of integration components.

Knowledge Prerequisites: A good overview of the involved KDE 4 technologies is required.

Resources:, Akonadi documentation

Mentor: Tobias Hunger <tobias at aquazul dot com>

Project: Filtering framework for text messaging

Brief Explanation: Text message that are passed to applications using the Decibel framework should get filtered. This includes processing steps (like processing of Off the record messages) as well as logging, etc. This filtering framework needs to be made more flexible as it currently is and some basic filters need to be written.

Expected Results: The filtering API of Decibel is improved and sample filters are developed and tested.

Knowledge Prerequisites: A good understanding of Decibel is required.


Mentor: Tobias Hunger <tobias at aquazul dot com>

Project: Improve Telephony features

Brief Explanation: Decibel currently has limited support for telephony features required for VoIP integration. This support needs to be improved and missing features (call forwarding, conferencing, etc.) should be implemented.

Expected Results: A VoIP backend based on the existing telepathy backend with the additional telephony features implemented.

Knowledge Prerequisites: A good understanding of Decibel is required. Familiarity with the telepathy spec and VoIP is helpful.


Mentor: Tobias Hunger <tobias at aquazul dot com>


Project: Integrate Decibel and Kopete

Brief explanation Add support for Decibel to Kopete. This will involve some a lot of work within the Kopete core library (libkopete) in addition to making all the current protocol implementations into Telepathy Connection Managers.

Knowledge Prerequisite: C++, Qt, KDE.

Note: This is an advanced project. The proposal will need to be very detailed and very complete. Basically, you need to show that you've done your homework, so to speak. The student will also need to be able to work closely with his/her mentor and the rest of the Kopete developer community by being available on IRC and being subscribed to the Kopete mailing list.

Mentor: Matt Rogers


Consider these suggestions a starting point to create your own proposal. Some need more detail. Please contact us and let us help you with the proposal before submitting. Find us on IRC on #amarok or email the public mailing list

Project: CD Stack collection view

Brief Explanation: In iTunes you might have seen the very fancy view with albums flying by very prettily and not very usefully. Now, imaging instead that you have a stack of CDs in a tower. You scroll up and down through it, take one out, and open it to see what tracks are on it. A mockup of this idea can be found here: CD Stack. Qt has a Model/View system that allows multiple views to the same data. This project would be a new view on the current collection browser. It could be implemented in 3D using OpenGL or using the pseudo-3D techniques that projects like Marble use.

Expected Results: A working (not necessarily polished) implementation of such a CD stack interface, most preferably Model/View based.

Knowledge Prerequisite: Knowledge of C++ is required, and while experience with Qt (and QGV) is nice it is by no means required, as it can be learned relatively easily. OpenGL and/or 3D programming helpful.

Project: Context View development and Applet writing

Brief Explanation: The Context View is one of the most visually evident features of the new Amarok 2. It takes up the middle part of the Amarok window and provides a view into the information about the song that a user is playing. As such, it is essential to Amarok that the Context View be functionally pleasing, polished, and pretty.

A project focused on the Context View would consist of mainly continuing development on the CV itself, completing features that are planned but have not yet been implemented, as well as writing new Applets and DataEngines to display further data.

Expected Results: A Context View that uses libplasma to provide an Amarok-specific way of viewing current data in a beautiful and innovative form. The basic structure and architecture is already there, but it needs substantial work to complete.

Also, time permitting, the development of new applets and data engines for Amarok's CV.

Knowledge Prerequisite: Knowledge of C++ is required, but this is probably a less KDE project as others. Experience with Qt is nice but by no means required, as it can be learned relatively easily.

Mentor: Leo Franchi (lfranchi) is the original author of the Context View (in Soc 2007) and is willing to mentor any interested student. He can be contacted on #amarok at or (better) at lfranchi AT gmail DOT com.

Project: Nepomuk collection

Brief explanation: Amarok 2 has a plug-in system that allows it to access music metadata from various backends. A plug-in to read and write data to and from Nepomuk should be written in this project. Additionally, Amarok should be extended to make real use of Nepomuk's capabilities by re-adding labels support.

Expected results: A plugin to use Nepomuk as a metadata store from Amarok. Additionally, support for labels should be added to Amarok 2.

Knowledge Prerequisite: C++ is essential, knowledge of Qt and KDE would be helpful

Mentor: Sebastian Trueg

Project: UPnP Support

Brief explanation: Using the UPnP protocol users can, for example, share music from their Vista computer to a PS3. Amarok lacks any sort of UPnP support. Being able to act as a client (the PS3) or possibly a UPnP media server (Vista) would be useful. See libupnp for more information about UPnP's implementation in open source. The nature of how UPnP works would need to be researched a bit more, as the creator of this idea (Ian Monroe) has only seen it in use on friends computers. :)

Expected results:

  • Using either Amarok's Internet Service framework or the straight Amarok collection framework, create a plugin which allows Amarok to browse and play music off of a UPnP share. Playing music may require the creation of a KIO for UPnP.
  • Allow Amarok to share it's collection with other devices via UPnP. This is secondary priority and may not be feasible to accomplish during Summer of Code.

Material Prerequisite: Some UPnP devices or computers to test with.

Knowledge Prerequisite: C++ is essential, knowledge of Qt, KDE and networking would be helpful.

Mentor: Potentially one of several. Contact the amarok mailing list or ask in our IRC channel #amarok

Project: Amarok Scripting

Brief explanation: Starting with Amarok 1.2, Amarok has enabled scripting through a script manager and its DCOP interface. For Amarok 2 we have a straight port of the old DCOP API to DBus. The old API was created over time, and perhaps could be thought out better. Additionally KDE 4 has introduced technology like Kross that could allow true integration of scripts into Amarok, including GUIs. In-process scripting has its own issues though!

Expected results:

  • This is a more open-ended idea. Contact the Amarok mailing list or on IRC to get help working out the proposal.
  • Perhaps redesign the Amarok DBus API
  • ..and/or add a Kross interface and then
  • Create a script showcasing the technology.

Knowledge Prerequisite: C++ is essential, knowledge of Qt, KDE and Ruby would be helpful.

Mentor: Potentially one of several. Contact the amarok mailing list or ask in our IRC channel #amarok

Project: CD Ripping

Brief explanation: Amarok has never really felt a need for good CD ripping support. We always felt there were better programs suited for this task. This hasn't stopped folks from finding ways to use Amarok to rip their CDs though. ;)

Expected results:

  • An excellent CD ripping solution integrated into Amarok.
  • Cross-platform (Linux, Mac, Windows)
  • This task is not too large, so there would be higher standards of polish.

Project: Mass-tagging

Brief explanation: Users sometimes have poorly tagged tracks. Amarok has always lacked an easy way to download information about tracks from FreeDB or Musicbrainz and then tag multiple tracks at once.

Expected Results:

  • To bring the functionality of programs like EasyTag or PicardQt into Amarok.
  • A creative UI to accomplish the goal

Project: Playlist and Playlist browser

Brief explanation: Amarok 2 has a snazzy new playlist, though its code could use some refactoring to take advantage of Qt 4.4 features. Also it is missing features from 1.4.

Expected Results:

  • Mass inline tag-editing in the playlist (like in Amarok 1.4)
  • Allow users to pick which fields are shown
  • Dynamic playlist and smart playlist support
  • Improve memory management for large playlists

Knowledge Prerequisite: C++ is essential and knowledge of Qt is nice, experience with Model/Views in Qt is a bonus

Mentor: Ian Monroe and other Amarok developers.

Project: Media Devices as Collection Provider

Brief explanation: Media device support is very important in a modern media player due to their widespread popularity. Media devices haven't found much love in Amarok 2 development. Amarok 2 has a flexible collection system, that was designed in part with media devices in mind. Whereas in Amarok 1.4 the collection was solely local files so the Collection Browser could only show local files. In Amarok 2 collections have been abstracted, allowing sources from the Internet and with this project media devices as well.

Expected Results:

  • Integrate the media device framework into Amarok 2.
  • Support at least one kind of media device, while having the framework available for others.

Material Requirements: A media device to test with.

Knowledge Prerequisite: C++, Qt, KDE.

Project: service synchronization

Brief explanation: Add support for uploading and downloading content from an mp3tunes locker. This will allow us to use Amarok 2 for managing the mp3tunes locker as well as provide a framework for backing up all local content.

Expected results: Being able to upload local content to an mp3tunes locker as well as downloading content from the lock er to the local collection. Optional support for automatic synchronization.

Knowledge Prerequisite: C++ is essential, knowledge of Qt and KDE helpful. Experience with web services might also come in handy

Mentor: Nikolaj Hald Nielsen (nhnFreespirit) wrote the service framework and the basic mp3tunes service . He can be contacted on #amarok at or (better) at nhnFreespirit AT gmail DOT com.

Project: Ampache service synchronization

Brief explanation: Add support for uploading and downloading content from an Ampache server. This will allow us to use Amarok 2 for managing the collection on the Ampache server. This will be a cross project task as the Ampache API used by Amarok 2 does currently not support uploading of content. There is great communication between the 2 projects, and the original Ampache API was developed in collaboration with Amarok developers.

Expected results: Being able to upload local content to an Ampache server as well as download content from the server to the local collection. Optional support for automatic synchronization.

Knowledge Prerequisite: C++ is essential, knowledge of Qt and KDE helpful. Experience with web services might also come in handy

Mentor: Nikolaj Hald Nielsen (nhnFreespirit) wrote the service framework and the Ampache service. He can be contacted on #amarok at or (better) at nhnFreespirit AT gmail DOT com.

Project: Add new service

Brief explanation: Add support for a new online service to the Amarok 2 service framework. This is a project that requires a student that already has a good idea or contacts with an interested service. Getting added to Amarok will mean that the service will have itself and its contents made available to a potentially huge new audience, and Amarok user will enjoy having access to even more great content. Ideas for services ( just to throw something out there ) could be the internet archives collection of live recordings, remixes from, or something similar

Expected results: Being able to play content from the service directly within Amarok. Depending on the type of service, downloads or purchasing of content might also be possible, as might other features unique to the service.

Knowledge Prerequisite: C++ is essential, knowledge of Qt and KDE helpful. Experience with web services might also come in handy

Mentor: Nikolaj Hald Nielsen (nhnFreespirit) wrote the service framework and many of the services. He can be contacted on #amarok at or (better) at nhnFreespirit AT gmail DOT com.


Project: Okular backend

Project Information: Okular has plug-in system that allow it read different documentation formats. It currently reads a range of formats, but there are several that might be able to be improved (e.g. XPS) or implemented.

Brief explanation: The project would need to identify a format that requires improvement (or implementation). Candidates that have been requested in the past include the Microsoft Word (.doc) format and the .lit e-book format. Given a suitable library, potentially any format could be considered. Consider:

  • Microsoft Visio
  • Microsoft Access snapshot (would require implementing a .emf file renderer - not simple, but could be useful in many other places in KDE).

Note that improving PDF requires changes to the poppler library, and you would need significant previous experience with PDF (and ideally with poppler) to make much progress.

Expected results: A working backend, capable of rendering most documents to a readable level.

Knowledge Prerequisite: C++ is pretty much essential, and at least passing knowledge of Qt. C programming experience may be useful for some libraries.

Mentor: Potentially one of several. Contact the okular mailing list.


Project: Port K3b to libburnia libraries

Project Information: K3b currently uses cdrtools/cdrkit. This project should rewrite k3b to take advantage of three libburnia libraries - libburn, libisofs, libisoburn.

Expected results: Experimental K3b branch with dropped support for cdrtools/cdrkit, and k3b features provided on top of libburnia libs backends.

Contact for more information: mario AT libburnia-project DOT org

Other applications

Application User Interface Test System

There are a couple of tools available for Qt / KDE that allow testing of applications - squish and kdexecutor. Both are binary only, and are specific to the systems that they are built on.

It would be useful to have an open source tool that allowed us to test applications in a scripted way. Similar open source tools include Dogtail and LDTP, which use the accessibility interfaces in Gnome.

There are arguments for and against using accessibility - it might be a lot more useful to implement a separate system, using some of the Qt4 specific features including QMetaObject. Qt4 has a nice set of hooks, and QTestLib shows how they can be implemented. However instead of requiring specific code in the application (as done by QTestLib), it would be more flexible to use LD_PRELOAD and a small interface library.

More discussion: Brad Hards <>

(Multiple) image printing application

This idea comes from my father, who is missing this kind of feature he was using in Paint Shop Pro. He says that there it was possible to open many images and when you selected them for printing the application would present you with a paper page, onto which you could drag the images, which were presented on a panel on the left side of screen. You could then interactively position and resize images on the paper and so see how the page look like when printed. There were also special functions available which would automatically resize and position the images.

This application could also have a feature added to make it easier to print one image onto multiple pages (think posters). Here you could select how many pages of what size there should be and how many space on each page would overlap so you could glue the pages together after printing.

I think it would be nice to also find a way to integrate such an application with imageviewer like Gwenview and photo management app like DigiKam.


The KDE Usability Project is willing to offer support mentoring to one or two projects (more if additional design mentors are available) which involve heavy UI development or UI redesign activities.


KDE infrastructure tools, like Bugzilla, the Review Board, etc.

KDE dependencies and non-KDE projects

Depending on the relevance of the proposal, the KDE Project will accept student proposals on projects that are not part of KDE, but which are either KDE dependencies or relevant to KDE or the Free Software Desktop.

Qt Cryptographic Architecture

The Qt Cryptographic Architecture (QCA) isn't strictly part of KDE, however it is used in a range of KDE applications (and other applications). A range of projects are possible, in terms of adding security features to applications (e.g. SASL, encrypted content, client side puzzles).

A specific need is the provision of alternative backends, which are typically the interface between QCA and some underlying crypto library. We already have several, but only the OpenSSL one is fairly complete, and OpenSSL is pretty ugly. A new backend would require some previous crypto knowledge, and ability to program in C++ and C. No GUI experience required! We probably only need one good alternative on each platform.

- Alternative backend - GNU crypto libraries: We have a basic backend using libgcrypt, which is mostly working. However a lot of the more interesting capabilities are present in gsasl and GNUtls. Mentor: Brad Hards

- Alternative backend - Mozilla Network Security Services: The Mozilla project has a library that is separately packaged on most Linux systems. It offers a fairly complete alternative to OpenSSL. We have a basic skeleton for NSS, but it only offers a couple of basic crypto primitives. Mentor: Brad Hards


Strigi [1] and Pinot [2] are desktop search tools for the Linux and free Unix desktop. While targeted at different desktop environments, they have a history of collaboration, for instance on parsers for the Xesam query languages [3].

Their features list overlap significantly as both projects offer most of the functionality users expect of desktop search systems.

Both projects are written in C++ and feature an abstraction layer that makes them backend independent, though both only have one fully functional backend. Strigi's backend of choice is based on CLucene [4] while Pinot's is based on Xapian [5].

This proposal is to bring this collaboration one step further by allowing them to use each other's indexing and search backends.

Benefits include :

  • better abstraction layer for each project
  • wider testing of the respective back-ends
  • more choice to these projects' users
  • ease of evaluating and comparing CLucene and Xapian strengths and weaknesses

The goal of project is to let Strigi use Pinot as a backend and vice versa so that both can query each others interfaces using the Xesam query language, and whatever query language is native to the backend.

The emphasis is on completeness of querying. Performance optimizations and support for writing are secondary.

[1] [2] [3] [4] [5]

Soprano & Nepomuk

Project: Full Featured Query API

Description: For powerful semantic queries on the desktop we need a powerful query API. At the moment we are restricted to SPARQL queries which are then parsed by the Soprano backend. It would be much more efficient and easy to use if we had a query API that allowed to represent queries (independent of any query language) using a class structure. Queries could then easily be created, manipulated, and translated. Application developers would not have to learn a specific query language but would create a query object and have Nepomuk/Soprano evaluate that.

This query API would become part of the official Soprano API and replace the simple Soprano::Model::executeQuery interface we have now.


Mentor: Sebastian Trueg


  • a named pipe or shared memory transport implementation for win32
  • can QLocalSocket and QSharedMemory (in 4.4) be used?

Other initiatives

Both KDE and Gnome have previously acted as mentor organisations for projects that are under the umbrella. If you want to do a cross-desktop project, you can consider submitting it to one (or more) organisations. This is one case where you almost certainly want to have a mentor identified before you submit.

If you submit to more than one organisation, please note which organisations you have submitted it to (since KDE has to coordinate with the other mentoring organisations).

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V.Legal