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
Next revision Both sides next revision
gsoc:google-summer-code-2024-openprinting-projects [2024/01/13 16:43]
till
gsoc:google-summer-code-2024-openprinting-projects [2024/01/19 03:26]
till
Line 6: Line 6:
 **Important:​** We protect the e-mail addresses of our mentors and mailing lists against spam bots. Please replace all occurrences of " at " and " dot " by "​@"​ and "​."​ resp. **Important:​** We protect the e-mail addresses of our mentors and mailing lists against spam bots. Please replace all occurrences of " at " and " dot " by "​@"​ and "​."​ resp.
  
-Mailing list: [[http://lists.linux-foundation.org/​mailman/​listinfo/​printing-architecture|printing-architecture at lists dot linux-foundation ​dot org]]+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]] IRC: #​openprinting on [[https://​libera.chat/​|Libera.Chat]]
Line 23: Line 23:
  
 =====Introduction===== =====Introduction=====
 +
 +====Videos/​Podcasts====
 +
 +  * [[https://​youtu.be/​CLEMiM0L2Jk|Destination Linux: Till Kamppeter and Michael Sweet about the history of OpenPrinting]]
 +  * [[https://​www.youtube.com/​watch?​v=P22DOu_ahBo|Ubuntu Indaba: Till Kamppeter and Michael Sweet about the New Architecture]]
 +  * [[https://​www.youtube.com/​watch?​v=diB3wm4HB1Y|Ubuntu Office Hours: Till Kamppeter and Aveek Basu about the Google Summer of Code]]
 +  * [[https://​www.youtube.com/​watch?​v=RbgXmDjxYa4|Ubuntu Summit 2022: Till Kamppeter hosting an OpenPrinting panel with Zdenek Dohnal, Johannes Meixner, Aveek Basu, and Deepak Patankar]]
 +  * [[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]]
  
 ====Printer Drivers get Printer Applications==== ====Printer Drivers get Printer Applications====
Line 38: Line 47:
 And already several years ago [[https://​openprinting.github.io/​achievements/#​pdf-instead-of-postscript-as-standard-print-job-format|we moved from PostScript to PDF as standard data format]] for print jobs. And already several years ago [[https://​openprinting.github.io/​achievements/#​pdf-instead-of-postscript-as-standard-print-job-format|we moved from PostScript to PDF as standard data format]] for print jobs.
  
-All this made us rethink how printer drivers should look like. Michael Sweet has already deprecated PPD files more than a decade ago, when we switched to PDF-centric printing (and the format is also not developed any more by Adobe), but due to lack of a replacement we have continued using them. Some years ago Michael Sweet introduced the [[https://​openprinting.github.io/​achievements/#​all-free-drivers-in-a-ppd-less-world---or---all-free-drivers-in-snaps|concept of Printer Applications]] as replacement for the classic CUPS printer drivers.+All this made us rethink how printer drivers should look like. Michael Sweet has already deprecated PPD files more than a decade ago, when we switched to PDF-centric printing (and the PostScript ​format is also not developed any more by Adobe), but due to lack of a replacement we have continued using them. Some years ago Michael Sweet introduced the [[https://​openprinting.github.io/​achievements/#​all-free-drivers-in-a-ppd-less-world---or---all-free-drivers-in-snaps|concept of Printer Applications]] as replacement for the classic CUPS printer drivers.
  
 A Printer Application is nothing else than a daemon which emulates a driverless IPP (at least IPP Everywhere) network printer. It advertises itself, speaks IPP, and understands standard protocols as an actual network printer, and even has an administration web interface. Internally, it converts the incoming jobs to the printer'​s native, often proprietary PDL and sends them off to the physical, non-driverless printer on USB, parallel port or with any network protocol like LPD or raw socket (port 9100). The capabilities which the Printer Application reports on IPP requests or in its DNS-SD record are the capabilities of the printer. A Printer Application is nothing else than a daemon which emulates a driverless IPP (at least IPP Everywhere) network printer. It advertises itself, speaks IPP, and understands standard protocols as an actual network printer, and even has an administration web interface. Internally, it converts the incoming jobs to the printer'​s native, often proprietary PDL and sends them off to the physical, non-driverless printer on USB, parallel port or with any network protocol like LPD or raw socket (port 9100). The capabilities which the Printer Application reports on IPP requests or in its DNS-SD record are the capabilities of the printer.
Line 67: Line 76:
 So we are going to replace SANE in the role of an interface between scanning user applications and scanner drivers by the sandboxing-ready eSCL. SANE will continue to exist, but to provide the legacy scanner drivers enclosed in a Scanner Application. So we are going to replace SANE in the role of an interface between scanning user applications and scanner drivers by the sandboxing-ready eSCL. SANE will continue to exist, but to provide the legacy scanner drivers enclosed in a Scanner Application.
  
-Work on extending the Printer Application framework [[https://​github.com/​michaelrsweet/​pappl/​|PAPPL]] has already been [[https://​github.com/​Bhavna2020/​GSoC-2021|started in GSoC 2021]] and [[https://​gist.github.com/​Rishabh-792/​b1a2960b7e0e3d2bd3a5f4db3d260fc0|continued in GSoC 2022]].+Work on extending the Printer Application framework [[https://​github.com/​michaelrsweet/​pappl/​|PAPPL]] has already been started in GSoC [[https://​github.com/​Bhavna2020/​GSoC-2021|2021]] and continued in GSoC [[https://​gist.github.com/​Rishabh-792/​b1a2960b7e0e3d2bd3a5f4db3d260fc0|2022]] and [[https://​dev.to/​kappuccino111/​sandboxing-scanners-a-leap-into-the-driverless-realm-gsoc-23-report-3eci|2023]].
  
 ====Desktop Integration==== ====Desktop Integration====
Line 79: Line 88:
 Up to CUPS 2.x a print destination was defined by a CUPS queue, defined in the printers.conf configuration file of CUPS, consisting of a name under which the queue is identified, a device URI which defines the way how to access the printer hardware, and the PPD file telling about the driver to use and the capabilities of the printer. Up to CUPS 2.x a print destination was defined by a CUPS queue, defined in the printers.conf configuration file of CUPS, consisting of a name under which the queue is identified, a device URI which defines the way how to access the printer hardware, and the PPD file telling about the driver to use and the capabilities of the printer.
  
 +This is not needed any more for modern, driverless IPP printers and CUPS has already started to support them explicitly in the 2.x generation. For the New Architecture a print destination is an IPP print service, advertised via DNS-SD and all needed information to print on it can be retrieved by IPP.
 +
 +For print dialogs we separate the GUI and the communication with CUPS into separate frontend (print dialog) and backend (CUPS communication) using the [[https://​openprinting.github.io/​achievements/#​common-print-dialog-backends|Common Print Dialog Backends]]. So the CUPS backend is maintained by OpenPrinting,​ as CUPS itself, meaning that it will always keep pace with the development of CUPS, and changes in CUPS, like the New Architecture,​ will go into it right away. By this we only need to take care that all existing print dialogs (GNOME/GTK, KDE/Qt, Mozilla (Firefox/​Thunderbird),​ Chromium Browser, LibreOffice) get CPDB support.
 +
 +Printer setup tools (GNOME Control Center, KDE Settings, system-config-printer) need to list IPP print destinations on their main view, and give appropriate configuration options on them to the user, especially a button to quickly open the web admin interface, also the destinations should get listed in logical groups,to have printing and fax out of a multi-function device together, or the printers supported by the same Printer Application.
 +
 +Also the "Add Printer"​ part of the printer setup tools still makes sense.It has to list non-driverless printers and assign Printer Applications instead of PPD files to them.
 +
 +Actually we will not remove the old functionality from the printer setup tools and replace it by the new on. Instead, we add the new functionality so that the tool works with any CUPS version, and in the case of CUPS 2.x they will then handle both permanent CUPS queues with PPD files and IPP print destinations which CUPS can print on without needing to create a queue. This way distributions will be able to switch to CUPS 3.x at any time and no synchronous switch of both CUPS and the printer setup tool(s) is required.
 +
 +Parts of this work got already done, especially most of the "​Printers"​ module in GNOME Control Center by Mohit Verma during GSoC [[https://​github.com/​vermamohit13/​GSOC_2022_Summary|2022]] and [[https://​github.com/​vermamohit13/​GSOC-2023|2023]],​ CPDB support in the GTK print dialog and most of the CPDB support in the Qt print dialog by Gaurav Guleria in GSoC [[https://​github.com/​TinyTrebuchet/​gsoc22/​|2022]] and CPDB support for the print dialog of the Chromium Browser by Kushagra Sharma in GSoC [[https://​github.com/​kushagra20251/​GSoC/​|2023]].
 +
 +For a smooth transition to CUPS 3.x in all distributions we need to add support for the New Architecture in **all** desktop environments and **all** applications. Especially if we want to switch Ubuntu to CUPS 3.x we cannot only take GNOME into account, as the core of the Ubuntu distribution is also used by the 10 official, community-maintained flavors which cover a wide range of desktops. Therefore we were [[https://​openprinting.github.io/​OpenPrinting-News-August-2023/#​the-cups-snap-not-in-ubuntu-2310|not able to switch Ubuntu 23.10 to use the CUPS Snap]].
  
  
Line 101: Line 123:
   * [[https://​github.com/​OpenPrinting/​cpdb-libs|Common Print Dialog Backends Libraries]] - Libraries implementing the Common Print Dialog Backends (CPDB) concept   * [[https://​github.com/​OpenPrinting/​cpdb-libs|Common Print Dialog Backends Libraries]] - Libraries implementing the Common Print Dialog Backends (CPDB) concept
   * [[https://​github.com/​OpenPrinting/​cpdb-backend-cups|Common Print Dialog Backends CUPS Backend]] - Backend to print with CUPS from all CPDB-supporting print dialogs   * [[https://​github.com/​OpenPrinting/​cpdb-backend-cups|Common Print Dialog Backends CUPS Backend]] - Backend to print with CUPS from all CPDB-supporting print dialogs
-  * [[https://​github.com/​OpenPrinting/​cpdb-backend-file|Common Print Dialog Backends Print-to-File Backend]] - Backend to print to a file from all CPDB-supporting print dialogs 
  
 See also See also
Line 107: Line 128:
   * [[https://​openprinting.github.io/​about-us/​|All about OpenPrinting]] - How it started, what we achieved, and what we are doing   * [[https://​openprinting.github.io/​about-us/​|All about OpenPrinting]] - How it started, what we achieved, and what we are doing
   * [[https://​openprinting.github.io/​news/​|OpenPrinting News and Events]] - Monthly news post, software releases, ...   * [[https://​openprinting.github.io/​news/​|OpenPrinting News and Events]] - Monthly news post, software releases, ...
-  * [[https://lists.linuxfoundation.org/pipermail/​printing-architecture/​|OpenPrinting mailing list archive]] - Our recent discussions about the development of the printing architecture ​([[https://​lists.linuxfoundation.org/​pipermail/​printing-architecture/​2021/​thread.html|2021]],​ [[https://​lists.linuxfoundation.org/​pipermail/​printing-architecture/​2022/​thread.html|2022]])+  * [[https://lore.kernel.org/​printing-architecture/​|OpenPrinting mailing list archive]] - Our recent discussions about the development of the printing architecture
  
 ======Project Ideas====== ======Project Ideas======
 +
 +=====Desktop integration:​ CPDB support for the print dialogs of Mozilla (Thunderbird/​Firefox) and LibreOffice=====
 +
 +=====Desktop Integration:​ Update system-config-printer for the New Architecture of printing=====
 +
 +=====Desktop Integration:​ User interfaces for using OAuth2 with printers and scanners=====
 +
 +=====Replace QPDF by PDFio as PDF manipulation library in libcupsfilters (cfFilterPDFToPDF() filter function and others)=====
 +
 +Like CUPS, 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++%%.
 +
 +But libcupsfilters still depends on one library which is written in %%C++%%, QPDF, a library for manipulating PDF files: Scaling up and down, moving around on the page, rotating, combining several source pages on one destination page, turning filled PDF forms into straight PDF, ... QPDF is used by the filter functions cfFilterPDFToPDF(),​ cfFilterBannerToPDF(),​ cfFilterGSToRaster(),​ and cfFilterRasterToPDF().
 +
 +
 +
 +
 +
 +
 +
 +The PDFio project is about completely eliminating the need of QPDF, which is a PDF manipulation library written in %%C++%% from libcupsfilters by replacing it with PDFio, a PDF manipulation library written completely in regular C. This makes libcupsfilters being completely in regular C and not using any %%C++%% any more. %%C++%% 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++%%.
 +
 +But for such a switchover we must take into account that QPDF is a complex and sophisticated project with a lot of features (it got even new features by two GSoC projects of OpenPrinting) while PDFio is a young project run as one of the many small projects by Michael Sweet and we must be very careful to see whether it does not miss any important feature. Especially we must look after correct printing of filled-in PDF forms and PDF annotations.
 +
 +So part of the project will be investigation of suitability and perhaps also work with Mike to get needed features added.
 +
 +=====CPDB backend for IPP infrastructure/​cloud printers=====
 +
 +=====Turn cups-browsed into a Printer Application=====
 +
 +=====Printer Application for Braille embossers=====
 +
  
 =====Adding support for the new functionality/​attributes of IPP Everywhere 2.x to libcupsfilters and the Common Print Dialog Backends (CPDB)===== =====Adding support for the new functionality/​attributes of IPP Everywhere 2.x to libcupsfilters and the Common Print Dialog Backends (CPDB)=====
gsoc/google-summer-code-2024-openprinting-projects.txt ยท Last modified: 2024/04/01 09:28 by till