User Tools

Site Tools


gsoc:google-summer-code-2024-openprinting-projects

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
gsoc:google-summer-code-2024-openprinting-projects [2024/01/20 22:18]
till
gsoc:google-summer-code-2024-openprinting-projects [2024/04/01 09:28] (current)
till
Line 8: Line 8:
 Mailing list: [[https://​lore.kernel.org/​printing-architecture/​|printing-architecture at lists dot linux dot dev]] ([[https://​subspace.kernel.org/​lists.linux.dev.html|Instructions]]) Mailing list: [[https://​lore.kernel.org/​printing-architecture/​|printing-architecture at lists dot linux dot dev]] ([[https://​subspace.kernel.org/​lists.linux.dev.html|Instructions]])
  
-IRC#​openprinting on [[https://libera.chat/|Libera.Chat]]+Telegram: [[https://t.me/+RizBbjXz4uU2ZWM1|OpenPrinting Channel]] 
 + 
 +Mastodon/​Fediverse:​ [[https://​ubuntu.social/​tags/​OpenPrinting|#​OpenPrinting]]
  
 Our code repositories:​ [[https://​github.com/​OpenPrinting|OpenPrinting GitHub]] Our code repositories:​ [[https://​github.com/​OpenPrinting|OpenPrinting GitHub]]
Line 32: 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 134: 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 165: Line 171:
  
 =====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), 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.
 +
 +But system-config-printer s still used a lot. There are practically only 3 printer setup tools around: The "​Printers"​ module of GNOME Control Center, the printer manager of KDE Settings, and system-config-printer. There are many more desktop environments than just GNOME and KDE, and distributions using many of those use system-config-printer as their printer setup tool.
 +
 +For switching distributions into the New Architecture,​ meaning from CUPS 2.x to CUPS 3.x, the printer setup tool needs to get appropriately adapted, to list IPP print destinations with appropriate configuration options, especially access to their web admin interfaces, and assign Printer Applications to non-driverless printers.
 +
 +One could also think about dropping the concept of printer setup tools altogether as modern, driverless printers are simply there, but it is not very intuitive for a user to have to find a Printer Application and install it to make a non-driverless printer working and that for driverless printers and Printer Applications there are web admin interfaces and how to access them.
 +
 +So to assure continued coverage of all desktops we need to revive development of system-config-printer and make it supporting the New Architecture,​ but as with GNOME Control Center and KDE Settings we also need to keep the old functionality,​ to allow a switchover to the new CUPS at any time and already while still using CUPS 2.x, have a better support for driverless printers.
 +
 +And this is the contributor'​s task in this project.
 +
 +Note that system-config-printer is written in Python.
 +
 +Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD
 +
 +Desired knowledge: Python, C, CUPS
 +
 +Code License: GPL-2+ (GPL 2 or any later version)
  
 =====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), 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).
 +
 +Authorization in printing is needed to once protect the data of confidential jobs, and second, to protect printer resources, like toner or paper.
 +
 +OAuth2, standard for authorization for internet services ("Log in with Google"​) is also used as authorization standard for IPP (Internet Printing Protocol) printing.
 +
 +As described in a talk on the OpenPrinting microconference on Linux Plumbers 2022 ([[https://​lpc.events/​event/​16/​contributions/​1165/​attachments/​1093/​2097/​LPC2022_OAuth2_for_IPP.pdf|slides]],​ [[https://​www.youtube.com/​watch?​v=8UjrKos6LuY|video]]) when accessing an IPP printer requiring authorization,​ it returns the URL to request the authorization from the authorization server in the response to the get-printer-attributes IPP request. Now the print client (print dialog, printer setup tool) has to open the URL in a browser so that the user can log in, create an account, or whatever the authorization server needs to identify the user. On success the server returns a URL with authorization code with which the client can get the access code to the printer.
 +
 +This works for all kinds of IPP print destinations which require authorization,​ not only physical network printers but also print servers and IPP-based cloud printing services.
 +
 +The contributor'​s task is to add the functionality to open the authorization server URLs and to supply the access code to the printer to the desktop printing workflow. This can be implemented in print dialogs or perhaps even made independent of concrete print dialogs by the [[https://​github.com/​OpenPrinting/​cpdb-backend-cups|CPDB backend for CUPS]] triggering a D-Bus service for opening the URL (perhaps desktops always have such a thing?). Investigating what the best solution is for this task is part of the project.
 +
 +Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Gaurav Guleria (gaurav dot gen3 at gmail dot com), TBD
 +
 +Desired knowledge: %%C/C++%%, GTK or Qt, DNS-SD/​Avahi,​ CUPS/IPP
 +
 +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 189: Line 300:
  
 Code License: Apache 2.0 Code License: Apache 2.0
- 
-=====CPDB backend for IPP infrastructure/​cloud printers===== 
- 
- 
- 
- 
  
 =====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 218: Line 323:
 Code License: Apache 2.0 Code License: Apache 2.0
  
-=====Printer Application ​for Braille embossers=====+=====Converting Braille embosser support into a Printer Application=====
  
 +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.
 +
 +For long-term support and wide availability,​ this needs to be converted to the newer CUPS infrastructure,​ Printer Applications.
 +
 +The contributor'​s task is thus:
 +
 +  * Converting these shell scripts into filter functions in libcupsfilters
 +  * Creating a Printer Application that exposes Braille embossers configuration to users
 +
 +The contributor does not need to own any specific hardware, a comparison can be made between the output of the existing shell-script-based implementation and the output of the converted implementation.
 +
 +Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Samuel Thibault, Braille expert (samuel dot thibault at ens-lyon dot org)
 +
 +Desired knowledge: %%C/C++%%, Shell, CUPS
 +
 +Code License: Apache 2.0
  
 =====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 250: Line 372:
 Code License: Apache 2.0 Code License: Apache 2.0
  
-=====CI Testing programs for libcupsfilters, ​libpappl-retrofitlibppd, CPDB, ...=====+=====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 260: Line 382:
 This naturally requires test scripts/​programs which are compiled and run by the `make test` step. For CUPS for example the daemon is started (on an unprivileged port so that it does not need root), queues created and listed, jobs sent, the logs checked whether everything went OK, ... For Ghostscript a large collection of input files (gathered from bug reports) is processed and converted into raster formats. This naturally requires test scripts/​programs which are compiled and run by the `make test` step. For CUPS for example the daemon is started (on an unprivileged port so that it does not need root), queues created and listed, jobs sent, the logs checked whether everything went OK, ... For Ghostscript a large collection of input files (gathered from bug reports) is processed and converted into raster formats.
  
-The contributor'​s task here is to write test programs for the different ​OpenPrinting projects so that `make test` does something useful, being efficient to catch regressions. They should exercise important functionality of the software with different parameters and analyse logs and output files to check whether the program did the expected work.+The contributor'​s task here is to write test programs for the OpenPrinting projects ​libppd and pappl-retrofit ​so that `make test` does something useful, being efficient to catch regressions. They should exercise important functionality of the software with different parameters and analyse logs and output files to check whether the program did the expected work.
  
 Test programs are also needed for the so-called '​autopkgtest'​ tests which are added to Debian packages and executed whenever the package is uploaded to Debian or Ubuntu. Test programs are also needed for the so-called '​autopkgtest'​ tests which are added to Debian packages and executed whenever the package is uploaded to Debian or Ubuntu.
Line 274: Line 396:
 Desired knowledge: C, Shell, PAPPL, CUPS, CI Desired knowledge: C, Shell, PAPPL, CUPS, CI
  
-Code License: Apache 2.0, MIT+Code License: Apache 2.0
  
 =====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.
gsoc/google-summer-code-2024-openprinting-projects.1705789101.txt.gz · Last modified: 2024/01/20 22:18 by till