GNOME Project ideas for Google Summer of Code 2025

For general information on how to get involved with our project and participate in Google Summer of Code with GNOME visit gsoc.gnome.org

This is the list of project ideas that the GNOME community is interested in mentoring. GSoC interns can also propose their very own project ideas. If you are interested in proposing a project idea, please file an issue in our Internship Project Ideas repository.

GSoC contributors proposing something original must engage with the community strongly before or during the application period to get feedback and guidance to improve the proposal.

Project list

Add eBPF profiling capabilities to Sysprof

Currently, Sysprof works by recording stack traces from the Linux Perf subsystem using perf_event_open(). It also can record various system statistics using data from /proc such as CPU, memory, networking, and disk statistics.

eBPF provides an existing new direction for tooling of this nature by uploading small programs into the kernel to extract the data you want without the parsing overhead. That data can be delivered to an application like Sysprof for recording into the capture files.

This internship would involve creating the tooling within libsysprof to setup new eBPF programs by compiling, linking, and uploading them into the kernel along with necessary components to get data from the kernel back to Sysprof.

This would then be used to port some collectors such as CPU or memory trackers to use eBPF instead of /proc files.

Requirements

  • Knowledge of C, preferably using GLib/GObject but that can be learned
  • Minimal experience performance profiling software
  • Minimal experience with the Linux kernel
  • Learning how eBPF works and how to integrate that with the kernel can be learned on the job

Communication

Chat, email, video chat. Christian Hergert @chergert or hergertme on IRC/Matrix or @chergert at gnome.org

Mentor(s): Christian Hergert

Difficulty: Hard

Mentor availability: ~350 hours

More information

https://gitlab.gnome.org/Teams/Engagement/internship-project-ideas/-/issues/51

Papers: Proof of Concept for backend isolation

This project will mostly require work on Papers' libraries: ppsview and ppsdocument. The former contains an abstraction (PpsJob) to run (potentially slow) backend code in threads. The later is basically a common abstraction over different backends: PDF, DJVU, Tiff, etc. The idea is to create a component that will start a new process per-document (similar to web-browsers having one process per tab!). That side-car process will take care of all the calls to the backends (so embedded in ppsdocument), and be managed by PpsJobs. Further details are available in https://gitlab.gnome.org/GNOME/Incubator/papers/-/issues/104

The idea for the GSoC will be for the Intern to prototype a solution to this problem, and investigate potential solutions and foot-guns. The intern will need quite a good knowledge on C, and have motivation to do some investigate work (e.g: look into solutions implemented by other projects like WebKit). I don't expect a full implementation or solution, even if that would be welcomed. A failed attempt at this might already gives us extremely valuable input.

This will benefit Papers as the future Document Viewer in GNOME in two ways:

  • By isolating documents from each other, we improve the overall security situation. Even CVEs that might allow somebody to gain access to execution code from rendering a PDF would not have access to the other documents.
  • By isolating documents from the UI we improve the resilience of Papers. A document crashing during rendering (for which CVEs happen regularly (last one CVE-2024-6239) will not bring down with itself the complete application. This has been so far the main blocker to implement the Document Viewer tabbed view, which has been a feature request for Evince since 2005

Requirements

  • Good skill and experience in the C programming language. Both be able to write and read it
  • The ability to investigate previous approaches to solve the same issue. We will guide the Intern on where to look
  • Motivation to try different approaches. We know a big part of this project will be checking the feasibility of different solutions

Communication

Our preferred communication channel is Matrix (https://matrix.to/#/#papers:gnome.org), but we will also do video-calls to get onboarded and if deemed useful and necessary for the mentoring process

Mentor(s): Pablo Correa Gomez, Qiu and Markus

Difficulty: Hard

Mentor availability: ~350 hours

More information

https://gitlab.gnome.org/Teams/Engagement/internship-project-ideas/-/issues/58

Vala: Researching/Designing/Implementing xml/json/yaml/... integration

The goal of this project is to add xml, json and/or yaml format language integration to Vala. Other integrations already exist for DBus, GTK builder format, or GModule (https://gnome.pages.gitlab.gnome.org/vala/manual/attributes.html#dbus-attribute). Examples can be found here.

Currently, parsing and emitting files in Vala with formats like xml, json, or yaml are relatively tedious, need a lot of boilerplate code, and are much more complicated than in other programming languages. But these file formats are very commonly used in modern software, and many internet protocols and existing standards depend on them. Improving their handling would allow more efficient development, as well as lower the barrier for newcomers to Vala.

First, research is necessary, to find out how other programming languages have done the integrations. Also wanted features will need to be evaluated. For that also different example projects need to be looked into or created, to find the different use cases and related challenges and how to address them. For proposing designs of the new Syntax, "code mock-ups" are going to be written. These can later also serve as test cases for the vala test suite. Then the community will discuss and give feedback to iterate on the syntax design. As the last step (and probably the one taking the longest time), the proposed syntax('s) will be prototyped inside the Vala compiler. Also test cases for the new features, documentation and example code snippets should be developed at the end of the project. If time is left at the end, also other projects that benefit from the new features can be updated to use the new syntax, for example the Vala Language Server.

Requirements

  • Experience with programming in general, as well as a good understanding of object orientation
  • Ready to learn the Vala language, and to understand and investigate the syntax of other programming languages for research purposes
  • Being open to reach out to the Vala community, and to contributors of other projects written in Vala, to collect feedback about the current situation and the new syntax
  • Ability to grow familiar with a relatively large codebase, to find solutions to problems you encounter (There will be a lot of guidance of course)

Communication

Main communication channel: Matrix: https://matrix.to/#/#vala:gnome.org Calls are possible for onboarding and mentoring whenever there is a need. (And when enough time)

Mentor(s): Lorenz Wildberg

Difficulty: Medium

Mentor availability

TBD

More information

https://gitlab.gnome.org/Teams/internship/project-ideas/-/issues/61

Add printing support to GNOME Crosswords

GNOME Crosswords has some cursory svg code, but doesn't support printing. It is relatively straightforward to extend the svg code to produce printable puzzles. This project consists of multiple sequential stages, with some simple initial milestones and some stretch goals as well. In particular:

  • Initial design and planning
  • Refactor the svg code to make it handle the existing board and thumbnail usecases, as well as printable puzzles
  • Add clues to the generated svg, and make it look good
  • Bring the printing dialog to both the game and the editor
  • Add crossword-specific options to the printing flow

As stretch goals, it would be good to support additional puzzle types, as well as add an ipuz2pdf utility to the app.

Requirements

  • Knowledge of C, especially glib-style C programming. Ability to understand a complex codebase and issues.
  • Familiarity with svg a plus
  • A physical printer is not necessary

Communication

Primarily matrix. The main crosswords channel can be found at https://matrix.to/#/#crosswords:gnome.org

We also will use gitlab issues and email as appropriate. Video conferencing occasionally when necessary.

Mentor(s): Jonathan Blandford, Federico Mena Quintero, [email protected]

Difficulty: Medium

Mentor availability: ~350 hours (Could be ~175 hours if necessary, with fewer milestones reached

More information

https://gitlab.gnome.org/Teams/internship/project-ideas/-/issues/62

Add Wordlist Scoring to GNOME Crosswords Editor

GNOME Crosswords Editor uses some lists of words in order to produce crosswords. These lists lack the metadata to make more interesting puzzles. We'd like to find, gather, and encode that metadata with the lists in order to choose appropriate words when working with the editor.

For more information on the problem, please read this design doc.

This project will involve finding ways to calculate, measure, and encode values for each of the five traits listed. We will then use it when creating a puzzle to try and create more interesting grids.

Requirements

  • The biggest requirement for this project is a love of words, and a certain amount of comfort with uncertainty. I will expect the intern to do some independent research and exploration
  • This project will mostly be in python, and will involve a fair amount of data analysis as well as codings
  • Some low-level C programming knowledge is a strong plus, as well as the ability to use a hex-editor. The current wordlist is stored in a custom data structure
  • This project will involve working with some large data sets — possibly as big as 20 GB. A relatively fast machine with sufficient disk space will be required, as well as the ability to download large files.

Communication

Primarily matrix. The main crosswords channel can be found at https://matrix.to/#/#crosswords:gnome.org

We also will use gitlab issues and email as appropriate. Video conferencing occasionally when necessary.

Mentor(s): Jonathan Blandford, Federico Mena Quintero, [email protected]

Difficulty: Medium

Mentor availability: ~350 hours (Could be ~175 hours if necessary, with fewer milestones reached

More information

https://gitlab.gnome.org/Teams/internship/project-ideas/-/issues/63