This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
gsoc:google-summer-code-2024-openprinting-projects [2024/02/01 22:03] till [Contact] |
gsoc:google-summer-code-2024-openprinting-projects [2024/04/01 09:28] (current) till |
||
---|---|---|---|
Line 34: | Line 34: | ||
* [[https://podcast.asknoahshow.com/368?t=2837|Ask Noah: Till Kamppeter on how OpenPrinting improved printing with Linux/Unix]] | * [[https://podcast.asknoahshow.com/368?t=2837|Ask Noah: Till Kamppeter on how OpenPrinting improved printing with Linux/Unix]] | ||
* [[https://www.youtube.com/watch?v=m5QKJH9tDjQ|Linux Saloon: Till Kamppeter about how he got Snap enthusiast]] | * [[https://www.youtube.com/watch?v=m5QKJH9tDjQ|Linux Saloon: Till Kamppeter about how he got Snap enthusiast]] | ||
+ | |||
+ | ====Talk about OpenPrinting==== | ||
+ | |||
+ | * [[https://fosdem.org/2024/schedule/event/fosdem-2024-1930-openprinting-we-make-printing-just-work-/|OpenPrinting - We make printing just work! Till Kamppeter, FOSDEM 2024, Brussels, Belgium]] | ||
====Printer Drivers get Printer Applications==== | ====Printer Drivers get Printer Applications==== | ||
Line 136: | Line 140: | ||
=====Desktop integration: CPDB support for the print dialogs of Mozilla (Thunderbird/Firefox) and LibreOffice===== | =====Desktop integration: CPDB support for the print dialogs of Mozilla (Thunderbird/Firefox) and LibreOffice===== | ||
- | 1-2 contributors full-size (350 hours). | + | 1-2 contributors full-size (350 hours), Level of difficulty: Hard |
Most print jobs are sent via the print dialog of a desktop application, like evince, Chrome, LibreOffice, DarkTable, … Print dialogs are usually, like “Open …” or “Save as …” dialogs, provided by the GUI toolkits, in most cases GTK or Qt, sometimes applications come also with their own creations, like LibreOffice or Firefox. | Most print jobs are sent via the print dialog of a desktop application, like evince, Chrome, LibreOffice, DarkTable, … Print dialogs are usually, like “Open …” or “Save as …” dialogs, provided by the GUI toolkits, in most cases GTK or Qt, sometimes applications come also with their own creations, like LibreOffice or Firefox. | ||
Line 168: | Line 172: | ||
=====Desktop Integration: Update system-config-printer for the New Architecture of printing===== | =====Desktop Integration: Update system-config-printer for the New Architecture of printing===== | ||
- | 1 contributor full-size (350 hours). | + | 1 contributor full-size (350 hours), Level of difficulty: Intermediate |
Originally, we already had discontinued the development of system-config-printer and put it into maintenance mode, only fixing bugs and collecting UI translations. | Originally, we already had discontinued the development of system-config-printer and put it into maintenance mode, only fixing bugs and collecting UI translations. | ||
Line 192: | Line 196: | ||
=====Desktop Integration: User interfaces for using OAuth2 with printers and scanners===== | =====Desktop Integration: User interfaces for using OAuth2 with printers and scanners===== | ||
- | 1 contributor full-size (350 hours). | + | 1 contributor full-size (350 hours), Level of difficulty: Hard |
From version 2.5.x on CUPS uses OAuth2 ([[https://en.wikipedia.org/wiki/OAuth|Open Authorization]]) for authorization purposes and drops the formerly used Kerberos with the CUPS 3.x generation. See latest state-of-the-art presentation from Michael Sweet: [[https://events.canonical.com/event/35/contributions/285/attachments/66/111/oos-cups-september-2023.pdf|slides]], [[https://www.youtube.com/watch?v=vzu0FIyDfOo|video]], slide 11). | From version 2.5.x on CUPS uses OAuth2 ([[https://en.wikipedia.org/wiki/OAuth|Open Authorization]]) for authorization purposes and drops the formerly used Kerberos with the CUPS 3.x generation. See latest state-of-the-art presentation from Michael Sweet: [[https://events.canonical.com/event/35/contributions/285/attachments/66/111/oos-cups-september-2023.pdf|slides]], [[https://www.youtube.com/watch?v=vzu0FIyDfOo|video]], slide 11). | ||
Line 211: | Line 215: | ||
Code License: Apache 2.0, MIT, GPL-2+ and LGPL-2+ | Code License: Apache 2.0, MIT, GPL-2+ and LGPL-2+ | ||
+ | |||
+ | =====Integrating C-based OpenPrinting projects in OSS-Fuzz testing===== | ||
+ | |||
+ | 1 contributor full-size (350 hours), Level of difficulty: Intermediate | ||
+ | |||
+ | [[https://google.github.io/oss-fuzz|OSS-Fuzz]] is a project aimed at finding vulnerabilities in open-source projects that are critical to the Internet infrastructure. It is powered by Google and was initiated in response to [[https://heartbleed.com|Heartbleed]], an OpenSSL vulnerability that could have been discovered with classic vulnerability discovery techniques. The codebases integrated into OSS-Fuzz are run multiple times with randomly crafted inputs in an approach called fuzzing. | ||
+ | |||
+ | Most of OpenPrinting's code is written in C, which is susceptible to memory corruption bugs. OpenPrinting's projects do not use fuzzing, with a single exception: CUPS has a [[https://github.com/OpenPrinting/cups/blob/master/cups/fuzzipp.c|custom fuzzer]] run when testing the build, for a fixed number of iterations. | ||
+ | |||
+ | Due to the compatibility of C projects with OSS-Fuzz, we would like to abandon the existing fuzzer and integrate the following C-based OpenPrinting projects into OSS-Fuzz (projects in priority order): | ||
+ | |||
+ | * CUPS | ||
+ | * libcups | ||
+ | * cups-local | ||
+ | * cups-sharing | ||
+ | * libcupsfilters | ||
+ | * cups-filters | ||
+ | * cups-browsed | ||
+ | * PAPPL | ||
+ | * cpdb-libs | ||
+ | * cpdb-backend-cups | ||
+ | * libppd | ||
+ | * pappl-retrofit | ||
+ | |||
+ | The purpose is to use the Google Summer of Code timeframe to create a mature OSS-Fuzz integration that maximises the number of fuzzed projects and fuzzing efficiency, as measured by coverage and execution speed. | ||
+ | |||
+ | The contributor should work on: | ||
+ | |||
+ | * Coordinating with OpenPrinting which projects have highest priority and also which functionality of them, to get the best from the limited GSoC time | ||
+ | * Creating Docker-based build environments | ||
+ | * Writing libFuzzer fuzz targets | ||
+ | * Creating a corpus of data | ||
+ | * Understanding and implementing the [[https://google.github.io/oss-fuzz/advanced-topics/ideal-integration/|OSS-Fuzz best practices]] | ||
+ | * Coordinating with the OpenPrinting developers to patch the vulnerabilities found by OSS-Fuzz | ||
+ | * Analysing the found vulnerabilities and interpreting their details to deduce vulnerability classes that can be mitigated in bulk. | ||
+ | |||
+ | Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), George-Andrei Iosif, Security Engineer at Snap Inc. (hi at iosifache dot me). | ||
+ | |||
+ | Desired knowledge: C, fuzzing | ||
+ | |||
+ | Code License: Apache 2.0, MIT (licenses of the OpenPrinting projects) | ||
+ | |||
+ | =====Official OCI containers (Docker, ROCKs, podman, ...) of CUPS and Printer Applications===== | ||
+ | |||
+ | 1 contributor full-size (350 hours), Level of difficulty: Intermediate | ||
+ | |||
+ | [[https://ubuntu.com/blog/ubuntu-core-an-immutable-linux-desktop|Immutable desktop operating system distributions]] are currently one of the most talked about subjects in free software. There is barely passing a week where one does not hear about any new distribution of this kind. | ||
+ | |||
+ | Immutable distributions are made up of a read-only (immutable) core file system and applications are installed also as immutable container images. This gives more ease of use, reliability, and security, as the file systems cannot be modified and messed up, but instead, only replaced and updated as a whole, and also each application is in its own security capsule not being able to access any of the other applications or the system. This practice is commonplace on smartphones and got overtaken to PCs. | ||
+ | |||
+ | On most immutable distributions, one installs desktop applications in the [[https://flatpak.org/|Flatpak]] format. This gives a huge choice of apps, but Flatpak cannot be used for GUI-less system applications and daemons. The solution for adding this type of software is the use of an alternative container format. And here [[https://opencontainers.org/|OCI containers]] are the solution. The container images can be downloaded from app-store-alike services like the [[https://hub.docker.com/|Docker Hub]] and be installed an run via [[https://www.docker.com/|Docker]], [[https://podman.io/|podman]] or similar. | ||
+ | |||
+ | If you have a look at the Docker Hub you will find several container images for CUPS, but none of them is the official one, none of them comes from OpenPrinting. This makes the choice difficult, to find the most suitable one and also not get hit by a malicious one. So an official OCI container of CUPS is the first thing we need, to be able to have always the latest release of CUPS, directly from its developers. | ||
+ | |||
+ | Another point is how to add printer and scanner drivers to immutable distributions. For this we also need containers of Printer and Scanner Applications. | ||
+ | |||
+ | The contributor's task is to create these containers and infrastructure and scripting to ease their maintenance, like for example update automation when for one or another of their components a new upstream version is released, or for automated test building and testing. | ||
+ | |||
+ | There are tools for creating such images, for example [[https://discourse.ubuntu.com/c/rocks/|rockcraft]] which uses build instruction files similar to Snap (see this [[https://events.canonical.com/event/31/contributions/228/|workshop]]: [[https://events.canonical.com/event/31/contributions/228/attachments/132/209/%5Bslidedeck%5D%20Container%20craftsmanship_%20from%20a%20Pebble%20to%20a%20ROCK.pdf|slides]], [[https://www.youtube.com/watch?v=BDXZxp3aFBY|video]]) and so we can use our [[https://github.com/OpenPrinting/cups-snap/|CUPS Snap]] as base, but we will not require the contributor to use a special, given tool. | ||
+ | |||
+ | Desired knowledge: Shell, Python, packaging, immutable OS distributions, GIT | ||
+ | |||
+ | Code License: Apache 2.0, MIT (licenses of the OpenPrinting projects) | ||
=====Replace QPDF by PDFio as PDF manipulation library in libcupsfilters (cfFilterPDFToPDF() filter function and others)===== | =====Replace QPDF by PDFio as PDF manipulation library in libcupsfilters (cfFilterPDFToPDF() filter function and others)===== | ||
- | 1 contributor full-size (350 hours). | + | 1 contributor full-size (350 hours), Level of difficulty: Hard |
Like [[https://openprinting.github.io/cups/|CUPS]], [[https://github.com/OpenPrinting/libcupsfilters|libcupsfilters]] is principally written in regular C and not in %%C++%%. We want to avoid %%C++%% as it has often problems with binary compatibility and the mechanism with which the Debian/Ubuntu build services auto-detect dependencies between Debian packages get very awkward with %%C++%%. | Like [[https://openprinting.github.io/cups/|CUPS]], [[https://github.com/OpenPrinting/libcupsfilters|libcupsfilters]] is principally written in regular C and not in %%C++%%. We want to avoid %%C++%% as it has often problems with binary compatibility and the mechanism with which the Debian/Ubuntu build services auto-detect dependencies between Debian packages get very awkward with %%C++%%. | ||
Line 236: | Line 303: | ||
=====Turn cups-browsed into a Printer Application===== | =====Turn cups-browsed into a Printer Application===== | ||
- | 1 contributor full-size (350 hours). | + | 1 contributor full-size (350 hours), Level of difficulty: Intermediate |
[[https://openprinting.github.io/achievements/#cups-browsed|cups-browsed]] is a helper daemon for CUPS to automatically set up network printers. In the beginning it was to overcome that when CUPS from 1.6.x on used DNS-SD instead of its own browsing/broadcasting, it did not auto-setup client queues any more. | [[https://openprinting.github.io/achievements/#cups-browsed|cups-browsed]] is a helper daemon for CUPS to automatically set up network printers. In the beginning it was to overcome that when CUPS from 1.6.x on used DNS-SD instead of its own browsing/broadcasting, it did not auto-setup client queues any more. | ||
Line 258: | Line 325: | ||
=====Converting Braille embosser support into a Printer Application===== | =====Converting Braille embosser support into a Printer Application===== | ||
- | 1 contributor full-size (350 hours). | + | 1 contributor full-size (350 hours), Level of difficulty: Hard |
cups-filters currently supports Braille embossers through a series of PPD files and shell scripts that convert documents into a textual layout, convert the text into Braille dots, and convert the Braille dots to braille embosser-specific formats. | cups-filters currently supports Braille embossers through a series of PPD files and shell scripts that convert documents into a textual layout, convert the text into Braille dots, and convert the Braille dots to braille embosser-specific formats. | ||
Line 279: | Line 346: | ||
=====Make a native Printer Application from Gutenprint===== | =====Make a native Printer Application from Gutenprint===== | ||
- | 1 contributor full-size (350 hours). | + | 1 contributor full-size (350 hours), Level of difficulty: Hard |
[[http://gimp-print.sourceforge.net/|Gutenprint]] is a high-quality printer driver for a wide range of inkjets, especially Epson and Canon, dye-sublimation printers and even monochrome PCL laser printers. It does not only cover many printers to give them support under Linux and free software operating systems at all, but also is optimized for highest possible print quality, so that at least on some printers and with the right settings you can even get better print quality than with the original (Windows/Mac) drivers. | [[http://gimp-print.sourceforge.net/|Gutenprint]] is a high-quality printer driver for a wide range of inkjets, especially Epson and Canon, dye-sublimation printers and even monochrome PCL laser printers. It does not only cover many printers to give them support under Linux and free software operating systems at all, but also is optimized for highest possible print quality, so that at least on some printers and with the right settings you can even get better print quality than with the original (Windows/Mac) drivers. | ||
Line 307: | Line 374: | ||
=====CI Testing programs for libpappl-retrofit and libppd===== | =====CI Testing programs for libpappl-retrofit and libppd===== | ||
- | 1 contributor full-size (350 hours). | + | 1 contributor full-size (350 hours), Level of difficulty: Intermediate |
To protect a free software project worked on by several contributors against regressions caused by a committed change, one needs frequent, automated testing of the code, base, ideally triggered by every commit into the repository. This is called Continuous Integration (CI). | To protect a free software project worked on by several contributors against regressions caused by a committed change, one needs frequent, automated testing of the code, base, ideally triggered by every commit into the repository. This is called Continuous Integration (CI). | ||
Line 333: | Line 400: | ||
=====cups-filters: Create OCR filter to deliver scans as searchable PDFs===== | =====cups-filters: Create OCR filter to deliver scans as searchable PDFs===== | ||
- | 1 contributor half-size (175 hrs) | + | 1 contributor half-size (175 hrs), Level of difficulty: Intermediate |
Scanning with IPP Scan gives the user the possibility to request the scanned image in PDF format. If the IPP Scan server is a Scanner Application, a filter function from cups-filters would convert the the raster image coming from the scanner into PDF. | Scanning with IPP Scan gives the user the possibility to request the scanned image in PDF format. If the IPP Scan server is a Scanner Application, a filter function from cups-filters would convert the the raster image coming from the scanner into PDF. |