Projects/Summer of Code/2008/Ideas

    From KDE TechBase
    Revision as of 01:48, 28 March 2009 by Sebas (talk | contribs) (fix indentation)
    (diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

    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 anyway.

    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 [email protected]. 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.

    Project: Beautify KNotify / Support Growl themes

    Brief explanation: In its current form KDE notifications are quite "basic" -- one might even say ugly. With WebKit as part of Qt 4.4, implement "CSS-able" notifications similar to (and ideally compatible to) Growl. Growl is a framework for Mac OS X and its free software under the 3-clause BSD License. Adopting the same license for KNotify's theming code may ensure future code exchange between both projects and theme compatibility.

    Expected results: Similar capabilities to what's shown in the video on and in the screenshots on

    Project: KIO-fuse UI integration

    Brief explanation: Fuse is a technology that allows mounting in user-space. There is already the kio-fuse application that allows using kio in any application, but it is incomplete and not well integrated. It should be made a more general integrated solution.

    Expected result: There should be something like an additional folder "~/$KDEDIR/remote_places", in which all opened kio connections are mounted with a nice directory-name like "[email protected]". Dolphin and the kde file-open dialog should replace the directory on the fly with something like "Remote Places", and sub-folders with the correct address like in this case ftp://[email protected]. That way the only difference between kio-aware and un-aware applications would be that the ones show nicer urls. All applications could transarently work with any remote files.


    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.

    Project: Support video input devices in Phonon

    Brief explanation: An abstraction of video inputs (webcams, TV tuners) in Phonon would simplify accessing these devices in any KDE application, such as IM clients or snapshot applications.


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

    Project: Implement HTML 5 features

    Brief explanation: HTML 5 will bring many new features. The student gets to pick and propose one or several of those features from the draft. Projects could encompass implementation of DOM Storage or SQL interfaces for example.

    Project: Web-based desktop

    Brief explanation: The advancement of Web technology (DHTML, XMLHTTPRequest, CSS, Canvas) nowadays allows for the implementation of complex GUIs that can compete with native programing toolkits. This project would involve the implementation of a KDE desktop including icons and menus that is solely based on HTML, JavaScript and CSS. An examplaric feature: render the content of .desktop files in HTML. This could either be served through a backend server or a custom KHTML part that provides such code and offers extensions to load from and store data on the hard disk.


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

    Project: ECMAScript 4 classes

    The draft for ECMAScript 4 on mentions several new built-in types like Vector and Map. Existing implementations that already cover part of the future standard (like ActionScript) also feature classes like ByteArray. Other ideas are KDE specific likes like KIO bindings. Students are invited to select and implement a subset of these classes.

    Project: Pre-compiled JavaScript programs

    As announced recently the kjs-frostbyte branch now features a byte-code version of KJS. From there the step to pre-compiled executables, i.e. binary blobs that contain code as well as data and can be executed from the shell like normal executables is not very big.


    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: [email protected]

    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.

    Comment: Here is a somewhat related mockup for a bookmark tagging GUI : KDE-look link

    Project: Kross plugins support


    The idea would be to add support of scripting plugins to konqueror.

    Project: XUL implementation


    To give Konqueror, the KDE Web Browser a complete XUL implementation. As an added bonus, this could be extended to allow Konqueror to use Mozilla Firefox plugins.


    See more information in a past gsoc student work


    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.

    System Settings

    Project: A system settings module for creating backups

    Project Information: The idea is twofold:

    Create a System Settings control module for scheduling backups. Rather than pick a specific backup technology, it would support multiple backends, such as tar, dar, rdiff-backup and rsync-backup. By making it backend agnostic, it could be used with any file-based backup tool. It would therefore be more robust and easier to adopt than previous backup GUIs.

    To benefit the most users, the control module would be based on a non-KDE library so the technology could be reused in Gnome and other desktop environments. Therefore ideally, the implementation would take the form of a project that focuses on the functionality most backup programs share: selecting a root directory to backup and a destination directory, inclusion and exclusion rules, a choice between full or incremental backup, and whether to use compression and/or encryption. The goal would be to develop a descriptive backup file format that is not tied to any specific implementation, and a library that can read such files and generate the appropriate command line flags to create the backup with a given backup tool. A secondary goal would to create a sensible set of defaults for creating backups. That would involve collecting a list of common directories that can be excluded (such as trash directories, common web browser caches, and mount points) so that users do not have to waste time tweaking their exclusion rules.

    Usage cases:

    Average Joe is new to Linux, and wants to make a backup of his computer. He sees "Backup Settings" in KDE4's System Settings (or Gnome's Administration menu). Since the module is part of the upstream desktop environment, it doesn't matter which distribution he's using.

    Joe has been making backups to writable DVDs using the DAR backend of the backup control module for several weeks, when he gets an external hard drive. Now he wants to make the same backup to his external hard drive instead. He does not have to learn how to use a new program; he simply selects the rsync-backup backend and specifies the new destination.

    Expected Result:

    • A library that maps standard backup options (like include/exclude rules) to the command line options for several popular backup tools.
    • A working KControlModule for KDE4 that allows users customize and schedule backups.

    Currrent Knowledge:

    • I have a little experience with C++, and have dabbled a bit in PyKDE


    If you think the idea is interesting and would like to mentor such a project, my email is ([email protected])

    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.
    • Phase: improving the Phase/Animator system by:
      • implementing animation curves (already in the API and used by plasmoids, but not actually implemented)
      • optional keys for individual animations, allowing them to be turned off or otherwise tweaked individually / in groups
      • chaining animations
      • going through uses of customAnimation in libplasma using code and reimplementing generally useful ones within Animator itself
    • International Clock: Port the international clock functionality from GNOME clock applet to KDE clock plasmoid.


    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.
    • Make KWin multi-pointer ready: Mpx is an extension of the X-Server currently living in a branch, that is planned to be merged in one of the next versions(see Once it's merged, the x-server will support an arbitrary count of simultaneous active pointers/cursors(A mouse and a keyboard paired together) and multiple active windows, allowing input from multiple users at the same time. The window-manager needs to be aware of the multiple cursors, and needs to dynamically assign pointers to applications that are not mpx-aware(Which will be all, in the beginning). Also it might be nice having a plasma-applet that allows easy spawning/removing of additional cursors.


    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. Another interesting thing to investigate would be "log in by finger-print".


    • 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 <[email protected]>

    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 <[email protected]>, Sebastian Sauer <[email protected]>

    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 <[email protected]>

    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 <[email protected]>

    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 <[email protected]> The mentor can help preparing the project proposal for submission to Google.

    Note: This is a very popular idea and several people have already said they will apply for it.

    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++


    Note: This is a very popular idea and several people have already said they will apply for it.

    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.


    Note: This is a very popular idea and several people have already said they will apply for it.

    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://

    Mentor: Andreas Ramm <[email protected]>

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

    COMMENT: Infinote is under heavy development, and both the protocol and the library API have gaps and are subject to change. Whether you view this as a drawback or a chance to help shape and be on the cutting edge of open-source collaborative editing is down to you.

    COMMENT: Notes and Ideas can be found at the Mateedit Wiki page

    KDE Edu


    Project: Panoramio / Wikipedia -photo support for Marble

    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:

    • Panoramio is a photo-sharing site / community offered by Google which provides georeferenced photos that have been created by the panoramio community.
    • Wikipedia offers a wealth of georeferenced articles which include photos.
    • Adding Panoramio/Wikipedia photo support would be based on extending Marble's KML support. So extending Marble's KML support would be a major technical aspect of this project.
    • optional: integration with digikam

    Expected results: Display Panoramio and/or Wikipedia thumbnail-photos in Marble. The thumbnails that appear depend on the displayed view (i.e. on the position and zoom factor). The user should be able to select features using the mouse which results in an enlarged photo and a matching caption.

    Knowledge Pre-Requisite: Required: C++, Qt

    Mentor: Torsten Rahn <[email protected]>

    Project: Vector-Tiles for Marble

    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:

    • Marble can download and texture map texture tiles ( see )
    • For implementing stuff like routing etc. properly we need a vector representation of streets and other features. One strategy to add those would be in terms of tiles similar to texture tiles.
    • Source data could either be VMap0 ( ) or OpenStreetMap data. You'd first need to find a way to create some vector tiles from this data stored in a suitable efficient format. These would need to get put onto the server.
    • Based on the Marble Layer Management architecture (which is currently in the works) you'd need to create a vector layer plugin which maps the vector tiles in the given projection. The vector layer data would internally use Marble's given data structure which is similar to the KML format ones. You'd need to extend that structure by vector features which are in the spirit of those provided by KML.
    • Ideally you'd also provide ways to select features using the mouse.

    Expected results: Getting OSM data or VMap0 data downloaded as tiles and rendered as vectors in the projection currently used. Being able to select features using the mouse.

    Knowledge Pre-Requisite: Required: C++, Qt, Recommended: knowledge of OpenStreetMap / VMap0.

    Mentor: Torsten Rahn <[email protected]>

    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: Marble - Routing

    Note from Marble author Torsten Rahn: I don't think that this project as a whole is feasible at this point. But choosing aspects as a GSoC project that are needed to get routing implemented in the future would be appreciated.

    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: 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: Printing in Parley

    Brief explanation: Parley and some other KDE-Edu apps use a simple xml file format to store vocabulary data. This includes quite a bit of context information such as example sentences, word types, verb conjugations etc. The only way to print any of this information was so far to have a direct printout of the vocabulary list, containing only the words. Starting from xml it is reasonable to realize printing and even more by exporting to different formats. Using XSL to transform to html is one of the easiest way to achieve a good and flexible layout. More export formats could be added. Using this as a way to get multiple printing options would be a nice project. A flash card view (one vocabulary + optional context info per card), a list and more should be created at the users wish.

    Expected results: Configureable xsl/xslt transformation of the vocabulary data to at least html(+css) and maybe another format (pdf for example).

    Knowledge Pre-Requisite: Required: C++, XSL(T). I can imaging learning XML/XSLT could be done during the project. A very basic example xsl file exists.

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

    Project: Parley - Advanced correction and grading

    Brief explanation: A bit of linguistic research is involved in this project. Evaluating language in a computer environment is close to impossible, so let's try what we can do anyways. I would like Parley to not only give feedback of the binary kind (your answer is right/wrong) but try to be a little more differenciated. How about offering the user to simply place the missing coma, wrong word order, add the accent he left out or hint at two mxied up letters? It would be possible to look at spell checking programs and other ways to know about the user input. Maybe the Levenshtein Distance algorithm is of help here? It would be interesting to have more research and an improved correction mechanism.

    Expected results: Design and implementation of a correction mechanism, that gives good feedback.

    Knowledge Pre-Requisite: Required: C++. Could be useful: some Qt, knowledge about languages, interest in research in that area.

    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: different userinterfaces for different target groups

    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: While Step has already really nice features, its graphical user interface (GUI) is very technical. We would like to change this by introducing different GUIs for different target groups.

    • 1st mode: Step for teachers and pros: Full blown interface exposing everything
    • 2nd mode: simplified mode for studends, no detailed information, more help and so on
    • 3rd mode: Very simple interface for even younger children
    • 4th mode: ...

    Another idea to have one mode for the construction of a simulation and another one for the *use* of a simulation. That would be handy for teachers/students!

    Expected results: Improved interface, several "layers" of features exposed, different GUIs, and so on. Depends on the students on what he would like to focus.

    Further information To get an idea what is possible have a look at phun (video-link:

    Knowledge Pre-Requisite: Required: C++, Qt 4 and KDE 4 library. Usefull: Physics

    Mentor: Vladimir Kuznetsov <ks dot vladimir at gmail dot com> or Carsten Niehaus <cniehaus at kde dot org>

    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


    Project: Strigi integration

    Project Information: The goal of this project is to integrate Strigi as backend behind the periodic table and the glossary (and possible other elements).

    Brief explanation: The idea here is to have a GUI element that shows Strigi search results based on the element selected from the periodic table, or the item from the glossary, found on the users desktop. For element, this would include the elements name, and possible even the element symbol, if integration with last years Strigi-Chemistry GSoC project is achieved. For glossary items, a simple text search would suffice.

    Another idea is to make it possible to querry like this: "Give me all molecules with a molecularweigth of 123u and at least one Carbon atom". For this we can use the Chemical File Database (or of course every other database, even those for proteins.

    Expected results:

    • provide GUI for Strigi search results for an element selected in the periodic table
    • provide GUI for Strigi search results for an glossary item

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

    Mentor: Undecided.

    Project: Kalzium beautification

    Project Information: Many parts of Kalzium could need a fresh up of the interface. For example, the main table should be written using Qt Model/View technique and for example use SVGs as a background. A fist (uncomplete but working) code is already existing.

    At the same time, many dialogs are not as beautiful as they could be. This project could also include the creation of a "simplified Kalzium" mode in which some parts of the feature set are hidden; this would be good for schools.

    A third idea is to make more use of Plasma, for example improve the already written Plasmoids and/or extent Kalzium so that a Plasmoid could open a information dialog using Kalzium.

    Expected results: Depending on the chosen project for example a cleaned up codebase with an improved interface.

    Knowledge Pre-Requisite: Required: C++, Qt, possible Plasma, Debug.

    Mentor: Carsten Niehaus

    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: Improved HTML support

    Project Information: Many users would like to see improved HTML composing support in KMail, which currently is very basic only.

    The following needs to be done:

  • The ability to add inline images to HTML mail
  • Generate better (and valid) HTML than that what QTextEdit::toHtml() produces
  • Replying to a received HTML mail should keep the HTML structure intact
  • Various other bugfixes and improvements

    Knowledge Prerequisite: C++, a bit of Qt

    Contacts:#kontact IRC channel or Thomas McGuire <thomas.mcguire at gmx dot net>

    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


    Kleopatra is the KDE Certificate Manager. In KDE 4.1, it will have gained OpenPGP support (it originally comes from the X.509 world). It is currently being prepared to be integrated into the [GnuPG For Windows] installer, too, and therefore needs to work in a size-reduced KDE environment (basically, kdecore and kdeui only).

    All of the Kleopatra projects naturally require familiarity with Qt, C++, and GnuPG/OpenPGP concepts.

    Project: OpenPGP web-of-trust visualization

    Project Information: The proposed SoC task will implement a mechanism to visualize the user's personal OpenPGP web of trust.

    Detailed Description: For a long time now, Kleopatra has had the ability to show a hierarchical view of the user's X.509 (aka. S/MIME, aka. CMS) keyring. Such a view lends itself naturally to X.509 certificates, whose trust model is hierarchical. Here, subjects (signees) are children of their respective issuers (signers) in a standard tree view, so that root certificates end up being top-level items.

    Naturally, this simplistic hierarchical view is hard to generalize to OpenPGP's Web-of-Trust (WoT) model where everyone may certify everyone else. It is the goal of this task to identify and implement such a generalized hierarchical view that fits this extended trust model.

    At least two views are obvious candidates (but this task is not restricted to only these):

    Extend the current X.509-type hierarchical view around the idea that my own key can be seen as my own personal root certificate: Keys signed by me would be first-level children of my top-level key, and keys signed by those people would be second-level children, etc. The depth of a key in the item would be the same as that reported as depth in the output of gpg --check-trustdb. Problems with this approach include mapping a directed cyclic graph onto a tree for putting it into a tree view. Some people also have the opinion that the reverse of what is described here would be what users expect (rationale: gpg lists the signers below the signee in an --list-signatures operation).

    The second option is to use a graph visualization widget (to be found somewhere or written) that would allow to browse the WoT interactively. This might break the timeframe, but could be made into a more general component that can be used elsewhere if the project progresses exceptionally well.

    Expected results: A completed, tested, and documented implementation of a visualization tool for OpenPGP, integrated into Kleopatra's 1.9.x/2.x branch. Important capabilities include:

    • It should contain the X.509 case as a special subset.
    • It is easy to find the people I have signed.
    • It is easy to see the trust path between two certificates.
    • It is easy to see when such a trust path does not exist.

    With regard to Gpg4Win, the solution should fail gracefully in the absence of either the external tool, or KMail/Akonadi.

    Knowledge Prerequisites: Same as for Kleopatra. Graph visualization knowledge would help, too.

    Mentor: Marc Mutz

    Project: Keysigning Party Support

    Project Information: The proposed SoC task will implement functionality to automate the challenge-response mail algorithm used after OpenPGP keysigning parties

    Detailed Description: Everyone that has been to a keysigning party has probably gotten a challenge mail to decrypt and send back afterwards. This is done in order to verify that the owner of the email address is also the owner of the (secret) key. This procedure is the basis for most OpenPGP Keysigning Policies, including the one from your mentor.

    There are two ways to do this:

    • Interface with an already existing robot that is hooked into the local mail server, or
    • Interface with KMail/Kontact (or, if ready by then Akonadi).

    The second option is preferable, as it allows users with a normal desktop system to participate in the system. The first option would have to do a lot of user handholding for being usable enough for the target audience.

    Expected results: A completed, tested, and documented implementation of a OpenPGP challenge/response tool for OpenPGP, integrated into Kleopatra's 1.9.x/2.x branch. Important capabilities include:

    • Track sent challenges
    • Validate responses.
    • Alert the user when all responses necessary for a signing have been received.
    • Optionally, do this without user interaction.
    • Optionally, do this per user-id.
    • Deal gracefully with responses that are not forthcoming.

    With regard to Gpg4Win, the solution should also have no further external dependencies (mainly Qt, boost, kdelibs, kdeui, gpgme), but this is no hard requirement.

    Optionally, a MIME message format that facilitates the automatic handling of these challenge/response mail could be created and publicized.

    Knowledge Prerequisites: Same as for Kleopatra

    Mentor: Marc Mutz

    Project: SSL CA Control Center

    Project Information: The proposed SoC task will implement an S/MIME Certificate Authority (CA) frontend for one or more free CA solutions.

    Detailed Description: While there is CA software available (e.g. OpenSSL and Mozilla NSS), the command line tools are hard to integrate to get even a small CA running. This project is all about changing that.

    Expected results: A completed, tested, and documented frontend for one or more X.509 CA software packages, integrated into Kleopatra's 1.9.x/2.x branch. Important capabilities include:

    • Set up a new X.509 root certificate. Optionally: allow more than one root to be adminstered.
    • Allow to define any number of child CAs.
    • Allow to create new client certificates either ad-hoc, or from a PKCS#10 request.
    • Allow web- as well as mail certificates (or be flexible enough for doing both).
    • Allow to revoke and extend client certificates, and publish CRLs.
    • Be useable without much prior knowledge, prevent useless certificates.
    • Optional: KIOSK-enable the processes, so an admin can lock down certain aspects of them.

    With regard to Gpg4Win, the solution should also have no further external dependencies (mainly Qt, boost, kdelibs, kdeui, gpgme), but this is no hard requirement. It should use the command line tools instead of linking to the respective libraries (for stability, security, and licensing reasons).

    From a UI point of view, the operations shouldn't look much different from the respective OpenPGP ones.

    Knowledge Prerequisites: Same as for Kleopatra. Knowledge about CA software helps.

    Mentor: Marc Mutz


    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 <[email protected]>

    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 <[email protected]>

    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 Resource: Facebook friends and events

    Description: Facebook has an API that can be used to query a user's friends and information about these. The API also gives access to a user's events. The aim of this project is to implement an Akonadi resource to access contact data stored on Facebook for a user's friends, and also give access to a user's events in Akonadi so that this information can be used in KOrganizer and KAddressbook.


    Note that there already is an implementation.

    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

    Project: Akonadi backend for .pst files

    Project Information: The proposed SoC task will implement an Akonadi backend to allow users to at least read, and possibly write, information from personal storage (.pst) format files.

    Brief explanation: Users migrating from Microsoft Outlook often have a lot of information embedded in .pst files - archived mails, calendars, journal entries, and sometimes contacts.

    There are existing libraries to work with this format (e.g. libpst) but I'm not aware of any that do writing. Also note that the .pst format changed - there are two different versions.

    Expected results: A completed, and tested, backend that can operate with a both of the .pst formats. Important capabilities include ability to retrieve mail, calendar entries and contact entries. It would be useful to be able to write as 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. You would need some way to create test files - almost certainly some version of Outlook, and it would be useful if you had real-world experience with creating and using .pst files.


    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: HTML, 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>


    Project Information: KDevelop is the Integrated Development Environment from KDE. If you have something you'd like to see in KDevelop4 don't hesitate to write up your proposal or come to our developer list and discuss it with us.

    Project: Distribution integration

    Brief explanation: Integration of the build-system of one specific distribution into KDevelop. Usually it is quite easy to get the source-code of a package and build it, for example using "apt-get source" and "dpkg-build" under debian, or "osc" under openSUSE.

    Expected results: A user can start KDevelop, and choose a package from a list that should be retrieved from some distribution repository. Then KDevelop would download the source-package and create a project-directory+file into which all the necessary information is extracted, inluding a copy of the original project source that can be edited from within KDevelop. The developer can edit the source with code-completion, -navigation, and all the nice extras out of the box. Then the developer can build the package using the distribution-specific mechanisms, with the own changes to the source-tree are included as a patch. One of the most tricky things here would be providing KDevelop with correct include-path information for all the source-files. A simple hack to retrieve include-paths from existing makefiles is already implemented within KDevelop, and can be re-used. An additional bonus could be management of multiple separate patches on top of the source-tree, that can easily be submitted upstream. It would be nice if all the stuff could be implemented in a way that it's easy to add support for other Distributions.

    Knowledge Pre-Requisite: C++, package-building experience for a popular distribution(Maybe openSUSE or Ubuntu/Debian)


    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

    Project: Jabber voice- and video-chat support

    Brief explanation Add suport for Jabber/Google Talk video chat to Kopete and Decibel.

    Knowledge Prerequisite: C++, Qt, KDE.

    Project: Advanced custom media support

    Brief explanation In MSN, it's great fun for many people to collect individual animated emoticons and use them during the chat, and to trigger funny animations over the whole chat window. Also it is confusing for newbies when they send a message with an own emoticon, and it apears on the other side with no or another one. So at least the custom emoticon feature would be very nice. What probably needs to be done: - Implement simple management of a custom set of emoticons that can be added one by one. When someone else uses an emoticon, it should be possible to right-click it, and save it to the own collection. - Implement support for sending custom emoticons through jabber, and as many other protocols as possible that support this feature. For MSN, I think it's already implemented. - If time allows, implement sending of custom flash animations, that are played back using gnash, and allow downloading new animations through GetHotNewStuff. These features would make Kopete even more interesting to a wider less-purist audience.

    Knowledge Prerequisite: C++, Qt, KDE.


    Project: Embedded web-content transfer plugin for KGet

    Brief explanation: KGet could need a transfer plugin which automatically can fetch custom content from websites. Examples are flash movies from sites like YouTube or Google-video.

    Expected results: KGet has already a very good framework for transfer plugins (plugins for mirror search of downloads, Bittorrent, KIO transfers are already available). This new custom web-content transfer plugin must be built on this framework. The plugin should basically work with any webcontent. It should take the configuration how to fetch the content from a config file (e.g. xml descripton file). The prject should also include basic "configurations" for YouTube and Google video and probably other services.

    Knowledge Prerequisites: C++ is essential, knowledge of Qt KDE and web technologies like HTML and JavaScript would be helpful.

    Resources: Existing transfer plugins, KGet developers

    Mentor: Anthony Bryan <albryan comcast net>

    Project: Multiple Improvements to KGet

    Brief explanation: This project is made up of multiple small projects that will make KGet easier to use and function similar to other download managers.

    Expected results: (1) A right-click menu to change file download properties (filename, destination directory, URL), (2) Allow users the option of adding new download sources to a multithreaded transfer manually, (3) Pass metadata about downloaded files to Nepomuk for semantic desktop, (4) Pass digital signatures to KGpg, (5) Add support for repairing downloads via Metalinks with chunk checksums, (6) GUI to create Metalinks, (7) Integration of BitTorrent/FTP/HTTP multi-source downloads.

    Knowledge Prerequisites: C++ is essential, knowledge of Qt KDE and web technologies like HTML and JavaScript would be helpful.

    Resources: Existing transfer plugins, KGet developers

    Mentor: Anthony Bryan <albryan comcast net>


    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 [email protected].

    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: Nepomuk integration

    Project Information: Integration between Digikam and Nepomuk could allow the user to better organize his/her pictures and access them easily from other apps, or even from other computers as Nepomuk is a networked system.

    Brief explanation: Nepomuk could allow the user to organize the pictures in a finer way : Nepomuk allows the user to define properties on his picture, extending the usecases of standard metadata (XML/IPTC/XMP...). The user can add any property under the form subject - predicate - object. Think of it as finer grained tags. You could for example define the predicate "is on the picture" to list all the people present on it (facebook does that). In a larger scope, the user can link picture to any resource known by Nepomuk (project, meetings...).

    The other advantage is that Nepomuk stores the information in a central index, which means that it can easily be accessed by other apps (I think of Akonadi). This allows tighter integration, as OS X does in its latest version with the iPhoto library.


    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.

    trueg: I do not support the idea of dropping cdrecord integration. K3b already supports different backends. This architecture should be extended.

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

    Mentor (volounteer): Sebastian Trueg <[email protected]>

    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 <[email protected]>

    (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.

    Social Desktop

    The Social Desktop involves connecting users with each other. The proposed web service for that is the OpenDeskop API. This project involves researching how the semantic web and desktop can be used to create a more peer-to-peer based Internet experience.

    The project is divided into different parts:

    • Creating a canonical way to retrieve information about a user, using Nepomuk and webservices to define and query characteristics of the "Contact" object.
    • Collecting information about the users. A lot is easily available via Akonadi, or for example Attica's library, which is currently in playground
    • Integration with webservices such as FlickR, Twitter, LinkedIn, Facebook. Many of those services can already be used from KDE application, such as FlickR from Digikam, Twitter from Plasma, and Facebook from Akonadi. The challenge is to offer a one stop shop for the social web on the desktop.
    • Researching and implementing design concepts how to integrate the user's social environment into the desktop and application UI.

    Mentor & more information: Sebastian Kügler (sebas kde org) and social-desktop kde org mailinglist


    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.


    Project: GLib/GObject based client library for Akonadi

    Description: Akonadi is not only intended to be used by KDE applications but also by applications built on different tool stacks. Thus the canonical interface between Akonadi server and its clients is the Akonadi storage access protocol and D-Bus for out-of-band notifications.

    Expected results:

    • Design and implement a GLib/GObject based client library, probably modify a respective IMAP parser library to process the quite similar Akonadi protocol.
    • Small, unit test like, programs using the library to perform simple tasks.

    Knowledge Pre-Requisite: Other than the usual KDE projects this does not require C++ or Qt/KDE experience but rather experience in C and GLib/GObject. Bonus for finding a co-mentor with such experience.

    References: See respective subsection under KDE-PIM above

    Mentor: Till Adam

    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


    Two projects ideas are described below: Strigi-Xesam and Strigi-PDF.


    Project: Strigi and Pinot integration via Xesam

    Brief explanation:

    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].

    Expected results: 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]


    Project: A PDF plugin for Strigi text mining

    Brief Description: Along with other document formats, PDF is an important format for text documents. Strigi's [1] limited ability to full text index these documents limits its application of mining of text documentation. The current solution access the text in PDF documents directly, but has trouble correctly identifying whitespace, causing loss of spaces between words in some cases.

    This proposal integrates pdf-to-text tools from Poppler [2] as principle way to access the text in PDF documents. Two alternatives are possible: either warp the pdftotext command line utility, or use the Poppler library directly.

    Benefits include :

    • support for a widely used document format for text resources

    Expected results: Primary focus is on the text mining, but qualified students may also extend the plugins functionality to provide non-text PDF content as substreams to Strigi. This will allow Strigi to extract metadata from such content in the PDF too. For example, it could extract license, author, etc information from images, or index the text content of embedded SVG images.

    [1] [2]

    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?


    Project: KDE (KConfig) integration with APOC

    Project Information:

    APOC ( is a framework for centralized (e.g. in LDAP) storage and management of application and desktop configuration. It has integrations with the GNOME configuration system (gconf) and various desktop-independent applications (, firefox, Java).

    This project is to integrate APOC with KConfig so that KDE application preferences can be managed as well.

    APOC is also proposing another, different GSOC project using GNOME as mentoring organisation.

    Knowledge Prerequisites:

    • C++ coding
    • XML knowledge
    • KDE coding and configuration experience helpful

    Expected Result:

    • A documented mapping of KConfig preference structure onto the APOC file format.
    • A working KConfig backend that reads data from APOC


    APOC is discussed on the apoc mailing list ([email protected]) and on the #apoc channel at

    Mentor: Jörg Barfurth


    Project: PolicyKit Integration for KDE

    Description: PolicyKit is a toolkit for defining and handling the policy that allows unprivileged processes to speak to privileged processes: It is a framework for centralizing the decision making process with respect to granting access to privileged operations for unprivileged applications. PolicyKit is specifically targeting applications in rich desktop environments on multi-user UNIX-like operating systems.

    Expected results:

    • Provide a D-Bus session bus service that is used to bring up Qt/KDE authentication dialogs used for obtaining privileges.
    • Exemplary integration of PolicyKit within KDE (eg changing system clock from System Settings/clock plasmoid)
    • Write a Qt/KDE frontend to manage privileges




    Project: Pysmssend Integration for KDE

    Description: Pysmssend [1] is a program for sending sms over multiple providers. Full Integration for KDE ( maybe re-writting it on PyKDE ) and also importing some features ( encryption on user passwords ) would be some good additions for this project.

    References: Pysmssend

    If somebody wants to mentor me on this project please mail me on Markos Chandras

    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).